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

Ruby on rails 在Rails中抽象ActiveRecord模型查询的最佳实践?,ruby-on-rails,ruby,activerecord,abstraction,controllers,Ruby On Rails,Ruby,Activerecord,Abstraction,Controllers,我想把控制器的逻辑提取出来,放到更干燥的地方。在Rails中处理以下内容的最佳方法是什么 例如,与将查询放在控制器中不同,我可以将其放在模型中: class SmoothieBlender < ActiveRecord::Base belongs_to :user def self.get_blenders_for_user(user) self.where(["user_id = ?", user.id]) end end 我是Ruby和Rails新手,

我想把控制器的逻辑提取出来,放到更干燥的地方。在Rails中处理以下内容的最佳方法是什么

例如,与将查询放在控制器中不同,我可以将其放在模型中:

class SmoothieBlender < ActiveRecord::Base
   belongs_to :user

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

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

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


我将创建一个名为_scope的
(我认为它只是Rails 3中的
scope


啊,有道理!有点像.Net中的扩展。谢谢如果参数来自params中的表单,请记住使用.to_i。例如,where(“user\u id=?”,user\u id.to\u i)to\u我将尝试解析它,如果它没有经过消毒,我想会失败?啊,这是有道理的!有点像.Net中的扩展。谢谢如果参数来自params中的表单,请记住使用.to_i。例如,“user_id=?”,user_id.to_i)to_i将尝试解析它,如果它没有被消毒,我想会失败吗?
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
class BlenderService 
    def self.get_blenders_for_user(user)
       SmoothieBlender.where(["user_id = ?", user.id])
    end
end
class SmoothieBlender < ActiveRecord::Base
   belongs_to :user

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