Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/24.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_Params - Fatal编程技术网

Ruby on rails 尝试在Rails中的参数上执行方法

Ruby on rails 尝试在Rails中的参数上执行方法,ruby-on-rails,ruby,params,Ruby On Rails,Ruby,Params,我想写一个方法,在所有参数中循环,以确保它们不是空的 我的参数是: params[:search][:company] params[:search][:phone] params[:search][:city] params[:search][:state] params[:search][:email] 我有这个方法: def all_blank_check(params) array=[] params[:search].each do |key, value| arr

我想写一个方法,在所有参数中循环,以确保它们不是空的

我的参数是:

params[:search][:company]
params[:search][:phone]
params[:search][:city]
params[:search][:state]
params[:search][:email]
我有这个方法:

def all_blank_check(params)
  array=[]

  params[:search].each do |key, value|
    array << value unless value.blank?
  end

  if array.count < 1
      return true
  else
     return false
  end
end
我需要先将参数转换为数组吗?我不能对参数执行方法吗

编辑-完整来源: def index @customers = Customer.search_search(params) end

    def self.search_search(params)
      search_field = []
      search_values = []
      array = []
      test = ''    

      if !params[:search].nil? && all_blank_check(params[:search]


              if !params[:search].nil? && !params[:search][:company].blank?
              search_field << 'customers.company LIKE ?'
              search_values << "%#{params[:search][:company]}%"

              end

              if !params[:search].nil? && !params[:search][:city].blank?
              search_field << 'customers.city = ?'
              search_values << "#{params[:search][:city]}"
              end

              if !params[:search].nil? && !params[:search][:phone].blank?
              search_field << 'customers.phone_1 = ?'
              search_values << "%#{params[:search][:phone]}%"
              end

            conditions = [search_field.join(' AND ')] + search_values

            Customer.where(conditions).includes(:customer_contacts).limit(10)
        end
    end


    def all_blank_check(params)
        params[:search].each do |key, value|
          array << value unless value.blank?
        end

        if array.count < 1
            return false
          end
          if array.count > 1
            return true
        end
    end
def索引 @customers=Customer.search\u search(参数) 结束

def self.search\u search(参数)
搜索_字段=[]
搜索_值=[]
数组=[]
测试=“”
如果!参数[:search].nil?&&所有空白检查(参数[:搜索]
如果!params[:search].nil?&&!params[:search][:company].blank?

搜索字段问题不是
params
的类型,问题是调用它的对象上不存在方法
all\u blank\u check

您将其定义为一个实例方法,并试图从类方法
search_param
调用它,但这不起作用


如果要使
all_blank_check
成为类方法,则需要将定义更改为
def self.all_blank_check(params)
-与
搜索参数
相同

问题不在于
参数的类型
,问题在于调用它的对象上不存在方法
所有空白检查

您将其定义为一个实例方法,并试图从类方法
search_param
调用它,但这不起作用


如果要使
all\u blank\u check
成为一个类方法,则需要将定义更改为
def self.all\u blank\u check(params)
-与
search\u param

相同,您还可以使用更多类似这样的红宝石代码:

def self.all_blank?(params)
   params[:search].count{|key, value| !value.blank?} == 0
end
这将统计非空值;如果数字为0,则表示所有值均为空。
它避免了仅仅为了计数而创建一个新数组。

您还可以使用以下更具Ruby意识的代码:

def self.all_blank?(params)
   params[:search].count{|key, value| !value.blank?} == 0
end
这将统计非空值;如果数字为0,则表示所有值均为空。
它避免了仅仅为了计数而创建新数组。

太棒了!我认为类方法只用于搜索(Customer.find),我今天真的学到了一些东西,谢谢!太棒了!我认为类方法只用于搜索(Customer.find),我今天真的学到了一些东西,谢谢!甚至更好的是
params[:search].values.all?(&:blank?)
或者更好的
params[:search].values.all?(&:blank?)