如何在Rails表单中包含has_many关系?

时间:2012-09-26 05:29:34

标签: ruby-on-rails ruby

我有两个模型,ArtistUser通过第三个模型ArtistMembership连接。

在编辑/新艺术家表单中,我希望能够在该艺术家的现有ArtistMembership关系中编辑任何用户的角色,删除ArtistMemberships,并添加新的AtistMembership关系,其中包括User和:角色。

这是我的艺术家模特:

class Artist < ActiveRecord::Base
has_many :artist_memberships, foreign_key: "artist_id", dependent: :destroy

attr_accessible :bio, :created_at, :email, :location, :name, :updated_at, :website, :pic
accepts_nested_attributes_for :artist_memberships, :allow_destroy => :true
...
end

这是我的用户模型:

class User < ActiveRecord::Base
...
has_many :artist_memberships, foreign_key: "user_id"
...
end

这是我的ArtistMembership模型:

class ArtistMembership < ActiveRecord::Base
    belongs_to :artist, class_name: "Artist"
    belongs_to :user, class_name: "User"

  attr_accessible :artist_id, :created_at, :role, :user_id
end

如果我也有_form.hml.erb,则可以编辑开始的艺术家:

<%= form_for @artist do |artist_form| %>
  <div class="field">
    <%= artist_form.label :name %>
    <%= artist_form.text_field :name %>
  </div>
..
  <div class="actions">
    <%= artist_form.submit %>
  </div>
<% end %>

如何为上述功能创建相关的ArtistMembership表单?

2 个答案:

答案 0 :(得分:1)

也许您正在寻找这种方法。 http://api.rubyonrails.org/classes/ActionView/Helpers/FormHelper.html#method-i-fields_for

请参阅“一对多”部分。

但如果我是你,我宁愿使用“嵌套资源”技术。 http://guides.rubyonrails.org/routing.html#nested-resources

答案 1 :(得分:1)

这可能会对您有所帮助,请参阅此field_for

您可以使用accepts_nested_attributes_for(*attr_names)