为什么当我尝试使用作用域时得到这个错误?



我得到这个错误。

未定义方法'recent' for #

我的代码是

<<p> 用户控制器/strong>
@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.2http://guides.rubyonrails.org/active_record_querying.html使用作用域有所

在gem文档中,all_following是一个数组。这个数组甚至可以是非同构的。

recent作用域实际上是一个可以在ActiveRecord上调用的方法。

我担心这两个不匹配,这就是为什么错误说你不能在Array的实例上调用recent

我不认为这是可能的使用范围,因为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),并传入您想要的限制值的任何值。如果您不使用限制值,例如@users = User.find_by_username(params[:id]).all_following.recent,那么它将使用10作为默认值。

相关内容

  • 没有找到相关文章

最新更新