我得到這個錯誤。當我嘗試使用範圍時,爲什麼會出現此錯誤?
未定義的方法 '最近' 爲#
我的代碼是
用戶控制器
@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,是否應該採取爭論?如果你知道什麼限制,不需要使用拉姆達
嘗試尋找本指南 13.2 http://guides.rubyonrails.org/active_record_querying.html#working-with-scopes
從寶石文檔all_following
是一個數組。這個數組甚至可能是非同類的。
recent
作用域實際上是一種可以在ActiveRecord
上調用的方法。
恐怕兩者不匹配,這就是爲什麼錯誤說你不能在一個Array
的實例調用recent
。
我希望有幫助。
感謝您的解釋! – Foo
我不認爲這是可能的使用範圍,因爲all_following方法將返回一個數組,因此它甚至不會在用戶模型中查找範圍。你不應該使用作用域的另一個原因是該作用域是用於以特定的方式從數據庫中獲取項目,而不是對其進行排序。爲了得到你想要的功能,我想一個方法添加到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作爲默認值。
請顯示定義'all_following'的代碼 –
@MichaelDurrant謝謝。其實我正在使用這個gem'acts_as_follower' https://github.com/tcocca/acts_as_follower。 – Foo
@MichaelDurrant有什麼想法? – Foo