Ruby on rails 4 在select rails上按角色筛选用户

Ruby on rails 4 在select rails上按角色筛选用户,ruby-on-rails-4,Ruby On Rails 4,我有一个用户的角色:管理员,经理,出纳。用户模型与员工模型的关系 员工属于用户,并且 用户有很多员工 在new form employee中,我使用了这种方法 <%= form_for @employee, remote: true, html: {role: "form", multipart: true} do |f| %> <div class="form-group"> <%= f.label :user_id, 'User', class: "

我有一个用户的角色:管理员,经理,出纳。用户模型与员工模型的关系

员工属于用户,并且 用户有很多员工

在new form employee中,我使用了这种方法

<%= form_for @employee, remote: true, html: {role: "form", multipart: true} do |f| %>
  <div class="form-group">
    <%= f.label :user_id, 'User', class: "exampleInputEmail1" %>
    <%= f.select :user_id, options_for_select(@users.map {|u|[u.name, u.id]}, f.object.user_id), {prompt: "Select User"}, class: "form-control" %>
  </div>
编辑2

忘了加上这个。用户和角色的关系

class User < ActiveRecord::Base
  has_many :user_roles, :dependent => :destroy
  has_many :roles, :through => :user_roles
end

class Role < ActiveRecord::Base
  has_many :user_roles, :dependent => :destroy
  has_many :users, :through => :user_roles
end
编辑

您可以使用以下命令来完成admins:

@user.roles.where(name: 'Admin')

这假设您的Role类已将角色存储在名为“Name”的列中,并且指定给管理员的名称为“Admin”-如果不是,则将括号内替换为(your_Role_column:“your Admin Name”)。

更好的方法是使用作用域:

在模型中:

scope :admins, ->{ where(name: 'Admin') }
在控制器中:

User.admins

因为,如果我的理解是正确的,您总是只需要此表单中的管理员用户,我建议您在控制器中过滤,然后您使用的变量(@users.map)将只包含这些管理员用户,您可以发布您的员工控制器吗?好的。我已发布员工管理员您在哪里定义
@users
?Ups抱歉,已编辑:)我已编辑了用户和角色的代码。我尝试使用您的方法,这是一个错误:column users.role不存在我已经编辑了上面的查询-您可以尝试类似的方法。我的原始代码无法工作,因为您没有使用枚举来定义角色,而是使用联接表。您可能希望使用“我的查询”在控制器中定义@users,然后将该集合传递给options\u for\u select方法。代码本身将取决于您是否已将包含角色的列命名为“role”或其他名称。如果共享角色表的迁移,可能会有所帮助。我的角色表只有“name”属性。我在我的用户模型中使用了类似于“角色ID”的“attr\u访问器:selected\u role”作为角色的select name。然后我更新了查询。基本上,()的第一部分是你的列名:(给出你的答案,我相信它是'name:'),第二部分是你称之为admin的内容(很可能是'admin',但如果你称它为其他内容,请更改它)。
scope :admins, ->{ where(name: 'Admin') }
User.admins