作为一个新手,我一直在寻找在显示父项时创建子项的最佳实践。我发现了很多解释,相当不完整,对我来说并不明显。有人可以描述最佳实践的完整实施吗?我创建parent_item
和child_item
建模包括has_many
和belongs_to
声明。我可以在“显示”视图中列出链接child_items
(手动创建) 。parent_item
现在我想<%= link_to 'New Child Item', new_child_item_path %>
在 URL 中创建一个传递父母的 id 作为参数。现在该走哪条路?
- 修改路线?
- 向控制器添加参数
child_item.new
? - 在 child_item 表单中有一个隐藏字段来存储
parent_item.id
值?
我很乐意给最好的解释一个拥抱!
谢谢 !
弗雷德
你好,谢谢你的帮助。当我发现这个嵌套资源功能时,我尝试成功地应用它:从父级创建子级时,表单显示为带有已传递给它的 parent_id。
这是我的代码更新:(游乐场是父母,风景是孩子)
路线
resources :playgrounds do
resources :landscapes, :only=>[:new, :create]
end
SHOW(来自游乐场家长)
<%= link_to 'Add landscape', new_playground_landscape_path(@playground) %>
LANDSCAPE_CONTROLLER
def new
@landscape = Landscape.new
@landscape.playground_id = params[:playground_id]
FORM(来自景观)-我不需要参考@playground,因为我只有这种形式的景观字段(我是对的吗?)
<%= form_for [@landscape] do |f| %>
...
<div class="field">
<%= f.label :playground_id %><br />
<%=f.text_field :playground_id%>
</div>
太好了,效果很好。但是playground_id 字段不应该出现在表单中,并且在landscape.rb 模型中被定义为不可访问属性。这些要求是否兼容?我应该隐藏这个字段,让它可以访问吗?
谢谢你的帮助 !
弗雷德