簡體   English   中英

Ruby:獲取當前方法中先前方法的結果

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM