チェックボックスのあるテーブルで 2 つの ID を渡します
概要
私はアプリケーションでロールを作成するのに苦労していました。Gem Rolify をインストールしたところ、次のコードのモデルロールが作成されました。
class Role < ActiveRecord::Base
has_and_belongs_to_many :users, :join_table => :users_roles
has_many :abilities
end
また、データベースに存在するユーザーの ID とロールの ID を保存する結合テーブル users_roles も自動的に作成されました。管理者、患者、医師の 3 つの役割を作成しました。私の質問は、登録にチェックボックスを備えたこの:users_rolesテーブルに値を渡すにはどうすればよいかということです %% 登録内のコードを変更するにはどうすればよいですか
<div class="form-group">
<%= f.label :roles %>
<% Role.all.each do |role| %>
<%= check_box_tag "user[role_ids][]", role.id, @user.role_ids.include(role.id)%>
<%= role.name %><br />
<% end %>
</div>
たとえば、患者をチェックするたびに、users_roles テーブルで私の user_id とそのテーブル内の role_id との接続が作成されるようにします。
まず第一に、ロールコントローラーがありません。次に、ユーザーコントローラーにこれが私のコードです
class UsersController < ApplicationController
before_filter :authenticate_user!
load_and_authorize_resource
def index
@users = User.all
end
def show
@user = User.find(params[:id])
end
def update
@user = User.find(params[:id])
current_user.update(user_params)
end
def user_params
params[:user].permit(
{:role_ids => []}
)
end
end
チェックボックスから HTML で生成されたコードは次のとおりです。
<div class="form-group">
<label for="user_roles">Roles</label>
<input id="user_role_ids_" name="user[role_ids][]" type="checkbox" value="1" />
admin<br />
<input id="user_role_ids_" name="user[role_ids][]" type="checkbox" value="2" />
patient<br />
<input id="user_role_ids_" name="user[role_ids][]" type="checkbox" value="3" />
doctor<br />
</div>
前もって感謝します!
解決策
今日は HTML を見ただけですが、これはブラウザを混乱させるでしょう。これを見て、name パラメータにロールの ID を含めるように View コードを変更する必要があります。
<%= check_box_tag "user[role_ids][#{role.id}]", role.id, @user.role_ids.include(role.id)%>
それはうまくいくかもしれません。結果として得られる params ハッシュを見て、これが役立つかどうかを確認してください。