【发布时间】:2016-05-21 14:50:06
【问题描述】:
我正在使用 Rails 中的验证,例如:
validates_presence_of :some_field
我注意到,如果验证失败,所有更改都会被数据库中的现有值覆盖。这是有道理的,因为页面基本上正在重新加载(正如我从我的开发日志中收集的那样),但是这增加了用户错误/沮丧的风险,因为一个字段中的单个错误将需要倒霉的家伙重新输入他对所有领域所做的更改。
我的问题:如果验证失败,如何让 rails 重新加载刚刚提交的数据?这样,用户可以更正错误,而无需重新输入其余的修订。
感谢您的建议。
编辑: 根据要求,我的更新方法如下:
def update
@incorporation = Incorporation.find(params[:id])
@company = @incorporation.company
begin
@company.name="#{params[:company][:names_attributes].values.first["name_string"]} #{params[:company][:names_attributes].values.first["suffix"]}"
rescue NoMethodError
@company.name="Company #{@company.id} (Untitled)"
end
if @company.update(company_params)
redirect_to incorporations_index_path
else
redirect_to edit_incorporation_path(@incorporation)
end
end
关于我的控制器的完整披露:上面的update 来自我的incorporations_controller,即使我正在更新我的Company 模型。 Company has_one :incorporation。我这样做是因为,在我的应用程序的更大范围内,它使我的关联更加清晰。
【问题讨论】:
-
你能告诉我们你的代码吗def update
-
@Lymuel 感谢您的回复。我已经用我的更新方法更新了我的问题。根据您的请求,我认为验证应该在理论上在失败时加载包含提交数据的页面?
标签: ruby-on-rails validation ruby-on-rails-4 model rails-activerecord