我正在尝试找出保存belongs_to记录ID的最佳方法,同时创建一个新的子记录。我目前正在使用隐藏字段来保留父母的ID。
您能想出更好的方法来完成父母ID的保存(不使用隐藏字段)吗?
这是我的路线片段......
resources :kids
resources :parents do
resources :kids
end
这是我的父模型......
class Parent < ActiveRecord::Base
has_many :kids
accepts_nested_attributes_for :kids
end
这是我的孩子模特......
class Kid < ActiveRecord::Base
belongs_to :parent, :autosave => true
end
创建一个新孩子时,这是我的观点形式......
<%= form_for(@kid) do |f| %>
%= f.hidden_field :parent_id, :value => @parent.id %>
<%= f.label :title, 'Title' %>
<%= f.submit %>
<% end %>
然后传递给create(POST)方法......
def create
@kid = Kid.new(params[:kid])
@parent = Parent.find(@kid.parent_id)
@kid.save
# etc...
end
答案 0 :(得分:3)
如果您删除路线示例的第一行,只需
resources :parents do
resources :kids
end
现在你没有在没有父母的情况下调用KidsController的模糊性。您的路线匹配行为类似于
/parents/:parent_id/kids
现在,在您的KidsController中,您可以
def create
@parent = Parent.find(params[:parent_id])
@parent.kids.create( params[:kid] )
#...
end
当你通过has_many集合
创建它时,新的孩子会自动分配它的父级答案 1 :(得分:1)
是嵌套资源是一种很好的方法,但在您的情况下,您也可以使用“field_for”。
答案 2 :(得分:0)
如果您不想将其作为隐藏字段传递,我建议您使用nested resources,您可以将parent_id
保留在网址中,并parents/1/kids
作为您的路径。然后,在KidsController
中,您需要加载您的父资源并将其与Kid