Je dois modéliser l'utilisateur et GeoScene avec une relation plusieurs-à-plusieurs via has_and_belongs_to_many :users/:geo_scenes
. Dans un formulaire utilisateur, on peut assigner des droits pour accéder à geo_scenes à l'utilisateur. Tous les geo_scenes sont répertoriés avec une case à cocher - pour chaque case geo_scene un enregistrement dans la table de jointure geo_scenes_users
est créé après l'envoi du formulaire:Ajouter un attribut supplémentaire à la table de jointure plusieurs-à-plusieurs
--- First User ---
Geo Scene One [ ]
Geo Scene Two [x]
Geo Scene Three [ ]
forme actuelle:
= form_for(@user) do |form|
...
= hidden_field_tag("user[geo_scene_ids][]", nil)
- GeoScene.all.each do |s|
.checkbox
%label
= check_box_tag("user[geo_scene_ids][]", s.id, s.id.in?(@user.geo_scenes.collect(&:id)))
= s.name
Controller prend params forts:
def user_params
params.require(:user).permit(:email, :password, :password_confirmation, { geo_scene_ids:[] })
end
maintenant la question:
Comment ca n je manipule un attribut booléen supplémentaire write
dans la table de jointure. Il devrait y avoir une deuxième case à cocher à chaque GeoScene permettant la mise à jour write
. Une rangée d'échantillons de geo_scenes_users semble que les éléments suivants:
user_id | geo_scene_id | write
------------------------------
1 | 1 | true
Je suppose que je dois supprimer les raccourcis has_and_belongs_to_many
et de construire un modèle de jointure supplémentaires. Mais comment puis-je gérer les listes de cases à cocher dans le formulaire alors?
--- First User ---
Geo Scene read write
---------------------------
Geo Scene One [x] [ ]
Geo Scene Two [x] [x]
Geo Scene Three [ ] [ ]