【问题标题】:Ruby on Rails - How to delegate error messages from nested modelRuby on Rails - 如何从嵌套模型中委派错误消息
【发布时间】:2015-06-18 18:42:46
【问题描述】:
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

如果上传的图片无效,应该会报错。

【问题讨论】:

    标签: ruby-on-rails ruby ruby-on-rails-4 mongoid paperclip


    【解决方案1】:

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

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

    Rails Guides: Active Record Validations

    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? %>
      <div id="error_explanation">
        <h2><%= pluralize(@user.errors.count, "error") %> prohibited this user from being saved:</h2>
        <ul>
        <% @user.errors.full_messages.each do |msg| %>
          <li><%= msg %></li>
        <% end %>
        </ul>
        <% if @user.images.any? %>
        <ul>
          <% @user.images.each do |image| %>
            <% if image.errors.any? %>
            <li>
              <ul>
                <% image.errors.full_messages.each do |msg| %>
                <li><%= msg %></li>
                <% end %>
              </ul>
            </li>
            <% end %>
          <% end %>
        </ul>
        <% end %>
      </div>
    <% end %>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-07-15
      • 2014-04-28
      • 2011-01-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多