Ruby on rails ActiveRecord中查询准备不流畅
我的模型中有一些代码如下所示:Ruby on rails ActiveRecord中查询准备不流畅,ruby-on-rails,ruby-on-rails-3,activerecord,ruby-on-rails-3.2,Ruby On Rails,Ruby On Rails 3,Activerecord,Ruby On Rails 3.2,我的模型中有一些代码如下所示: query = open if options.has_key? "user_id" query = query.where({ :user_id => user_id }) end if options.has_key? "shop_id" query = query.where({ :shop_id => shop_id }) end 出于好奇,是否有一种方法可以让我的查询对象简单地“保留”我分配给
query = open
if options.has_key? "user_id"
query = query.where({
:user_id => user_id
})
end
if options.has_key? "shop_id"
query = query.where({
:shop_id => shop_id
})
end
出于好奇,是否有一种方法可以让我的查询对象简单地“保留”我分配给它的where子句(假设:shop\u id和:user\u id都存在)。这样我就不必总是将结果赋回本地查询变量了?为什么不使用
例如,您将拥有:
scope :for_user, lambda { |user| where(user_id: user.id) }
scope :for_shop, lambda { |shop| where(shop_id: shop.id) }
然后给他们两个打电话
model.for_user(@user).for_shop(@shop)
还可以在模型中定义方法 适用于用户
def for_user(user)
where("user_id = ?", user.id)
end
和用于商店的
def for_shop(shop)
where("shop_id = ?", shop.id)
end
您还可以将这两种方法结合使用
def for_user_or_shop(user_shop)
where("#{user_shop}_id = ?", user_shop.id)
end
注意:如果你通过作用域,那么它比方法更好,所以使用作用域为什么你不使用作用域?我甚至没有想到这一点!我已经做了很多重构工作,正在阅读Rails反模式的书。这里展示了lambda示波器技术。我想我没有接通!然而,有一个问题是,它会将一些条件代码移回我的控制器中。在这种情况下发生这样的事情是正确的吗?在我知道你到底想在控制器中实现什么之前,我无法做出判断。