1

我的模型中有一些代码如下所示:

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 是否都存在)。从而阻止我总是必须将结果分配回本地查询变量?

4

2 回答 2

1

为什么不使用范围

例如,您将拥有:

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)
于 2012-12-31T15:54:27.197 回答
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

注意:如果你通过范围,那么它比方法更好,所以使用范围

于 2013-01-01T12:42:43.910 回答