正确的搜索数组的方式而不是在哪里

时间:2016-11-27 13:03:18

标签: arrays ruby ruby-on-rails-5

如何查询使用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

对于Array而不是where,什么是正确的查询字词?

1 个答案:

答案 0 :(得分: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]}%")