将find_by_添加到虚拟属性的模型中

时间:2011-02-14 10:17:00

标签: ruby-on-rails

我有用户模型,我在用户模型中有以下内容

def name
  last_name.blank? ? first_name : "#{first_name} #{last_name}"
end

如何将find_by_name函数添加到User模型,以便我可以执行此操作:

User.find_by_name("Peter Smith")

3 个答案:

答案 0 :(得分:1)

我认为你可以使用named_scope

来做到这一点

Jim和NAD对这个类似问题的回答Rails virtual attribute search or sql combined column search可能是一个好的开始。

答案 1 :(得分:1)

你可以用它。将名称拆分为两部分,first_name和last_name并搜索它们

named_scope :find_by_name, lambda {|name|   {:conditions => ["first LIKE '%?%' or last LIKE'%?%'", name.split(' ').first, name.split(' ').last]}}

答案 2 :(得分:0)

attr_acessible :name使name像常规实例变量一样,可以nameself.name显式访问。现在,我想你可以做User.find_by_name('somename');