【问题标题】:To add find_by_ to a model for a virtual attribute将 find_by_ 添加到虚拟属性的模型中
【发布时间】:2011-06-26 19:59:25
【问题描述】:

我有用户模型,我在用户模型中有关注

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

如何将 find_by_name 函数添加到 User 模型以便我可以这样做:

User.find_by_name("Peter Smith")

【问题讨论】:

    标签: ruby-on-rails


    【解决方案1】:

    我认为您可以使用 named_scope 来做到这一点

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

    【讨论】:

      【解决方案2】:

      attr_acessible :name 使name 像一个常规的实例变量,可以简单地以nameself.name 访问。现在,我猜你可以做 User.find_by_name('somename');

      【讨论】:

        【解决方案3】:

        你可以使用它。将姓名分成两部分,first_name 和 last_name 并搜索它们

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

        【讨论】:

        • 你为什么在这里使用LIKE...你为什么不能这样使用named_scope :find_by_name, lambda {|name| {:conditions => ["first_name = ? or last_name = ?", name.split(' ').first, name.split(' ').last]}}
        • 我明白了..如果姓氏也包含中间名,如果我们直接比较我们会错过记录......
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-03-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-03-17
        • 1970-01-01
        相关资源
        最近更新 更多