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?)