自动创建has_many:通过没有会话的记录

时间:2014-01-07 18:02:20

标签: ruby-on-rails

我似乎无法弄清楚如何在没有活动会话的情况下自动创建has_many直通记录。

我有两个通过family_association模型相关的模型:

class Tree < ActiveRecord::Base 
has_many :family_associations
has_many :families, through: :family_associations
end

class Family < ActiveRecord::Base 
has_many :family_associations
has_many :trees, through: :family_associations
end

在我的“显示树”视图中,有一个用于创建新族的按钮,并将树的id作为url参数传递

<%= link_to "Add Family to Tree", new_family_path(:tree_id=>@tree.id), :class => "btn btn-default" %>

仅供参考:我不能拥有Family belongs_to Tree模型,因为从理论上讲,我选择的一个家庭将来属于多个树。因此,没有tree_id字段可以预先填充新的Family表单。

目标是在保存家庭记录后创建家庭协会记录。到目前为止,我已经创建了associate_family辅助方法:

 def associate_family(tree, family)
    FamilyAssociation.create(:tree_id => tree, :family_id => family)
 end

并在我的家庭控制器的创建方法中包含以下逻辑:

    if @family.save
       associate_family(params[:tree_id], @family.id)

创建关联记录但不足为奇,缺少tree_id。我是以正确的方式来做这件事的吗?有没有办法暂时将tree_id url参数从New添加到Create?

1 个答案:

答案 0 :(得分:1)

根据你的模特,我认为你正在努力建造一个家庭树。如果是这种情况,我建议您使用Ancestry gem,有关详细信息,请参阅railscast

如果你想坚持通过has_many:通过关联并想暂时从新传递到创建,我已经按照你已经完成的方式完成了。我也不知道其他选择。