2014-03-27 51 views
0

我一直在努力與創建我的應用程序的角色的表證兩個ID,我已經安裝了寶石Rolify,它創造了一個示範作用,其中這是代碼:與複選框

class Role < ActiveRecord::Base 
has_and_belongs_to_many :users, :join_table => :users_roles 
has_many :abilities 
end 

它還自動創建了連接表users_roles,它存儲了用戶的ID和我的數據庫中存在的角色的ID。我創建了3個角色Admin - Patient - Doctor。我的問題是我怎麼能值傳遞給此: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> 

在此先感謝!

+0

你的代碼看起來很好..你在控制器中添加了強大的參數:roles_ids => [] ..?或者是否有任何錯誤? –

+0

你爲什麼要更新current_user而不是@user? –

+0

您的使用'check_box_tag'的方法與[Rails文檔](http://api.rubyonrails.org/classes/ActionView/Helpers/FormTagHelper.html#method-i-check_box_tag)相當。你可以發佈你的視圖代碼產生的HTML源代碼嗎?這會讓你更容易猜到你應該從你的'POST'中期待什麼樣的'params'。 – Patru

回答

0

今天才看到您的HTML,但這肯定會讓瀏覽器感到困惑。看到這種情況,你應該改變你View代碼,包括您在name參數作用id,即

<%= check_box_tag "user[role_ids][#{role.id}]", role.id, @user.role_ids.include(role.id)%> 

這可能做的伎倆。查看產生的params哈希以查看是否有幫助。