2012-08-24 46 views
0

這是我第一次發佈,所以請讓我知道是否有任何我需要添加。我有一個Event資源和一個嵌套的Item資源(該函數允許事件的客人攜帶物品)。Rails 3只有一組字段的選擇框嵌套表格

我在事件編輯視圖中有一個嵌套的項目更新窗體,它允許您從下拉選擇框中選擇一個項目,然後從另一個選擇框中選擇一個數量以更新所需的項目數量。這是下面的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 

我的問題是,因爲:項目是複數,我得到一個選擇框爲相關的事件,當我只想要一個「項目名稱」選擇框和一個「每個項目物品數量「選擇框。

當我將表單更改爲:item我得到我想要的視圖,但是當我點擊'更新事件'按鈕時,我得到'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 

EDIT 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 

事件控制器的編輯操作(只有相關部分):

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

你能展示你的更新操作代碼嗎? – rb512

+0

@ rb512我在上面添加了事件更新操作代碼 – kaustubhb

+0

您還可以使用事件控制器的編輯操作來顯示事件和項目模型嗎? – rb512

回答

0

在你的編輯操作,你的變量名是@item但在你的表格是:items。您的事件模型中還有一個名爲item的字段。所以,在你的表格中,它應該是:item而不是:items。

但是,這仍然會與您的事件模型中的項目字段衝突。所以要解決這個問題,請在編輯操作中將您的item變量重命名爲my_items之類的內容,並在您的表單中使用相同的變量。

調用items是一個壞主意,因爲rails會將其與@event的項目對象混淆,從而給您帶來不希望的結果。