3

我有一個嵌套表單,並且我想在商店模型中包含city_id,請問這個<%= s.hidden_field :city_id, @city.id %>正確嗎?如果是,那麼在控制器中添加什麼?如果這不是一個正確的方法,請問任何人都可以告訴我正確的方法嗎?非常感謝。如何在嵌套窗體中包含一個id?

<%= form_for @deal ,:url=>{:action =>"create"} do |c|%> 
    <%= c.text_field :item_name %> 
    <%= c.text_field :price %> 

    <%=c.fields_for :stores do |s| %> 
    <%=s.text_field :store_name %> 
    <%= s.hidden_field :city_id, @city.id %> 
    <%=s.text_field :address %> 
    <%end%>   

    <%= c.submit "post"%>  
<%end%> 

控制器

def create 
    @city = City.find(session[:city_id]) 
    @[email protected](params[:deal]) 

    if @deal.save 
    redirect_to @deal 
    flash[:notice]="successfully created" 
    else 
    render 'new' 
    end 
end 

模式

class City < ActiveRecord::Base 
    has_many :stores 
    has_many :deals 
end 

class Deal < ActiveRecord::Base 
    belongs_to :city 
    has_many :stores ,:through =>:store_deals 
    has_many :store_deals 
end 

class StoreDeal < ActiveRecord::Base 
    belongs_to :store 
    belongs_to :deal 
end 

錯誤

NoMethodError in Deal#new 

Showing /home/Deals/app/views/deal/new.html.erb where line #13 raised: 

undefined method `merge' for 2:Fixnum 
Extracted source (around line #13): 

10: <tr><td><label>Price</label></td><td><%= c.text_field :price %></td></tr> 
11: <%=c.fields_for :stores do |s| %> 
12: <tr><td><label>Store</label></td><td><%=s.text_field :store_name %></td></tr> 
13: <%= s.hidden_field :city_id, @city.id %> 
14: <tr><td><label>Cross street</label></td><td><%=s.text_field :address %></td></tr> 
15: <%end%> 
16: <tr><td><%= c.submit "post"%></td></tr> 
+0

您需要說明問題所在。你有錯誤嗎?意外的行爲?我不能說出什麼是錯的,但是你也沒有給我們足夠的代碼示例。相關模型以及調用表單的控制器操作將有所幫助。 – bricker

+0

@bricker我已經添加了模型,我得到了未定義的方法'合併'爲2:Fixnum .....讓我知道你需要什麼其他信息。謝謝 – katie

+0

磚匠的問題是好的。通常,當我發現自己在rails欄中使用隱藏字段時,這表明我應該採取不同的做法,即避免使用「軌道」。這就是爲什麼你想要獲得更多信息可能會有所幫助:) –

回答

3

好吧,現在我已經仔細查看了你的代碼,並且看清了問題所在。作爲其論據之一,hidden_field幫手沒有value。用途:

<%= s.hidden_field :city_id, :value => @city.id %> 

但是,對於原因邁克爾·達蘭特指出,這將是更好的控制器來處理這個問題。

+0

非常感謝!您如何在控制器中處理它? – katie

+0

只需在控制器中獲取城市並將其合併到params哈希中。 – bricker