Witam serdecznie!
Mój problem polega na tym, że nie działa mi akcja show, w relacji has_many
No route matches {:action=>“show”, :controller=>“produkts”, :firma_id=>“3”} missing required keys: [:id]
- Modele:
class Firma < ActiveRecord::Base has_many :produkts end
class Produkt < ActiveRecord::Base belongs_to :firma end
- Kontroler produkts
class ProduktsController < ApplicationController
layout 'admin'
before_action :set_produkt, only: [:show, :edit, :update, :destroy]
before_action :set_firma before_action :waluta, only: [:new, :edit, :update]
def index @produkt = @firmas.produkts.najnowszy end
def show end
def new @produkt = Produkt.new({:firma_id => @firmas.id, :nazwa => "Podaj nazwę produktu"}) @firma = Firma.order('created_at ASC') end
def edit end
def create @produkt = Produkt.new(produkt_params)
respond_to do |format| if @produkt.save format.html { redirect_to @produkt, notice: 'Produkt was successfully created.' } format.json { render :show, status: :created, location: @produkt } else @firma = Firma.order('created_at ASC') format.html { render :new } format.json { render json: @produkt.errors, status: :unprocessable_entity } end end end
def update respond_to do |format| if @produkt.update(produkt_params) format.html { redirect_to @produkt, notice: 'Produkt was successfully updated.' } format.json { render :show, status: :ok, location: @produkt } else format.html { render :edit } format.json { render json: @produkt.errors, status: :unprocessable_entity } end end end
def destroy @produkt.destroy respond_to do |format| format.html { redirect_to produkts_url, notice: 'Produkt was successfully destroyed.' } format.json { head :no_content } end end
private
def waluta @waluta = %w[PLN EUR USD CHF RUB] end
def set_firma if params[:firma_id] @firmas = Firma.find(params[:firma_id]) end end
def set_produkt @produkt = Produkt.find(params[:id]) end
def produkt_params params.require(:produkt).permit(:firma_id, :category_id, :subcategory_id, :nazwa, :opis, :widoczny, :zdjecie1, :zdjecie2, :zdjecie3, :cena, :waluta, :link)
end
- Widok index produkts, gdzie w wywołaniu akcji show występuje błąd:
<%= notice %>
<h1>Produkts</h1>
<table> <thead> <tr> <th>Firma</th> <th>Nazwa</th> <th>Opis</th> <th>Widoczny</th> <th>Zdjecie1</th> <th>Cena</th> <th>Waluta</th> <th>Link</th> <th colspan="3"></th> </tr> </thead>
<tbody> <% @produkt.each do |produkty| %> <tr> <td><%= produkty.id %></td> <td><%= produkty.firma_id %></td> <td><%= produkty.nazwa %></td> <td><%= produkty.opis %></td> <td><%= produkty.widoczny %></td> <td><%= produkty.zdjecie1 %></td> <td><%= produkty.cena %></td> <td><%= produkty.waluta %></td> <td><%= produkty.link %></td> <td><%= link_to 'show', firma_produkt_path %></td>
</tr> <% end %> </tbody> </table>
<br> <%= link_to 'New Produkt', new_firma_produkt_path %>
No route matches {:action=>“show”, :controller=>“produkts”, :firma_id=>“3”} missing required keys: [:id]
Mniej więcej rozumiem o co chodzi w restful, ale tu pogubiłem się, nie wiem dlaczego nie pobiera :id produktu skoro w samym index’ie ten id istnieje,
- trasy chyba są ok:
Rails.application.routes.draw do
root "firmas#index"
resources :firmas do resources :produkts end end
Za wszelką pomoc z góry dziękuję