我得到这个错误。
# 的未定义方法“最近”
我的代码是
用户控制器
@users = User.find_by_username(params[:id]).all_following.recent
用户模型
scope :recent, lambda { |n = 10| order("last_active_at DESC").limit(n) }
我得到这个错误。
# 的未定义方法“最近”
我的代码是
用户控制器
@users = User.find_by_username(params[:id]).all_following.recent
用户模型
scope :recent, lambda { |n = 10| order("last_active_at DESC").limit(n) }
如果使用 lambda ,是否应该争论?如果您确切知道限制是什么,则不需要使用 lambda
尝试在 13.2 http://guides.rubyonrails.org/active_record_querying.html#working-with-scopes上查看本指南
来自 gem 文档all_following
的是一个数组。该阵列甚至可能是非同质的。
recent
作用域实际上是一种可以在ActiveRecord
.
恐怕这两者不匹配,这就是为什么错误说你不能recent
调用Array
.
我希望这会有所帮助。
我认为使用范围是不可能的,因为 all_following 方法将返回一个数组,因此它甚至不会在 User 模型中查找范围。您不应该使用范围的另一个原因是范围用于以您想要重用的特定方式从数据库中获取项目,而不是对事物进行排序。为了获得您想要的功能,我将向 Array 类添加一个方法,如下所示:
class Array
def recent(limit = 10)
self.sort_by { |users| users[:last_active_at] }[0..(limit-1)]
end
end
然后你可以调用@users = User.find_by_username(params[:id]).all_following.recent(3)
你的控制器,并传入你想要的任何值作为限制值。如果您不使用限制值,例如 with @users = User.find_by_username(params[:id]).all_following.recent
,那么它将使用 10 作为默认值。