2012-08-29 87 views
1

我的導軌應用程序中有以下設置: 用戶註冊並從一組音樂樣式的複選框中選擇。如何在模型中保存多對多關係

音樂風格現在只有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。每個做| m | ...顯示覆選框,但是如何在用戶控制器中將其正確保存到數據庫?

任何幫助非常感謝!

回答

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 %> 
+0

會那麼Rails會自動知道該如何保存?我的問題是關於如何在控制器中處理它以正確保存它。如果這很簡單,我會繼續嘗試 - 謝謝! – tomburger

+0

你必須在'User'模型中設置'attr_accessible:music_style_ids',但是Rails應該知道如何自動保存它。 – Mischa

+0

它的工作原理 - 非常感謝! – tomburger