ユーザとGeoSceneを多対多の関係でモデル化する必要があります。has_and_belongs_to_many :users/:geo_scenes
です。ユーザーフォームでは、geo_scenesにアクセスするための権限をユーザーに割り当てることができます。多対多結合テーブルに余分な属性を追加
--- First User ---
Geo Scene One [ ]
Geo Scene Two [x]
Geo Scene Three [ ]
現在の形式::
= 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
コントローラが強いのparamsを取ります
各テーブルgeo_scenes_users
がフォームを送信した後に作成された結合にgeo_scene記録を確認するために - すべてのgeo_scenesは、チェックボックスでリストされています
def user_params
params.require(:user).permit(:email, :password, :password_confirmation, { geo_scene_ids:[] })
end
今の質問:
方法CA n結合テーブル内の余分なブール値属性write
を操作します。各GeoSceneに2番目のチェックボックスがあり、アップデートが可能です。write
geo_scenes_usersのサンプル行は、次のようになります。
user_id | geo_scene_id | write
------------------------------
1 | 1 | true
私はhas_and_belongs_to_many
ショートカットを削除し、余分な参加モデルを構築する必要があると思います。しかし、どのようにしてフォームのチェックボックスリストを管理するのですか?
--- First User ---
Geo Scene read write
---------------------------
Geo Scene One [x] [ ]
Geo Scene Two [x] [x]
Geo Scene Three [ ] [ ]