我有一个带有关联的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?
答案 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;只是提出任何例外。