【发布时间】:2016-09-27 16:12:55
【问题描述】:
我有一个form,它在参数中将一个数组传递给我的控制器,它不断导致ActiveModel::ForbiddenAttributesError。我的create 函数调用另一个函数来修复这些数组参数并将这些部分组合成一个字符串,但我认为现在为时已晚。
参数
{ "remote"=>
{ "name"=>"",
"start_date"=>"9/27/2016",
"email"=>"",
"allergies"=>["Peanuts", "Soy Protein", "Dairy", ""],
}
}
控制器
def create
new_params = fix_params(params, ["allergies"])
remote_params = new_params["remote"]
@remote = Remote.new(remote_params)
respond_to do |format|
if @remote.save
format.html { redirect_to root_path, notice: 'Remote was successfully created.' }
format.json { render :show, status: :created, location: @remote }
else
format.html { render :new }
format.json { render json: @remote.errors, status: :unprocessable_entity }
end
end
end
def fix_params(params, fields)
fields.each do |field|
to_change = params[:remote][field]
new_param = to_change.join(", ").strip()
params[:remote][field] = new_param || ""
end
return params
end
也许有更好的方法来传递这些变量?
【问题讨论】:
-
ActiveModel错误表明模型中的某些东西阻止了这一点。你也可以发一下吗?另外,你为什么需要fix_params方法,你想达到什么目的?毫无疑问,还有一种更随意的方式。 -
你是对的,这是由于模型,我希望我有不同的方式来完成我在
fix_params中所做的事情。该函数基本上采用一个参数数组并将它们组合成一个字符串 -
有更好的方法来做到这一点,在你的模型中,定义一个自定义设置器 def allergies=(value) do self[:allergies] = value.is_a?(Array) ? value.join(', ').strip :值结束。模型将在您设置它的任何时候修复该值。
-
Allergies 可能是对象上的
has_many关系,或者您可以序列化该列并且您不需要将其设为字符串。 api.rubyonrails.org/classes/ActiveRecord/AttributeMethods/…
标签: ruby-on-rails forms ruby-on-rails-4