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 모델을 추가했습니다. 정의되지 않은 'merge'메소드가 2 개 있습니다. Fixnum ..... 다른 정보를 알려주세요. 감사합니다. – katie

+0

bricker의 질문에 감사드립니다. 일반적으로 레일스 양식에서 숨겨진 필드를 사용하고있는 자신을 발견하면 사용법을 피하기 위해 '레일 방식'과 같이 다르게 수행해야하는 사항을 나타냅니다. 이것이 당신이 달성하고자하는 것에 대한 더 많은 정보가 도움이 될 수있는 이유입니다. :) –

답변

3

자, 이제 코드를 자세히 살펴보고 문제가 무엇인지 분명하게 보았습니다. hidden_field 도우미는 인수 중 하나로 value을 가지고 있지 않습니다. 사용 :

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

그러나 Michael Durrant가 지적한 이유로 컨트롤러에서 처리하는 것이 좋습니다.

+0

감사합니다. 컨트롤러에서 어떻게 처리합니까? – katie

+0

그냥 컨트롤러에서 도시를 가져 와서 params 해시로 합치십시오. – bricker