Rails,定制查找器

JP *_*shy 2 ruby-on-rails

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

mik*_*kej 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
Run Code Online (Sandbox Code Playgroud)

然后你就可以了

Model.find_by_id_or_name(id_or_name)
Run Code Online (Sandbox Code Playgroud)

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