Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/65.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/3/reactjs/23.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 RubyonRailsActiveRecord如何使where子句始终计算为true_Ruby On Rails_Ruby_Activerecord - Fatal编程技术网

Ruby on rails RubyonRailsActiveRecord如何使where子句始终计算为true

Ruby on rails RubyonRailsActiveRecord如何使where子句始终计算为true,ruby-on-rails,ruby,activerecord,Ruby On Rails,Ruby,Activerecord,我正在制作一个简单的资源应用程序。该应用程序有三个主要类别(课程、年份、资源类型)的过滤器,可能存在,也可能不存在。这些过滤器通过URL中的参数传递。我将这些参数存储在3个数组中,称为courses、years、resource type。但是,有时数组可能为空。当我尝试使用空数组运行搜索时(例如,可能resourceType为空,因此我需要特定年份的特定资源,但它可以是任何类型),它返回一个空集。有没有办法在这个函数中使用通配符?如果没有,有人能提出一个合适的解决方案吗 下面是我正在尝试运行的

我正在制作一个简单的资源应用程序。该应用程序有三个主要类别(课程、年份、资源类型)的过滤器,可能存在,也可能不存在。这些过滤器通过URL中的参数传递。我将这些参数存储在3个数组中,称为courses、years、resource type。但是,有时数组可能为空。当我尝试使用空数组运行搜索时(例如,可能resourceType为空,因此我需要特定年份的特定资源,但它可以是任何类型),它返回一个空集。有没有办法在这个函数中使用通配符?如果没有,有人能提出一个合适的解决方案吗

下面是我正在尝试运行的函数

     @resources= Resource.where(class_name: courses, 
                          year: years, 
                          resource_type: resourceTypes)
                          .paginate(page: params[:page], per_page: 10)
                          .order(:cached_votes_total => :desc)

您可以随时执行以下操作:

@resources = Resource.all
@resources = @resources.where(class_name: courses) if courses.any? 
@resources = @resources.where(resource_type: resourceTypes) if resourceTypes.any? 
@resources = @resources.where(year: years) if years.any? 
@resources = @resources.paginate(page: params[:page], per_page: 10).order(:cached_votes_total => :desc)
尝试:


答对 了我们赢了!我不知道可以将对象传递给ActiveRecord。谢谢你,伙计!Kyle的解决方案不会运行多个查询(除非粘贴到控制台会话中-对中间关系调用inspect的irb/pry会触发db查询)
query = { }

query[:class_name] = courses if courses.present?
query[:year] = years if years.present?
query[:resource_type] = coursresourceTypeses if coursresourceTypeses.present?

@resources = Resource.where(query).paginate(page: params[:page], per_page: 10).order(cached_votes_total: :desc)