2010-08-18 26 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,並且只有在名稱中包含其他字符時才按名稱搜索。