无法替换票证,因为一个或多个新记录可能 不保存。
我的表格模型有很多票。如果票证设置了特定的标志,则不能具有表格。当我尝试通过将票证分配给现有表单来进行测试时,它崩溃,而不是注意我的验证。
自从使用RailsAdmin以来,我看到它只是在执行检查表单对象是否保存的错误处理之前调用了update_attribute(显然是保存嵌套对象)。
是否有任何已知方法可以使RailAdmin正常捕获此验证异常足够长的时间,以便对验证失败的表单本身进行正常的错误处理?这是自动物料处理编辑/新建任意对象的一部分。
我正在使用Rails 4.2.0和RailsAdmin 1.1.1
为Guilermo编辑:
我在Rails admin上有无法保存的模型,因为嵌套的对象无效。您是否在rails admin上使用嵌套表单字段?您可以在表单模型和验证中显示Rails管理员配置代码吗?我很乐意为您提供帮助。
无论是使用简单的默认值创建此代码的人,以下是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崩溃。
答案 0 :(得分:0)
通过在模型编辑表单上不显示没有该标志的票证,可以避免此问题。
您可以这样做:
edit do
field :tickets do
associated_collection_scope do
proc { |scope| scope.where(flag: false) }
end
end
end
不幸的是,这意味着您必须指定将显示哪些字段,并且将无法使用
include_all_fields
您可以使用include_fields方法获得更好的语法
include_fields [:tickets, :other_field, :etc]