Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby-on-rails-4/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 4 Rolify中的作用域用于筛选具有特定角色的用户(Rails 4)_Ruby On Rails 4_Scope_Rolify - Fatal编程技术网

Ruby on rails 4 Rolify中的作用域用于筛选具有特定角色的用户(Rails 4)

Ruby on rails 4 Rolify中的作用域用于筛选具有特定角色的用户(Rails 4),ruby-on-rails-4,scope,rolify,Ruby On Rails 4,Scope,Rolify,我对scopes来说太陌生了,无法理解这一点。 我有一个页面上所有用户的列表,我希望能够根据角色筛选出该列表(使用顶部的复选框或链接)。 我可以让它与表中的另一列(例如location)一起工作,但我不知道如何与角色一起工作 在我的模型中,我有这样一个功能,使其适用于位置: scope :location, -> (location) { where("location LIKE ?", "#{location}%") } 然后在我的控制器里 @users = User.location

我对scopes来说太陌生了,无法理解这一点。 我有一个页面上所有用户的列表,我希望能够根据角色筛选出该列表(使用顶部的复选框或链接)。 我可以让它与表中的另一列(例如location)一起工作,但我不知道如何与角色一起工作

在我的模型中,我有这样一个功能,使其适用于位置:

scope :location, -> (location) { where("location LIKE ?", "#{location}%") }
然后在我的控制器里

@users = User.location(params[:location]) if params[:location].present?
然后在我的索引中找到这个

<% @users.each do |user| %>
   <%= link_to "filter by #{user.location}", "https://example.com/users?location=" + user.location %>
<% end %>
但是,我不知道如何使它在我的控制器和索引页面中工作。
任何帮助都将不胜感激

Rolify有一个助手方法用于查找具有角色的用户:

User.with_any_role('your_role_here')


上面将返回一个包含所有具有指定角色的用户的数组

Rolify有一个查找具有角色的用户的帮助器方法:

User.with_any_role('your_role_here')


上面将返回一个数组,其中包含具有指定角色的所有用户

I'v使其正常工作,但添加了一个范围
scope:has|u role,lambda{124; role | includes(:roles)。其中(:roles=>{:name=>role})
,然后添加到我的控制器
@users=User。如果参数为[:admin],则has|role('admin')
但问题是我需要将所有角色单独添加到控制器中,管理员可以编辑该列表。那么,我如何告诉控制器查找所有角色呢?我尝试了
@users=User.has|role(role.name)if-params[:roles]
和它的一些变体,但它没有起作用。我做了一些工作,但添加了一个
范围的范围:has|role,lambda{role | includes(:roles)。其中(:roles=>{name=>role}
,然后添加到我的控制器
@users=User.has|role(:admin')if-params[:admin]
但问题是我需要将所有角色单独添加到控制器中,并且管理员可以编辑该列表。那么我如何告诉控制器查找所有角色呢?我尝试了
@users=User.has_role(role.name)if参数[:roles]
和其他一些变体,但都不起作用。问题是管理员可以创建角色,所以我没有一个角色名称的硬列表。你可以将管理员创建的角色符号存储在你的角色模型中的数据库中,并使用它们在你的应用程序中的任何位置授予角色,然后在需要时使用我提供给你的方法确定作用域问题是管理员可以创建角色,所以我没有角色名称的硬列表。您可以将管理员创建的角色符号存储在数据库中的角色模型中,并使用它们在应用程序中的任何位置授予角色,然后在需要时使用我提供的方法确定范围。
scope :role, ->(role) { Role.find_by(name: role.to_s).users }