如何在模型中保存多对多关系

时间:2012-08-29 07:01:13

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

我的rails应用程序中有以下设置: 用户注册并从音乐风格的一组复选框中选择。

音乐风格现在只有4种,但应该是可扩展的。我希望有一个MusicStyles列表,我可以轻松扩展和更改。

我的方法是创建一个模型'MusicStyles'和一个模型'UserMusicStyles',然后使用类似于:

的has_many_through关联
class User < ActiveRecord::Base
  has_many :user_music_styles
  has_many :music_styles, :through => :user_music_styles
end

class UserMusicStyle < ActiveRecord::Base
  belongs_to :user
  belongs_to :music_style
end

class MusicStyle < ActiveRecord::Base
  has_many :music_styles
  has_many :users, :through => :user_music_styles
end

现在,在注册期间我会做类似MusicStyle.all.each do | m |的事情...显示复选框,但如何在用户控制器中正确保存到数据库?

非常感谢任何帮助!

1 个答案:

答案 0 :(得分:0)

你可以这样做:

<%= form_for @user do |f| %>
  <!-- User stuff -->
  ...
  <% MusicStyle.all.each do |m| %>
    <%= check_box_tag('user[music_style_ids][]', m.id, @user.music_styles.include?(m)) %>
  <% end %>
  <%= f.submit 'Save' %>
<% end %>