3

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

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

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

检查现场存在如何正确?在哪里写,怎么写?

4

1 回答 1

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 参数。

于 2014-03-29T07:52:47.383 回答