2016-11-27 5 views
0

whereで配列を検索する方法はありますか?正しい方法は何ですか?代わりに配列を検索する正しい方法

Uはこのような関連を持っている:

# 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

メソッドを使用すると、特定の条件を指定して配列内の値をフィルタ処理できます。

[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

関連する問題