簡體   English   中英

我不想通過 alias_method 修改的模型類的未定義方法

[英]undefined method for model class that I want no modify by alias_method

我試圖路徑 ActiveRecord 模型驗證 -

require_dependency "issue"
module IssuePath
  def self.included(base) # :nodoc:
    base.send(:include, InstanceMethods)

    base.class_eval do
      alias_method :strict_validate_issue, :validate_issue
      alias_method :validate_issue, :unstrict_validate_issue 
    end
  end

  module ClassMethods   
  end

  module InstanceMethods
    def strict_validate_issue
      if !due_date
          errors.add :due_date, :due_date_empty
      end
      unstrict_validate_issue
    end
  end
end

Issue.send :include, IssuePath

但它拋出了一個錯誤 NameError: undefined method unstrict_validate_issue' for class Issue (call 'Issue.connection' to build a connection)'。

而不是strict_validate_issue定義unstrict_validate_issue方法並在其中調用strict_validate_issue

require_dependency "issue"
module IssuePath
  def self.included(base) # :nodoc:
    base.send(:include, InstanceMethods)

    base.class_eval do
      alias_method :strict_validate_issue, :validate_issue
      alias_method :validate_issue, :unstrict_validate_issue
    end
  end

  module ClassMethods
  end

  module InstanceMethods
    def unstrict_validate_issue
      if due_date.blank?
        errors.add :due_date, :due_date_empty
      end
      strict_validate_issue
    end
  end
end

Issue.send :include, IssuePath

你甚至可以縮短它:

require_dependency "issue"
module IssuePath
  extend ActiveSupport::Concern

  included do
    alias_method :strict_validate_issue, :validate_issue
    alias_method :validate_issue, :unstrict_validate_issue
  end

  def unstrict_validate_issue
    if due_date.blank?
      errors.add :due_date, :due_date_empty
    end
    strict_validate_issue
  end
end

Issue.send :include, IssuePath

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM