我想将控制器中的逻辑提取到可以更干燥的地方。在 Rails 中处理以下内容的最佳方法是什么?
例如,与在控制器中进行查询相反,我可以将其放在模型中:
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
或者只是让它成为一个完整的服务类,可以从用户和 Blender 控制器访问?你会把这门课放在哪里?
class BlenderService
def self.get_blenders_for_user(user)
SmoothieBlender.where(["user_id = ?", user.id])
end
end
我是 Ruby 和 Rails 的新手,所以如果这是一个愚蠢的问题/语法不正确,请原谅我。提前致谢!