activerecord :: relation上的方法

时间:2016-02-04 12:40:00

标签: ruby-on-rails activerecord

所以我有一个用户模型,我需要by_posts方法。 by_post旨在对已浏览的用户执行,例如

users.where(name: "Jack")

我想这个方法为:

self.by_post(condition)
    return self if condition.blank?
    ##something
end

但是知道当我像这样返回自己时,它会返回一个类,而不是一个关系。因此,当我在对象上调用此方法时,例如:

    (byebug) users
    []
    (byebug) users.class
    ActiveRecord::Relation

我在

之后得到了什么
users.by_post(nil)

是:

(byebug) users
User(id: integer, , username: string, email: string, created_at: datetime, updated_at: datetime etc

如何让这个方法返回它开始的完全相同的对象?

2 个答案:

答案 0 :(得分:2)

  

如何让这个方法返回它开始的完全相同的对象?

by_post方法对类(User)进行操作,而不是对关系进行操作,因此您获得的实际上是它以#34开头的对象&#34 ; :)

因此,为了从by_post方法返回关系,您需要加载它:

self.by_post(condition)
    return self.all if condition.blank? # self.scoped for Rails 3
    ##something
end

答案 1 :(得分:0)

如果使用self.methodname,则会将User添加为类方法。

User.by_post("jack")

如果您想在用户实例上调用它,请跳过' self。'

喜欢这个

def by_post(condition)
    return self if condition.blank?
    ##something
end

然后你可以像这样使用它

user = User.first
user.by_post("jack")