次の機能スニペットを考えると、データベース クエリを減らすのに問題があります。
class User < ApplicationRecord
belongs_to :account
def self.do_something
self.find_each do |user|
puts "#{self.new.account.name}:#{user.name} did something"
end
end
end
class Account < ApplicationRecord
has_many :users
end
a = Account.first
puts 'starting'
a.users.do_something
アカウントの負荷 (0.4ms) SELECT "accounts".* FROM "accounts" WHERE "accounts"."id" = $1 LIMIT $2 [["id", 1], ["LIMIT", 1]]
起動
アカウントの負荷 (0.3ms) SELECT "accounts".* FROM "accounts" WHERE "accounts"."id" = $1 LIMIT $2 [["id", 1], ["LIMIT", 1]]
テスト:ユーザーが何かをした
アカウントの負荷 (0.3ms) SELECT "accounts".* FROM "accounts" WHERE "accounts"."id" = $1 LIMIT $2 [["id", 1], ["LIMIT", 1]]
テスト:ユーザーが何かをした
アカウントの負荷 (0.3ms) SELECT "accounts".* FROM "accounts" WHERE "accounts"."id" = $1 LIMIT $2 [["id", 1], ["LIMIT", 1]]
テスト:ユーザーが何かをした
アカウントの負荷 (0.3ms) SELECT "accounts".* FROM "accounts" WHERE "accounts"."id" = $1 LIMIT $2 [["id", 1], ["LIMIT", 1]]
テスト:ユーザーが何かをした
Account モデルがユーザーごとにデータベースから取得されていることがわかります。
元のアカウントを参照するために Singleton メソッドのようなものを使用したいと思ってself.account
いましたが、デフォルトでは明らかに関係が存在しないため、現在 を使用していself.new.account
ます。
a
内部から保存された元の Account モデルを取得できる場所は他にありself.do_something
ますか? 明らかにアカウントをパラメータに渡すことができますが、特に後で引数を追加する場合は面倒です...