1

我有一個可以很好創建的表的列表。然後,我想通過單擊父級上的編輯(轉到edit.html.erb),然後單擊「新建孩子」來創建子表。父表和子表之間的關係是has_and_belongs_to_many。Ruby on Rails - 在habtm關係中創建子表

<%= button_to 'New Child', new_parent_child_path([@parent, @parent.children.build]), :method => :get %> 

這是鏈接到新的子窗體,產生以下錯誤:

'undefined method `children' for nil:NilClass' 

服務器日誌給我下面的:

Started GET "/parents/1//children/new" for blah at blah 
Processing by ChildrenController#new as HTML 
    Parameters: {"parent_id"=>"1"} 
    Rendered children/_form.html.erb (1.3ms) 
    Rendered children/new.html.erb within layouts/application (1.9ms) 
Completed 500 Internal Server Error in 4ms 

ActionView::Template::Error (undefined method `children' for nil:NilClass): 
    1: <%= form_for ([@parent, @parent.children.build]) do |f| %> 
    2: 
    3: <div class = "field"> 
    4: <%= f.label :Child_name %><br/> 
    app/views/children  /_form.html.erb:1:in`_app_views_children__form_html_erb__2140243687_70034946643120' 
    app/views/children/new.html.erb:3:in `_app_views_children_new_html_erb__655166082_70034947829100' 

的_form.html.erb在new.html.erb中呈現的子圖如下:

<%= form_for ([@parent, @parent.children.build]) do |f| %> 

<div class = "field"> 
    <%= f.label :Child_name %><br/> 
    <%= f.text_field :ChildName %> 
</div> 

<div class = "field"> 
    <%= f.label :Child_email_address %><br/> 
    <%= f.text_field :ChildEmail %> 
</div> 

<div class = "actions"> 
    <%= f.submit %> 
</div> 
<% end %> 

(注意:表格實際上並不叫做父母和孩子,我只是爲了保密而使用這些名字。另外,請不要勸我通過使用的has_many,我不感興趣)

編輯#1:代碼從「ChildrenController」

+0

你可以發佈你的'新'行動的代碼嗎? – cdesrosiers

+0

已添加您請求的代碼。 – user1701622

+0

你是一個絕對的明星,謝謝你這麼多!我一直堅持這幾天。我是新來的stackoverflow;我怎麼去說這是固定的,並給你任何相當於網站使用的代表/業力? – user1701622

回答

0

您需要包括@parent = Parent.find(params[:parent_id])在新的行動,因爲你在new.html.erb模板中使用它。否則它將爲零,並且@parent.children.build將不起作用。

+0

輝煌,謝謝你 – user1701622