Rails,定制查找器

时间:2010-08-18 20:12:44

标签: ruby-on-rails

所以我希望能够使用find_by_id_or_name获取一个对象,我觉得我看到了这样的另一个问题,但很难找到任何资源来制作我自己的查找器。

1 个答案:

答案 0 :(得分:5)

您可以通过向模型添加类方法来实现此目的,例如

class Model < ActiveRecord::Base
  def self.find_by_id_or_name(id_or_name)
    find :first, :conditions => ['id = ? or name = ?', id_or_name, id_or_name]
  end

  def self.find_all_by_id_or_name(id_or_name)
    find :all, :conditions => ['id = ? or name = ?', id_or_name, id_or_name]
  end
end

然后你就可以了

Model.find_by_id_or_name(id_or_name)

您可以根据需要稍微自定义方法,例如如果您想先id然后name尝试,可以先使用Model.exists?查看是否有匹配的记录,然后再执行find_by_name。您还可以查看id_or_name是否包含字符0-9,并假设它是id,并且只有按名称搜索才会包含其他字符。