[英]Ruby: Get result of previous method in current method
以下說明了我的問題:
User.all.testing
def self.testing
v = self
v.group_by { |user| user.username = 'username' }
end
導致:
類:0x8ca0558的未定義方法`group_by'
然而:
User.all.group_by { |user| user.username = 'username' }
作品。
如評論中所述,我無法解釋此接受參數的group_by
方法的來源,但為了使您的testing
方法與User.all.group_by(username: 'username')
相同,
def self.testing
all.group_by(username: 'username')
end
all
使用將為您創建一個ActiveRecord關系。 請注意,即使它說“ all”,但如果您還有其他作用域,這些作用域都將保留 。 例如,對於User.where(some: value).testing
,它將正常運行。 如果您在沒有建立任何其他范圍(即User.testing
情況下直接調用testing
則將使用默認范圍。
self
是一種ActiveRecord::Base
對象,因此沒有group_by
方法。 group_by
是一個Enumerable方法。 也許您是說group
,這是在ActiveRecord::QueryMethods
?
self.testing
表示這是一個類方法,可以像User.testing
一樣使用, User.testing
不是User.all.testing
因為User.all
返回活動記錄關系。
解決方案:在模型中創建范圍
class User < ApplicationRecord
scope :testing, -> (username) { group_by(username: username) }
end
現在您可以使用User.all.testing
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.