如果未将id
参数提交给表单,我需要将其设置为值。
在Rails中执行此类操作是否可以,或者这是否违反任何标准或导致可能的问题?
if params[:cart][:cart_addresses_attributes]["0"][:id].blank?
params[:cart][:cart_addresses_attributes]["0"][:id] = 1234 #default id
end
我的实现与此逻辑一起使用,但我不确定这是否是处理该问题的正确方法。
答案 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
个人而言,这是我喜欢的方式。有些方法比其他方式更有效,但如果这对你有用,我会随意使用它。