gpt4 book ai didi

ruby-on-rails - 从 Engine 类访问 url_helper

转载 作者:行者123 更新时间:2023-12-04 05:43:27 25 4
gpt4 key购买 nike

我尝试从 Module 类内部访问 URL helper。这是我的代码:

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

当我运行我的服务器时,我又收到了这个错误:
undefined local variable or method `pages_url' for Station::Plugins:Class

我阅读了很多关于“如何从类中调用 url 助手”的内容,但我找到的解决方案都没有对我有用。

最佳答案

首先,您没有说明的是,您尝试访问的 url 帮助程序是来自添加引擎的父应用程序,还是来自该引擎包含的另一个引擎。

如果来自父应用程序,那么您只需要:

main_app.pages_url

因此,您需要相应地编辑代码。请注意,“main_app”部分不是父应用程序的名称,而是字面意思是“main_app”。

如果您尝试访问包含在该引擎中的引擎的 url 帮助程序,那么您需要像访问父应用程序中的任何引擎一样访问它。 IE。:

您的 gemspec 文件应包括:
s.add_dependency('my_engine', path: "~/path/to/my_engine")

route.rb 应该包括:
mount MyEngine::Engine => "/my_engine", as: "any_name_for_my_engine"

然后使用以下代码在您的代码中访问它:
any_name_for_my_engine.pages_url

希望这可以帮助。

编辑:
将引擎的 application.rb 文件更改为如下所示,以便您可以继承所有父应用程序的 ApplicationController 变量和路由:
class Station::ApplicationController < ApplicationController
end

您可能想阅读 Rails Guide on Engines有关如何使它们协同工作的更详细说明。如果您仍然遇到问题,请再次询问。

关于ruby-on-rails - 从 Engine 类访问 url_helper,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10968111/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com