记录不会使用ROLLBACK保存,但errors对象为空

时间:2016-04-18 02:50:35

标签: ruby-on-rails

我有一个带有关联的Rails表单:

class Classification < ActiveRecord::Base
  has_many :global_filters
  accepts_nested_attributes_for :global_filters
end

以表格形式表示:

<%= form_for @classification do |f| %>
  <%= f.fields_for :global_filters, f.object.global_filters.build do |global_filters_builder| %>
    <%= global_filters_builder.text_field :name %>
    ...

我查看日志并注意到ROLLBACK。所以我在控制器中检查:

  def create
    @classification = Classification.new(classification_params)
    if @classification.save
      redirect_to @classification, notice: 'Classification was successfully created.'
    else
      msg = @classification.errors.full_messages
      render :new
    end
  end

msg是一个空数组。请注意,我使用ruby-debug获得其他帮助。我怎么能找出为什么我会得到一个ROLLBACK?

1 个答案:

答案 0 :(得分:1)

最可能的原因似乎是@classification.global_filters上的验证失败。您还可以尝试使用@classification.global_filters.map{|f| f.errors.full_messages}检查这些错误。

要处理手头的实际问题,您可以查看使用http://apidock.com/rails/ActiveRecord/Validations/ClassMethods/validates_associated或在分类模型中编写自己的自定义验证,以检查其全局过滤器中的任何错误。

帮助解决这些案例的另一个工具是https://github.com/charliesome/better_errors的宝石。如果在开发环境中添加它,则可以运行任意代码,以便在触发错误时检查代码的某些部分的对象。如果失败,您可以简单地调用@classification.save!来触发错误,然后您可以在更好的错误页面上详细检查对象。您还可以添加任意&#34;断点&#34;只是提出任何例外。