【问题标题】:Rails 6 polymorphic model giving validation errorsRails 6多态模型给出验证错误
【发布时间】:2020-11-27 20:39:21
【问题描述】:

我正在将 Rail 5.2 应用程序升级到 Rails 6,但我的一个多态模型遇到了错误。它可以属于_其他几个模型,但它本身只需要一个主体。

class Note < ApplicationRecord
  belongs_to :notable, polymorphic: true
  belongs_to :user

  belongs_to :profession
  belongs_to :topic

  has_many :notes, as: :notable, :dependent => :destroy
  validates :body, presence: true, allow_blank: false
end

当我创建或编辑笔记时,即使它的正文、用户和显着设置正确,验证也会失败,因为它说职业和主题不能为空。

=> #<:errors:0x00005622cd43ed10 id: notable_type: notable_id: user_id: body: created_at:>,@messages={:topic=>["必须存在"], :profession=>["必须存在"]}, @details={:topic=>[{:error=>:blank}], :profession=>[{:error=>:blank}]}>

如果我在上面的模型中注释掉belongs_to,它验证正常。

我搜索了文档以查看是否可以在任何地方解释该行为,但验证或升级指南中似乎没有任何内容涉及多态关联的问题。

【问题讨论】:

    标签: ruby-on-rails ruby-on-rails-6


    【解决方案1】:

    您现在需要将 optional: true 添加到 belongs_to 或 rails 默认添加验证。见下文:

    class Note < ApplicationRecord
      belongs_to :notable, polymorphic: true
      belongs_to :user
    
      belongs_to :profession, optional: true
      belongs_to :topic, optional: true
    
      has_many :notes, as: :notable, :dependent => :destroy
      validates :body, presence: true, allow_blank: false
    end
    

    文档在这里:https://edgeguides.rubyonrails.org/upgrading_ruby_on_rails.html#new-framework-defaults

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-10-23
      • 1970-01-01
      • 1970-01-01
      • 2020-07-25
      • 1970-01-01
      • 1970-01-01
      • 2020-02-26
      • 1970-01-01
      相关资源
      最近更新 更多