0

has_many の意見が含まれる has_many の製品を扱うストアを考えてみましょう。モデルは次のとおりです。

店:

class Store < ActiveRecord::Base
    attr_accessible :desc, :location, :name, :phone, :status, :url

    has_many :products
    has_many :opinions, :through => :products
end

製品:

class Product < ActiveRecord::Base
    attr_accessible :desc, :name, :status, :url

    belongs_to :store
    has_many :opinions
end

最後に、意見:

class Opinion < ActiveRecord::Base
    attr_accessible :content, :eval, :status

    belongs_to :store
    belongs_to :product
end

(製品とストアに属する) 新しい意見を作成するには、 OpinionsController の create メソッドを次に示します。

def create

    # Get product info.
    product = Product.find_by_id params[:opinion][:product_id]

    # Create a new opinion to this product
    opinion = product.opinions.build params[:opinion]
    opinion.status = 'ON'

    if opinion.save
        redirect_to :back, :notice => 'success'
    else
        redirect_to :back, :alert => 'failure'
    end
end

しかし、結果のエラーは次のとおりです。Can't mass-assign protected attributes: product_id

質問: product_id をコントローラーに渡すにはどうすればよいですか?

さらに情報が必要な場合は教えてください。

前もって感謝します。

4

2 に答える 2

3

これは、ネストされたリソース ルーティングを使用できるシナリオのようですhttp://guides.rubyonrails.org/routing.html#nested-resources

ただし、Opinion コントローラーで簡単な修正が必要な場合は、Opinion をビルドするときに product_id を省略するだけで済みます。このようなものが動作するはずです:

# Get product info.
product = Product.find_by_id params[:opinion].delete(:product_id)  # delete removes and returns the product id

# Create a new opinion to this product
opinion = product.opinions.build params[:opinion]  # Since there is no product id anymore, this should not cause a mass assignment error.
于 2012-08-18T08:58:07.380 に答える
0

Opinion は belongs_to :store を持つことができませんでした (opinion.product.store のようなストア パラメータを取得できます) attr_accessible

于 2012-08-17T23:41:13.027 に答える