2010-08-18 42 views
2

所以我想用find_by_id_or_name得到一个对象,我觉得我看到了另外一个像这样的问题,但是很难找到任何资源来制作我自己的发现器。导轨,定制发现者

回答

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,并且只有在名称中包含其他字符时才按名称搜索。