Ich habe drei Modelle: Benutzer, Gruppe und GruppenbenutzerWas ist die beste Vorgehensweise zum Verwalten von Datensätzen in has_many durch Zuordnung?
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`
und ich schaffen für bestimmte Gruppe mit Kontrollkästchen für alle Benutzer ein Formular, ich kann so sehen, ob jeder Benutzer in der Gruppe ist, und ich kann Überprüfen Sie, ob ein Benutzer zur Gruppe hinzugefügt werden soll, oder deaktivieren Sie, ob der Benutzer der Gruppe angehört. Dann, nachdem ich das Formular abgeschickt habe, bekomme ich ein Array von IDs der Benutzer in der Gruppe.
Meine Frage ist: Was ist der beste Weg, um solche nach dem Senden Vorgang (mehrere hinzufügen/löschen Datensätze) in den Controller oder woanders.
Für diesen Zweck habe ich zwei zusätzliche Aktionen in GroupsController erstellt: def select_users
für das Öffnen des Kontrollkästchens Formular und def add_users
für Hinzufügungen und Löschungen.
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`
Ich konnte Controller Gruppenbenutzer erstellt Tabelle verbinden und setzen die Maßnahmen, bei denen als RESTful ‚neuen‘ und ‚schaffen‘, aber ich bin nicht sicher, es ist am besten Weg zu tun.
Auch 'def select_users' ist ziemlich verwirrend. Wenn du es nennen würdest, würde ich es find_group nennen. Das heißt, es macht keinen Sinn, es zu definieren und es dann nicht in add_users zu verwenden. Wenn Sie so etwas definieren und es in einer früheren Aktion in Ihrem Controller verwenden möchten, wäre das in Ordnung, aber so wie es ist, glaube ich nicht, dass es wirklich hilft. –