2013-04-28 18 views
4

我目前使用Ruby 2.0和Rails 4 beta創建了一個非常簡單的設計。我有用戶和羣組。用戶可以是多個組的成員,並且一個組可以有多個用戶作爲成員。因此,我有一個連接模型UserGroup,它只包含user_id和group_id。具體如下:如何使用accept_nested_attributes_for在連接表中創建> 1個相關對象?

class User < ActiveRecord::Base 
    has_many :user_groups, dependent: destroy 
    has_many :groups, through: :user_groups 
    accepts_nested_attributes_for :user_groups, allow_destroy: true 
end 

class Group < ActiveRecord::Base 
    has_many :user_groups, dependent: destroy 
    has_many :users, through: :user_groups 
end 

class UserGroup < ActiveRecord::Base 
    belongs_to :user, inverse_of: :user_groups 
    belongs_to :group, inverse_of: :user_groups 

    validates :user_id, presence: true 
    validates :group_id, presence: true 
end 

我發現許多關於accepts_nested_attributes_for東西,這似乎表明在創建/更新創建一個單一的關聯對象。我想要的是一個多選項選擇框,我可以從系統中當前所有組的列表中選擇多個選項,我希望用戶成爲該組的成員,並在提交時爲我生成所有的user_group關聯。

我無法弄清楚我需要在控制器或視圖中利用這一點。我目前有:

<%= form_for(@user) do |f| %> 
    <div class="field"> 
     <%= f.label :username %><br /> 
     <%= f.text_field(:username) %> 
    </div> 

    <div class="field"> 
     <%= f.label :group_ids, 'Group memberships' %><br /> 
     <%= f.select :group_ids, @groups.collect {|g| [g.name, g.id]}, {}, multiple: true %> 
    </div> 
<% end %> 
視圖

和:

def create 
    @user = User.new(user_params) 
    @user.save 
end 

def user_params 
    params.require(:user).permit(:forename, :surname, :email, :group_ids) 
end 

在我的控制器(連同所有這些我不會測試現在當然其他操作)。

這不起作用。當我轉到具有組成員身份的現有用戶的編輯頁面時,他們在多項選擇框中正確顯示,但更改成員身份或將其設置爲新用戶不起作用。我的用戶對象保存但沒有相關的user_group對象正在創建或銷燬。任何人都可以告訴我,我在這裏做錯了什麼,我需要做些什麼才能使它工作?我花了過去的幾個小時拖網StackOverflow和谷歌,並已無處...

回答

3

原來我真正需要做的是修復我的strong_parameters散列。這導致我的params [:user] [:group_ids]被更新方法拒絕。我需要告訴strong_parameters它是一組簡單的屬性,因此:

def user_params 
    params.require(:user).permit(:forename, :surname, :email, group_ids: []) 
end 
相關問題