所以我有一个用户模型,我需要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
如何让这个方法返回它开始的完全相同的对象?
答案 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")