我的模型中有一些代码如下:
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_id和:user_id是否存在)。从而阻止我总是必须将结果分配回本地查询变量?
答案 0 :(得分:1)
为什么不使用scopes
例如,您将拥有: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)
答案 1 :(得分:1)
您还可以在模型中定义方法
用户
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
注意:如果你通过范围,那么它比方法更好,所以使用范围