我正在尝试创建一个rails插件,而我遇到的问题是该应用在迁移插件时不会包含我的模块。
这是我到目前为止所得到的:
1.文件lib/patch/settings_helper_patch.rb
,扩展名为
2.带有init.rb
的{{1}}文件
3. require_dependency 'patch/settings_helper_patch'
中的一些代码如下:
settings_helper_patch.rb
迁移插件后,我希望使用module ValidateIssuePatch
module Patch
module SettingsHelperPatch
def self.included(base)
base.send(:include, InstanceMethods)
end
module InstanceMethods
def issue_options
#some code here
end
end
end
end
end
unless SettingsHelper.included_modules.include?(ValidateIssuePatch::Patch::SettingsHelperPatch)
SettingsHelper.send(:include, ValidateIssuePatch::Patch::SettingsHelperPatch)
end
方法,但出现issue_options
错误。
如果我从控制台运行undefined local variable or method
,我会得到SettingsHelper.included_modules.include?(ValidateIssuePatch::Patch::SettingsHelperPatch)
但是,如果我从控制台调用ValidateIssuePatch,我会得到uninitialized constant Patch::SettingsHelperPatch
作为响应。
谁能告诉我,我在这里失踪的魔力是什么?
答案 0 :(得分:1)
首先,如果你的模块只有实例方法,我建议使用以下易于理解的语法:
module ValidateIssuePatch
module Patch
module SettingsHelperPatch
def issue_options
# code
end
end
end
end
SettingsHelper.include(ValidateIssuePatch::Patch::SettingsHelperPatch)
其次,可能定义ValidateIssuePatch
的原因是某些其他文件具有正确需要的文件。此文件不以任何方式执行。我会在某个地方引发一个错误,当它被引发时,将验证代码是否正在被执行。如下所示:
module ValidateIssuePatch
module Patch
module SettingsHelperPatch
raise "All good" # remove this afterwards
def issue_options
# code
end
end
end
end
SettingsHelper.include(ValidateIssuePatch::Patch::SettingsHelperPatch)
有可能无法提出错误,并且确认您的文件不是必需的 - 要么根本不是,要么不是正确的顺序。
要进一步验证这一点,只需打开控制台并使用现有代码执行以下操作:
ValidateIssuePatch::Patch::SettingsHelperPatch #=> error
require path_of_file
ValidateIssuePatch::Patch::SettingsHelperPatch #=> no more error
最后,为什么要检查SettingsHelper
中已包含的模块? (指unless
条件)你的代码应该只包含一次模块,而不是#34;也许只有一次"。