我有三種模式:用戶,組和GroupUser通過關聯在has_many中管理記錄的最佳實踐是什麼?
class User < ActiveRecord::Base
has_many :group_users
has_many :groups, through: :group_users
class Group < ActiveRecord::Base
has_many :group_users
has_many :users, through: :group_users
class GroupUser < ActiveRecord::Base
belongs_to :group
belongs_to :user`
,我創建用於複選框爲所有用戶給出組的形式,這樣我就可以看到每個用戶是否是該組中,我可以檢查任何用戶添加到組或取消選中用戶是否屬於組。然後在提交表單後,我得到一組id用戶在組中。
我的問題是:什麼是代碼,之後提交操作(多添加/刪除記錄)到控制器或其他地方的最佳方式。
爲此,我在GroupsController中創建了兩個附加動作:def select_users
用於打開復選框表單和def add_users
用於添加和刪除。
def select_users
@group = Group.find(params[:id])
end
def add_users
@group = Group.find(params[:id])
# Add new users
new_users = params[:group][:user_ids]
old_users = @group.users.map {|x| x.id.to_s } + [""]
add_users = new_users.reject { |item| old_users.include?(item) }
add_users.each do |id|
@group.users << User.find(id)
end
# Delete unwanted users
delete_users = old_users.reject { |item| new_users.include?(item) }
@group.group_users.where(user_id: delete_users).destroy_all
redirect_to groups_path, notice: 'Users were added.'
end`
我已經創建了一個連接表控制器GroupUser並把那個地方作爲REST風格的「新」和「創造」,但我不知道行動是最好的辦法。
另外'def select_users'相當混亂。如果你打算命名我會稱它爲find_group。也就是說,定義它並沒有意義,那麼就不要在add_users中使用它。如果你想定義類似的東西,並在你的控制器之前的動作中使用它,那就沒問題,但因爲它,我不認爲它真的有幫助。 –