Techioz Blog

チェックボックスのあるテーブルで 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 ハッシュを見て、これが役立つかどうかを確認してください。