0

私のアプリでは、製品には多くのクライアントによって書かれたたくさんの意見があります。関連付けのあるモデルは次のとおりです。

class Product < ActiveRecord::Base
    attr_accessible :name, :desc, :price

    has_many :opinions
end

class Client < ActiveRecord::Base
    attr_accessible :name, :bio

    has_many :opinions
end

class Opinion < ActiveRecord::Base
    attr_accessible :rate, :comment

    belongs_to :client, :product
end

パラメーターには、評価の招待 ID があります。これは、product_id と client_id の両方を取得するのに役立ちます (両方を持っていると考えてください)。

フォームにはレート (radio_button、1 から 5) とコメント (text_field) のみが含まれます。

2 つのモデル (クライアントと製品) に属する新しい意見は、opinion#create メソッドによってどのように作成されるのでしょうか?

client_id と product_id を直接渡そうとしましたが、MassAssignment エラーが発生しました:

# Remember: I have product_id and client_id
product = Product.find_by_id product_id

opinion = product.opinions.build params[:opinion]
opinion.product_id = product_id
opinion.client_id = client_id

opinion.save

opinion.client_id = client_id念のため、アプリの最初のバージョンでは、意見は製品にのみ属し、上記のコード (行を削除)を使用してうまく機能するため、以前productは意見を作成していました)。したがって、これは単なる拡張です。

何か案が?前もって感謝します。

4

1 に答える 1

1

product.opinions.build params[:opinion]product_id がすでに product.id に設定されている新しい意見を作成します。関連付けにより、これを行うことがわかっていますbelongs_to :product。ただし、どのクライアントに属しているかはまだわからないため、これを手動で設定する必要があります。ただし、これを行うには attr_accessible :client_id を Opinion に追加する必要があります。

于 2012-08-28T15:45:04.553 に答える