带有if条件的Rails has_scope

时间:2014-03-29 07:20:22

标签: ruby-on-rails ruby ruby-on-rails-4 has-scope

在我的表格中,我有很多字段,当我提交表单时,我的网址会看到很多空的参数,比如网址?a =& b =& c =并且我的has_scope模型认为我想要使用这个参数,但是值为null,但这是错误的。

我的模型和控制器的一部分:

class CarsController < ApplicationController
 has_scope :by_manufacturer
 has_scope :by_price, :using => [:price_from, :price_to]
end

class Car < ActiveRecord::Base
 scope :by_manufacturer, -> vehicle_manufacturer_id { where(:vehicle_manufacturer_id => vehicle_manufacturer_id) }
 scope :by_price, -> price_from, price_to { where("price >= ? AND price <= ?", price_from, price_to) }
end

我怎么能这样写:

if vehicle_manufacturer_id.present? 
 has_scope :by_manufacturer
end

如何查看现场演示?写在哪里以及怎么写?

1 个答案:

答案 0 :(得分:2)

Has_scope具有:if条件,您可以使用它来确定何时应使用范围。例如:

has_scope :by_manufacturer, if: vehicle_manufacturer_id.present?

或者向范围本身添加条件:

scope :by_manufacturer, -> vehicle_manufacturer_id { where(:vehicle_manufacturer_id => vehicle_manufacturer_id) if vehicle_manufacturer_id.present? }

我现在无法测试它,但这应该可行。但是,我不认为您的问题是否有问题。 URL参数将从视图传递到控制器。范围仅确定在给定特定条件下返回的记录,它们不会说明应显示哪些URL参数。