Ruby on Rails - поделиться одним методом с двумя моделями - PullRequest
1 голос
/ 10 июля 2009

У меня есть следующий модуль

module SharedMethods

    # Class method
    module ClassMethods

        #
        # Remove white space from end of strings
        def remove_whitespace
            self.attributes.each do |key,value|
                if value.kind_of?(String) && !value.blank?
                    write_attribute key, value.strip
                end
            end
        end


    end

    #
    #
    def self.included(base)
        base.extend(ClassMethods)
    end

end

и я использую его в своих моделях, как

include SharedMethods
before_validation :remove_whitespace

Однако, когда я отправляю форму, я получаю сообщение "undefined method` remove_whitespace '"

Что я могу сделать, чтобы исправить эту ошибку?

1 Ответ

2 голосов
/ 10 июля 2009

Это потому, что :remove_whitespace должен быть методом экземпляра, а не методом класса.

module SharedMethods

  def self.included(base)
    base.send :include, InstanceMethods
  end

  module InstanceMethods

    # Remove white space from end of strings
    def remove_whitespace
      self.attributes.each do |key,value|
        if value.kind_of(String) && !value.blank?
          write_attribute key, value.strip
        end
      end
    end

  end

end

Если вам не нужен модуль для предоставления методов класса и экземпляра, вы также можете пропустить использование self.included и упростить свой модуль следующим образом:

module SharedMethods

  # Remove white space from end of strings
  def remove_whitespace
    self.attributes.each do |key,value|
      if value.kind_of(String) && !value.blank?
        write_attribute key, value.strip
      end
    end
  end

end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...