Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/53.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ruby-on-rails-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails Rails作用域-我不希望在某些情况下添加任何作用域_Ruby On Rails_Ruby On Rails 3 - Fatal编程技术网

Ruby on rails Rails作用域-我不希望在某些情况下添加任何作用域

Ruby on rails Rails作用域-我不希望在某些情况下添加任何作用域,ruby-on-rails,ruby-on-rails-3,Ruby On Rails,Ruby On Rails 3,我对Rails有些陌生,一直在使用Rails3.2中的作用域。我喜欢作用域将代码从控制器中分离出来的方式。但是,当我使用作用域构建查询时,我不知道在某些情况下如何不添加作用域。请参见下面的示例 在我的汽车控制器课上 if !params[:make_name].blank? @cars = Car.by_make(params[:make_name]).find(:all, :group => "name") else @ca

我对Rails有些陌生,一直在使用Rails3.2中的作用域。我喜欢作用域将代码从控制器中分离出来的方式。但是,当我使用作用域构建查询时,我不知道在某些情况下如何不添加作用域。请参见下面的示例

在我的汽车控制器课上

    if !params[:make_name].blank?  
        @cars = Car.by_make(params[:make_name]).find(:all, :group => "name")
    else      
        @cars = Car.all
在我的汽车模型课上。代码试图说明如果make_name字符串为'all',则不要在其上添加任何条件,否则添加条件

def self.by_make(make_name_str)
    if make_name_str == "all"
        where("cars.id > ?", 0)
    else
        make_id = Make.where(:name => make_name_str).first.id
        where(:make_id => make_id)
    end
end
很明显,字符串都被破解了,这就是我的问题所在。如何编写它以不返回任何内容-基本上,在这种情况下不添加任何范围?

在您的车型中尝试以下操作:

注意,如果汽车模型中存在默认范围,您可能需要考虑在上面的代码中使用unSimulink,这取决于您是否希望在选择所有车辆时包含默认范围。

class Car < ActiveRecord::Base
  ...
  scope :by_make, lambda do |make|
    make == :all ? scoped : where(:make_id => Make.where(:name => make).first.id)
  end
end