0

我有两个模型用户和角色,它们有第三个模型 user_role。我想在创建时为用户分配一些角色。一个用户可以有多个角色,一个角色可以分配给多个用户。我在角色表中创建了经理和管理员等角色。现在我需要在创建用户时在用户页面的下拉列表中显示这些保存的记录。用户和角色模型之间存在多对多的关联。

我所做的:我已在 Roles 表中将数据保存为角色名称,如 manager、hr 或 amdin。

Doubuts:现在我想在创建用户时在用户页面的下拉列表中显示这些保存的记录,并希望与用户记录一起保存。我不知道如何在下拉列表中的用户页面上获取角色表数据,然后将其保存到角色表中。

用户.rb

class User < ActiveRecord::Base
 has_many :roles,  :through => :role_users
 has_many :roles_users
  # Include default devise modules. Others available are:
  # :token_authenticatable, :confirmable,
  # :lockable, :timeoutable and :omniauthable
  devise :database_authenticatable, :registerable,
         :recoverable, :rememberable, :trackable, :validatable

  # Setup accessible (or protected) attributes for your model
  attr_accessible :username, :email, :password, :password_confirmation, 
  :remember_me, :first_name, :last_name, :is_admin, :contact_no, :birth_date,
   :joining_date, :is_active, :is_hr, :is_manager, :user_code, :designation
  # attr_accessible :title, :body
end

角色.rb

  class Role < ActiveRecord::Base
      attr_accessible :name
      has_many :users,  :through => :role_users
      has_many :role_users
    end

role_user.rb



 class RolesUser < ActiveRecord::Base
      attr_accessible :role_id, :user_id
      belongs_to :user 
      belongs_to :role
    end

角色控制器.rb

class RolesController < ApplicationController
  before_filter :authorize_admin!

    def index
        @roles = Role.all
    end

    def new
     @role = Role.new 
    end

    def create
      @role  = Role.new(params[:role])
         if @role.save
           flash[:success] = "role created!"
           redirect_to role_path(@role)
       else
            render 'new' 
        end 
    end

    def show
      @role = Role.find(params[:id])
    end

    def edit
      @role = Role.find(params[:id])
    end

    def update
      @role = Role.find(params[:id])
    if @role.update_attributes(params[:role])
        flash.notice = "Role #{@role.name} has been updated"
        redirect_to role_path(@role)
    else 
       render 'edit'
    end
   end 

    def destroy
      @role = Role.find(params[:id])
      @role.destroy
     redirect_to action:  'index' 
    end
end 

基本上我想从角色表中获取数据到用户表的下拉列表中,并希望在创建用户时保存。谁能帮我。如果您需要粘贴更多代码,请告诉我。

4

2 回答 2

0

我通过使用 <%= select_tag "role_id", options_from_collection_for_select( Role.all, "id", "name") %> 得到了解决方案。

于 2013-05-29T06:42:38.537 回答
0

您的用户对象上有一个名为“role_ids=”的方法,可让您为其分配一个数组。如果下拉列表是一个多选项,它将在您的 params 对象中为用户提交一个看起来像这样的参数:

params => { :user => { :role_ids => [1,2,3] } }

在您的表单中,您将像这样创建下拉列表

<%= f.select 'role_ids[]', @roles.map{|r| [r.name, r.id]}, {}, :multiple => true %>

试试这个,看看它是否适合你......

编辑

这里不需要牙套...

<%= f.select :role_ids, @roles.map{|r| [r.name, r.id]}, {}, :multiple => true %>
于 2013-05-28T21:20:57.593 回答