链接多个查询以生成实例变量

时间:2013-02-19 21:03:17

标签: ruby-on-rails ruby-on-rails-3 ruby-on-rails-3.2

我希望能够通过饮料的名称或饮料成分来搜索我的饮料。

def index
  @drinks2 = Drink.where(:ingredients => {:name => params[:search]}).joins(:ingredients)
  @drinks = @drinks2 + Drink.where(:name => params[:search])
end

我的上述解决方案有效,但我正在寻求改进。这似乎有点像黑客。

我的问题:有没有办法将这两个查询合并为一行?这是正确的方式吗?

2 个答案:

答案 0 :(得分:3)

你想要的是既可能又相当简单,但它需要编写一些实际的SQL - 你不能依赖基于哈希的条件。假设您有一个ingredients表,其中包含name列:

@drinks = Drink.joins(:ingredients).where('drinks.name = :search OR ingredients.name = :search', :search => params[:search])

答案 1 :(得分:0)

这不起作用吗?

Drink.where(:ingredients => {:name => params[:search]}, :name => params[:search] ).joins(:ingredients)