从显示动作中过滤结果

时间:2018-07-17 00:52:39

标签: ruby-on-rails ruby-on-rails-5

在我的Rails应用程序中,我有一个users_controller,它具有显示用户个人资料的操作,但是我希望仅当用户在数据库中将is_rec的特定值设置为true时,才显示用户个人资料。

以下是我的尝试,但不起作用。我使用了一个范围作为索引,并且效果很好,但是在使用show action

时却无法使范围起作用
def rec_profile
  @user = User.find(params[:id])  
  @user if @user.is_rec == 'true'
end    

我可以在视图中执行类似的操作,但是我想看看是否有一种方法可以在控制器中执行?

<% if @user.rec == 'true' %>
  <% show page here %>
<% end %>

1 个答案:

答案 0 :(得分:2)

您可以使用find_by并传递1个或多个属性在数据库中查找。因此,您可以传递id和is_rec属性并获取用户。

User.find_by(id: params[:id], is_rec: true)

或者您可以使用where来获取is_rec为true的所有用户,然后过滤其id与params [:id]相匹配的用户:

User.where(is_rec: true).find(params[:id])

最终可以将其转换为易于访问的范围:

scope :with_rec, -> { where(is_rec: true) }

然后用作:

User.with_rec.find(params[:id])

with_rec只是作用域的示例名称,您可以使用任意名称。