나는 세 가지 모델이 : 사용자, 그룹 및 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을 만들고 편안하고 '새'와 '생성', 그러나 나는 확실하지 오전 작업을 수행 할 때 할 수있는 방법이 최선의 것을 넣을 수 있었다.
또한 'def select_users'는 꽤 혼란 스럽습니다. 만약 당신이 그것을 find_group이라고 부를 것입니다. 그것은 add_users에서 사용하지 말고 그것을 정의하는 것은 의미가 없다고 말했습니다. 만약 당신이 그런 식으로 뭔가를 정의하고 컨트롤러에서 이전 작업에 괜찮을 것이라고 사용하고 싶지만 실제로는 도움이되지 않는다고 생각합니다. –