2016-11-27 55 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

相關問題