0

多対多の関連付け (イベントには多くの製品があり、製品には多くのイベントがあります) を持つ 2 つのモデルがあり、1 つの製品をイベントに追加しようとしています。システムが処理する必要がある多くのタイプの製品を実装するために、単一のテーブル継承を使用しました。これが、以下のエラーでLighting製品ではなくモデル名になっている理由です。製品をイベントに追加するためにコントローラーに次のメソッドがありますが、次のエラーが発生します。

NoMethodError in AddeventController#add

undefined method `each' for #<Lighting:0x007fd4bc798c70>

app/controllers/addevent_controller.rb:5:in `add'

そして私の行動は次のようになります:

  def add
      @event = current_event
      product = Product.find(params[:id])
      if @event.update_attribute(:products, product) #This is line 5
        format.html {redirect_to @event, notice: "Product added to event"}
      end
    end

Current_event は、セッションからイベントの ID を取得する単なるメソッドです。

それで、何がうまくいかないのですか?

4

1 に答える 1

3

多対多の関係は配列で機能するため、製品を配列でラップする必要がある場合があります。

@event.update_attribute(:products, [product])

また、アクションの名前は、イベントの製品を単一の製品に置き換えるだけでなく、イベントに製品を追加することを示唆しています。あなたがすべきかもしれません:

@event.products << product
于 2012-06-24T22:49:36.597 に答える