Ruby в синтаксической ошибке Rails для определения модуля - PullRequest
0 голосов
/ 23 января 2020

Это мой один из файлов схемы, созданный с помощью Ruby на Rails. Когда я пытаюсь запустить rails db:migrate приложение rails, я получаю синтаксическую ошибку, такую ​​как

SyntaxError: /home/../[file_name].rb:14: module definition in method body
      module SkipCallbacks
                          ^
bin/rails:4:in `<main>'
Tasks: TOP => db:migrate

Как мне решить эту проблему? Версия Rails: 5.2.3, ruby версия: 2.5.1

class SetInformation < ActiveRecord::Migration[5.2]

  def change
    Information.all.find_each do |info|
    place = info.places.first

      module SkipCallbacks
        def run_callbacks(kind, *args, &block)
          yield(*args) if block_given?
        end
      end

        if business.physical_address.present?
           ... ...
            dup_address.extend(SkipCallbacks)
           ... ...
        end

        ... ... ... ...
     end
  end
end

1 Ответ

0 голосов
/ 23 января 2020

В ruby обычные модули не могут быть определены внутри методов.

У вас есть два варианта:

  1. Переместить module SkipCallbacks вне метода change на уровень класса:
class BackfillSomeInfoToLocations < ActiveRecord::Migration[5.2]
  module SkipCallbacks
    ...
  end

  def change
    ...
  end
end
не перемещать, но определить его как анонимный модуль:
...
mod = Module.new do
  def run_callbacks(kind, *args, &block)
    yield(*args) if block_given?
  end
end
dup_physical_address.extend(mod)
...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...