在我的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 %>
答案 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
只是作用域的示例名称,您可以使用任意名称。