我目前使用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和谷歌,並已無處...