ruby-on-rails - 过滤一个有很多参数的数组 "like an SQL query"

标签 ruby-on-rails ruby ruby-on-rails-3 activerecord

我需要过滤数组中的对象。

它使用一个参数

@usersc = @usersb.select { |user| user.need_appartment?  } 

但我想使用比 SQL/ActiveRecord 中更多的参数:

(need_bedrooms_min >= :nb_bedrooms_min) AND (budget_amount BETWEEN :budget_min AND :budget_max) AND ((need_surface_min BETWEEN :surface_min AND :surface_max)  OR (need_surface_max BETWEEN :surface_min AND :surface_max))"+req,{nb_bedrooms_min: params[:nb_bedrooms_min], budget_min: params[:budget_min], budget_max: params[:budget_max],surface_min: params[:surface_min], surface_max: params[:surface_max]}).paginate(:page => params[:page])

我找不到解决方案...任何人都可以帮助我吗?

F.

最佳答案

select 完全按照您的需要使用尽可能多的参数:

@usersb.select do |user|
  user.need_bedrooms_min >= params[:nb_bedrooms_min].to_i &&
  (params[:budget_min].to_i..params[:budget_max].to_i).include? user.budget_amount &&
  ((params[:surface_min].to_i..params[:surface_max].to_i).include? user.need_surface_min ||
   (params[:surface_min].to_i..params[:surface_max].to_i).include? user.need_surface_max)
end

或者,更简洁:

class User
  def needs_apartment?(params)
    budget_min, budget_max, surface_min, surface_max, nb_bedrooms_min = 
        %w{budget_min budget_max surface_min surface_max nb_bedrooms_min}.map{|k| params[k.to_sym].to_i}
    budget_range = budget_min..budget_max
    surface_range = surface_min..surface_max

    need_bedrooms_min >= nb_bedrooms_min &&
      budget_range.include? budget_amount &&
      (surface_range.include?(need_surface_min) || surface_range.include?(need_surface_max))
  end
end

@usersb.select{|user| user.needs_apartment?(params)}

关于ruby-on-rails - 过滤一个有很多参数的数组 "like an SQL query",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21122215/

相关文章:

ruby-on-rails - 载波;多个上传者还是只有一个?

ruby-on-rails - Sidekiq 邮件程序找不到表格

ruby - 如何在红帽上安装 Ruby

ruby-on-rails - CSS 文件的 Rails I18n

python - 如何将 ruby​​ 解释器与我的应用程序一起分发

Ruby - 如何从两个范围中选择一个随机字符

ruby-on-rails-3 - 如何使用 ActiveSupport 中的 Pending 模块

ruby-on-rails - “sarlLegalStatuses”不是受支持的 Controller 名称

ruby-on-rails - Rails 属于_to has_one。需要一些解释

ruby-on-rails - ActiveRecord 联接获取子对象而不是父对象