【发布时间】:2019-07-12 15:28:15
【问题描述】:
更换工单失败,因为一条或多条新记录可能 不会被保存。
我的表单模型有_many 个票。如果票证设置了特定标志,则票证不能有表格。当我通过尝试将票分配给现有表单来进行测试时,它崩溃,而不是注意我的验证。
自从它的 RailsAdmin 以来,我看到它只是在执行检查 Form 对象是否保存的错误处理之前调用 update_attribute(显然保存了嵌套对象)。
是否有任何已知的方法可以让 RailAdmin 优雅地捕获此验证异常足够长的时间,以便对表单本身失败的验证进行正常的错误处理?这都是自动处理任意对象的编辑/新建的一部分。
我正在使用 Rails 4.2.0 和 RailsAdmin 1.1.1
为 Guilermo 编辑:
我在 rails admin 上有模型无法保存,因为嵌套对象无效。您是否在 rails admin 上使用嵌套表单字段?你能在表单模型和验证上显示 rails admin 配置代码吗?我很乐意为此提供帮助。
创建此代码的人使用了简单的默认内容,以下是 RailsAdmin 配置初始化程序中的相关行。
edit do
include_all_fields
end
观察到的行为是标准 RailsAdmin 字段,您可以在其中搜索对象,或从下拉列表中选择,然后选择其中一个或多个附加到当前对象。
嵌套对象无效(因此父对象也是如此)。问题在于,系统没有将父对象返回为无效,而是因为嵌套对象无效而崩溃。
RailsAdmin 代码似乎调用了 update_attribute(这会引发未捕获的错误),然后实际执行保存! (连同崩溃检查)。我基于以下代码:
https://github.com/sferik/rails_admin/blob/master/lib/rails_admin/config/actions/edit.rb
具体来说:
@object.set_attributes(params[@abstract_model.param_key])
@authorization_adapter && @authorization_adapter.attributes_for(:update, @abstract_model).each do |name, value|
@object.send("#{name}=", value)
end
changes = @object.changes
if @object.save
@auditing_adapter && @auditing_adapter.update_object(@object, @abstract_model, _current_user, changes)
respond_to do |format|
format.html { redirect_to_on_success }
format.js { render json: {id: @object.id.to_s, label: @model_config.with(object: @object).object_label} }
end
else
handle_save_error :edit
end
它在@object.set_attributes 处崩溃。
【问题讨论】:
-
我在 rails admin 上有模型无法保存,因为嵌套对象无效。您是否在 rails admin 上使用嵌套表单字段?你能在表单模型和验证上显示 rails admin 配置代码吗?我很乐意为此提供帮助。
-
嵌套表单域?显然不是,在我之前的人只是使用了默认的东西:我将编辑我的问题以澄清。
标签: ruby-on-rails validation rails-admin