Ruby on Rails – 如何从嵌套模型委派错误消息

class User include Mongoid::Document has_many :images accepts_nested_attributes_for :image end class Image include Mongoid::Document include Mongoid::Timestamps include Mongoid::Paperclip has_mongoid_attached_file :uploaded_image, :path => ":rails_root/public/uploads/:class/:id/:basename.:extension", :url => "public/uploads/" validates_attachment_content_type :uploaded_file, :content_type => "application/png", :message => "error massage" belongs_to :user delegate :url, :path, to: :uploaded_image, allow_nil: true, prefix: false end 

如果:uploaded_image无效,如何将Image中的错误委托给用户?

例如:

 user_image = user.images.build(uploaded_image: new_image.path) user_image.save 

如果uploaded_image无效,应该引发错误。

Rails有validates_associated助手(在Mongoid中也可用),它会调用valid? 在每个相关对象上。

validates_associated的默认错误消息是“无效”。 请注意,每个关联对象都将包含自己的错误集合; 错误不会冒泡到调用模型。

Rails指南:活动记录validation

 class User include Mongoid::Document has_many :images accepts_nested_attributes_for :image validates_associated :images end 

请注意 ,您不应将validates_associated :user添加到Image因为它会导致无限循环。

您可以访问嵌套图像的错误,如下所示:

 <% if @user.errors.any? %> 

<%= pluralize(@user.errors.count, "error") %> prohibited this user from being saved:

    <% @user.errors.full_messages.each do |msg| %>
  • <%= msg %>
  • <% end %>
<% if @user.images.any? %>
    <% @user.images.each do |image| %> <% if image.errors.any? %>
    • <% image.errors.full_messages.each do |msg| %>
    • <%= msg %>
    • <% end %>
  • <% end %> <% end %>
<% end %>
<% end %>