ruby-on-rails – 如何链接rails 3活动记录中的查询

我需要根据params数据添加条件.
@users = User.where('id',params[:id]) unless params[:id].nil?
@users = User.where('email',params[:email]) unless params[:email].nil?
@users = User.limit(10)

但由于某种原因它不起作用.
谢谢

解决方法

你的每个语句都替换了@users变量,并且当ActiveRecord懒惰地评估每个语句时,前两个语句永远不会被调用.

如果您想维护三个单独的查询并以这种方式构建,您可以执行以下操作:

@users = User.limit(10)
@users = @users.where('id',params[:id]) if params[:id]
@users = @users.where('email',params[:email]) if params[:email]

它不是最漂亮的,但它会起作用.但是,我建议将其保留为单个方法调用并在模型中定义它.

# In the model

def self.by_id_and_email(id,email)
  users = limit(10)
  users = users.where('id',id)       if id.present?
  users = users.where('email',email) if email.present?

  users
end

# In the controller / out of the model

User.by_id_and_email(params[:id],params[:email])

这样,您可以再次使用该方法,对其进行优化,并针对它编写速度(ier)测试.

相关文章

validates:conclusion,:presence=>true,:inclusion=>{...
一、redis集群搭建redis3.0以前,提供了Sentinel工具来监控各...
分享一下我老师大神的人工智能教程。零基础!通俗易懂!风趣...
上一篇博文 ruby传参之引用类型 里边定义了一个方法名 mo...
一编程与编程语言 什么是编程语言? 能够被计算机所识别的表...
Ruby类和对象Ruby是一种完美的面向对象编程语言。面向对象编...