我希望能够通过饮料的名称或饮料成分来搜索我的饮料。
def index
@drinks2 = Drink.where(:ingredients => {:name => params[:search]}).joins(:ingredients)
@drinks = @drinks2 + Drink.where(:name => params[:search])
end
我的上述解决方案有效,但我正在寻求改进。这似乎有点像黑客。
我的问题:有没有办法将这两个查询合并为一行?这是正确的方式吗?
答案 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)