设置参数,如果为空

时间:2018-01-09 18:55:15

标签: ruby-on-rails ruby

如果未将id参数提交给表单,我需要将其设置为值。

在Rails中执行此类操作是否可以,或者这是否违反任何标准或导致可能的问题?

if params[:cart][:cart_addresses_attributes]["0"][:id].blank?
  params[:cart][:cart_addresses_attributes]["0"][:id] = 1234 #default id
end

我的实现与此逻辑一起使用,但我不确定这是否是处理该问题的正确方法。

3 个答案:

答案 0 :(得分:0)

当您尝试在[:record_type]上呼叫[:id]时,nil有机会导致未定义的方法错误。另外,我发现直接改变params有点奇怪,即使你在技术上可以这样做。我考虑使用像这样的强参数处理方法(在样本中添加了一个完整的操作,以提供更多关于如何使用它的上下文):

def create
  @record_type = RecordType.new(record_type_params)

  if record_type.save
    redirect_to @record_type
  else
    render :new
  end
end

def record_type_params
  params.require(:record_type).permit(:id).reverse_merge(id: 1234)
end

reverse_merge调用是一种将用户提供的参数合并到默认值中的方法。这样就完成了我所认为的更为传统的方式并且不会改变params

答案 1 :(得分:0)

def cart_params
  params.require(:cart).permit(:cart_addresses_attributes => [:id]).tap do |p|
    p[:cart_addresses_attributes]["0"][:id] ||= 1234
  end
end

答案 2 :(得分:-1)

if params[:record_type][:id].nil? # or replace ".nil?" with "== nil"
params[:record_type][:id] = 1234
end
个人而言,这是我喜欢的方式。有些方法比其他方式更有效,但如果这对你有用,我会随意使用它。