Aky*_*RhO 4 ruby-on-rails class urlhelper rails-engines
我尝试从Module类中访问URL帮助程序.这是我的代码:
module Station
class Plugins
@@plugins = [] unless defined?(@@plugins) && @@plugins.class == Array
class << self
def all
return @@plugins.sort_by { |p| p[:weight] }
end
def register(plugin = {})
raise "plugin must be a Hash (ie.: `register(:foo => 'bar')`)" unless plugin.class == Hash
raise "plugin must contain :name (ie.: `register(:name => 'my_plugin')`)" unless plugin[:name].present?
plugin[:weight] = 1 unless plugin[:weight].present?
plugin[:href] = eval("#{plugin[:name].downcase.pluralize}_url") unless plugin[:href].present?
@@plugins.push(plugin) unless @@plugins.include?(plugin)
end
end
# include default plugins:
Station::Plugins.register(:name => "Pages", :weight => -1)
end
end
Run Code Online (Sandbox Code Playgroud)
当我运行我的服务器时,我收到了这个错误:
undefined local variable or method `pages_url' for Station::Plugins:Class
Run Code Online (Sandbox Code Playgroud)
我读了很多关于"如何从类中调用url helper"的内容,但我找到的解决方案都没有为我工作.
首先,您要弄清楚的是,您尝试访问的url帮助程序是否来自添加引擎的父应用程序,或者是否来自此引擎已包含的其他引擎.
如果来自父应用程序,那么您只需要:
main_app.pages_url
Run Code Online (Sandbox Code Playgroud)
因此,您需要相应地编辑代码.请注意,"main_app"部分不是父应用程序的名称,而是字面意思是"main_app".
如果您正在尝试访问此引擎中包含的引擎的url帮助程序,则需要像访问父应用程序中的任何引擎一样访问它.即:
您的gemspec文件应包括:
s.add_dependency('my_engine', path: "~/path/to/my_engine")
Run Code Online (Sandbox Code Playgroud)
routes.rb应包括:
mount MyEngine::Engine => "/my_engine", as: "any_name_for_my_engine"
Run Code Online (Sandbox Code Playgroud)
然后使用以下代码访问代码:
any_name_for_my_engine.pages_url
Run Code Online (Sandbox Code Playgroud)
希望这可以帮助.
编辑: 更改引擎的application.rb文件,如下所示,以便您可以继承所有父应用程序的ApplicationController变量和路由:
class Station::ApplicationController < ApplicationController
end
Run Code Online (Sandbox Code Playgroud)
您可能需要阅读"引擎上的Rails指南",以获取有关如何使这些工作协同工作的更详细说明.如果你还有问题,请再问一次.
归档时间: |
|
查看次数: |
2772 次 |
最近记录: |