0

初めて投稿するので、何か追加すべき点があれば教えてください。イベント リソースとネストされたアイテム リソースがあります (この機能は、イベントのゲストがアイテムを持ち込めるようにすることです)。

イベント編集ビューにネストされたアイテム更新フォームがあり、ドロップダウン選択ボックスからアイテムを選択し、別の選択ボックスから数量を選択して、必要なアイテムの数を更新できます。これは以下の form_for です。

= form_for @event do |f|
    = f.fields_for :items do |i|
        %p
        = i.select(:name, options_for_select(@event.items.map {|p| p.name}))
        = i.select(:quantity, (1..5))
    = f.submit

私の問題は、 :items が複数であるため、「アイテム名」選択ボックスと「アイテム数量」選択ボックスが1つだけ必要な場合に、イベントに関連付けられた各アイテムの選択ボックスを取得することです。

フォームを :item に変更すると、必要なビューが得られますが、[イベントの更新] ボタンを押すと、「アイテム」の不明な属性エラーが発生します。

これを解決するのに役立つ他の情報を教えてください。これはシンプルであるべきだと思います。私はこれをたくさん探しました。私の検索用語の組み合わせが理想的ではなかったのかもしれません。

よろしくお願いします。

編集

これが私のイベント更新アクションです:

def update
    @event = Event.find(params[:id])

    if @event.update_attributes(params[:event])
        redirect_to :back
        flash[:notice] = "Items Updated!"
    else
        redirect_to :back
    end
end

編集2

関連するセクションのみを含むイベントおよびアイテム モデル:

class Event < ActiveRecord::Base
 attr_accessible :items_attributes, :item_attributes, :name, :item 
 has_many :items
 accepts_nested_attributes_for :items
end

class Item < ActiveRecord::Base
 attr_accessible :name, :quantity, :event_id
 belongs_to :event
end

Event Controller の Edit Action (関連部分のみ):

    def edit
     @event = Event.find(params[:id])
     @item = @event.items.build
     unauthorized! if cannot? :update, @event
    end
4

1 に答える 1

0

編集アクションでは、変数名は です@itemが、フォームでは:itemsです。Event モデルには item というフィールドもあります。したがって、フォームでは、:items ではなく :item にする必要があります。

しかし、それでも Events モデルの項目フィールドと競合します。したがって、これを修正するには、編集アクションでアイテム変数の名前を次のように変更my_itemsし、フォームで同じ変数を使用します。

itemsレールは の items オブジェクトと混同し、@event望ましくない結果をもたらすため 、呼び出しは悪い考えです。

于 2012-08-28T04:14:33.270 に答える