2016-11-27 54 views
0

如何查询搜索数组与where?什么是正确的方法?正确的方法来搜索一个数组而不是在哪里

û有这样的关联:

# Foo has many bars 
Foo.first.bars 

控制器:

def index 
@bars = [] 
@datas = Foo.where(email: current_user.email) 
@datas.map { |d| @bars.push(d.bar).where("name like ?", "%#{params[:email]}%") } 

    respond_to do |format| 
    format.html 
    format.json { render json: @bars } 
    end 
end 

而不是where为阵,什么是正确的查询词?

+0

你是指从Enumerable中查找?,你可以给它一个块并搜索数组中的元素。 [ref to doc](https://ruby-doc.org/core-2.3.3/Enumerable.html#method-i-find) – Axe

回答

1

您可以使用select方法在给定条件下过滤数组中的值。

[1,2,3,4,5].select { |num| num.even? } #=> [2, 4] 

或者您的具体的例子:

@bars = @datas.map { |d| d.bars }.select { |b| b.name.include? params[:email] } 

但是,因为你实际上不具备棒阵列,并需要创建它,这简直是一个不必要的步骤和更简单的解决办法是:

@datas = Foo.where(email: current_user.email) 
# @bars is an array 
@bars = @datas.map { |d| d.bars.where("name like ?", "%#{params[:email]}%") } 

# @bars is an ActiveRecord object 
@bars = Bar.where(id: @datas.pluck(:id)).where("name like ?", "%#{params[:email]}%") 
+0

最后一个例子最适合我。谢谢! – Sylar

相关问题