这些天使用铁轨上的复选框管理多对多关系的标准方法是什么?

时间:2011-04-12 18:41:56

标签: ruby-on-rails ruby ruby-on-rails-3 many-to-many

请原谅我,如果这是一个愚蠢的问题,因为我还是相当新的铁路,

这些天使用铁轨上的复选框管理多对多关系的标准方法是什么?

我见过的任何内容都需要使用method_missing进行修补或使用after_save回调..

是否有自动方式在rails 3中执行此操作?

(使用关系模型而不是HABTM)

由于

丹尼尔

1 个答案:

答案 0 :(得分:6)

我相信a_many through就是你想要的,因为HABTM已被我所理解的弃用。

例如,我将Devise与用户一起实现到我的项目中,用户可以拥有多个角色,角色拥有许多用户。有一个名为“assignments”的表(带有user_id和role_id列),用于链接用户和角色表。

所以我的模型看起来像......

user.rb

has_many :assignments, :dependent => :destroy
has_many :roles, :through => :assignments

assignment.rb

belongs_to :user
belongs_to :role

role.rb

has_many :assignments  
has_many :users, :through => :assignments

然后在我看来_form.html.erb for Users,我有

<% for role in Role.find(:all) %>
  <%= check_box_tag "user[role_ids][]", role.id, @user.roles.include?(role), :multiple => true, :include_blank => TRUE %>
  <%= role.name %>
<% end %>

因此,当使用相应的复选框保存用户时,将处理关系。无论如何,我不记得剧集编号,但有一个Railscast,我相信我从中得到了这个。