导轨,定制发现者

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

您可以通过向模型添加类方法来完成此操作,例如

 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 ,如果它包含其他字符,则只按名称搜索。