ruby-on-rails - 模块定义的 Ruby on Rails 语法错误
问题描述
这是我使用 Ruby on 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,红宝石版本: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
解决方案
在 ruby 中,常规模块不能在方法内部定义。
你有两个选择:
- 将方法
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)
...
推荐阅读
- java - 是什么导致“AutoCompleteTextViews”出现“setSpan”错误?
- sql-server - 通过实体框架运行时存储过程效率不高
- reactjs - React/JSX:简单地创建相同元素的 n 个副本?
- python - 如何在 Python 中诊断 Dash 应用程序的内存泄漏?
- python - 用包含滞后 Y 值的回归估计替换 NaN
- python - 在anaconda下的scrapy虚拟环境中pip安装chompjs显示错误
- python - SmartShooter Pro 外部 API 设置
- .net-core - Twitter ads-api 未经授权返回 401
- java - 通过单击打开另一个片段
- postgresql - Postgres 提高大更新性能?