优雅的红宝石功能,需要帮助清除它,使其看起来像红宝石

问题描述

|| 我要输入参数:姓名和年龄
def self.search(name,age)

end
如果名称不为空/无,则将其添加到搜索表达式中。 如果age不为空/零,则将其添加到搜索表达式中。 如果两者均为零,则全部返回。 到目前为止,我有:
def self.search(name,age)

   if name.nil? && age.nil?
      return User.all
   end



end
很难以优雅的方式编写此代码。     

解决方法

def self.search(name,age)
  conditions = {}
  conditions[:name] = name if name
  conditions[:age] = age if age
  User.find(:all,:conditions => conditions)
end
    ,我不确定您要进行哪种搜索,但是我更喜欢在范围内处理这些事情。
class User < ActiveRecord::Base
  scope :by_name,lamba{|name| name.nil?? scoped : where(:name=>name) }
  scope :by_age,lamba{|age| age.nil?? scoped : where(:age=>age) }

  def self.search(name,age)
    User.by_name(name).by_age(age)
  end
end
我想它总体上要多一点代码,但是它更可重用,并且一切都在它的位置。     ,在Rails 3中,您可以这样做:
def self.search(name,age)
  scope = User
  scope.where(:name => name) if name.present?
  scope.where(:age => age) if age.present?
  scope
end
注意使用礼物吗?而不是零?跳过空字符串以及nil。 在另一条评论中,您提到要对这些条件进行“或”运算。 ActiveRecord没有为此提供便利的设施;默认情况下,所有条件均为AND。您将需要构建自己的条件,如下所示:
def self.search(name,age)
  scope = User
  if name.present? && age.present?
    scope.where(\'name = ? OR age = ?\',name,age)
  else
    scope.where(:name => name) if name.present?
    scope.where(:age => age) if age.present?
  end
  scope
end
    

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...