gpt4 book ai didi

ruby-on-rails - 在 Rails 中抽象 ActiveRecord 模型查询的最佳实践?

转载 作者:太空宇宙 更新时间:2023-11-03 17:41:08 25 4
gpt4 key购买 nike

我想将 Controller 中的逻辑提取到某个地方,这样它就可以更干了。在 Rails 中处理类似以下内容的最佳方法是什么?

例如,与在 Controller 中进行查询相反,我可以将其放在模型中:

class SmoothieBlender < ActiveRecord::Base
belongs_to :user

def self.get_blenders_for_user(user)
self.where(["user_id = ?", user.id])
end
end

或者创建一个模块作为服务层并将其包含在使用它的每个模型中会更好吗?

module BlenderUser
def get_blenders_for_user(user)
SmoothieBlender.where(["user_id = ?", user.id])
end
end

class SmoothieBlender < ActiveRecord::Base
include BlenderUser
belongs_to :user
end

class User < ActiveRecord::Base
include BlenderUser
has_many :smoothie_blenders
end

或者只是让它成为一个可以从 User 和 Blender Controller 访问的完整服务类?你会把这个类放在哪里?

class BlenderService 
def self.get_blenders_for_user(user)
SmoothieBlender.where(["user_id = ?", user.id])
end
end

我是 Ruby 和 Rails 的新手,所以如果这是一个愚蠢的问题/语法不正确,请原谅我。提前致谢!

最佳答案

我会创建一个 named_scope(我认为它只是 Rails 3 中的 scope)

class SmoothieBlender < ActiveRecord::Base
belongs_to :user

scope :for_user, lambda { |user_id|
where("user_id = ?", user_id)
}
end

这样就可以调用

SmoothieBlender.for_user(user.id)

关于ruby-on-rails - 在 Rails 中抽象 ActiveRecord 模型查询的最佳实践?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3578478/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com