问题标签 [rails-engines]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
2880 浏览

ruby-on-rails - 要求Haml on Rails3引擎的最佳方法

我正在开发一个 Rails3 引擎应用程序,我想使用 Haml 作为视图。

首先,我所做的是将其添加到引擎 Gemfile 中:

当我测试我的引擎时,它工作正常(我使用https://github.com/josevalim/enginex生成 gem 并使用虚拟应用程序对其进行测试)。

当我尝试在真正的 Rails 应用程序上使用引擎时,我的问题就开始了。该应用程序在它自己的 Gemfile 上没有 gem“haml”,因此它没有初始化 Haml,所以我收到模板未找到错误,因为它不是在寻找 .haml 视图。我在想,通过在引擎上需要 Haml,Rails 应用程序也需要它就足够了。

我现在所做的是使用以下代码在引擎上添加 config/initializers/haml.rb:

它现在正在工作,但我想知道这是否真的是一个好方法。为什么 Rails 没有调用 Haml “init.rb” 文件,而是通过将 gem “haml” 添加到引擎 Gemfile 来正确初始化 Haml?

0 投票
7 回答
9984 浏览

ruby-on-rails - 在主应用程序中扩展 Rails 3 引擎的控制器

我在我的应用程序中使用 Rails 引擎作为 gem。该引擎有PostsController许多方法,我想在我的主应用程序中扩展控制器逻辑,例如添加一些方法。如果我只是PostsController在主应用程序中创建,则不会加载引擎的控制器。

有问题提出了一个解决方案Rails 引擎基于更改扩展功能ActiveSupport::Dependencies#require_or_load

这是唯一/正确的方法吗?如果是,我应该把那段代码放在哪里?

编辑1:

这是Andrius为 Rails 2.x建议的代码

0 投票
3 回答
3137 浏览

ruby-on-rails - 如何获取 Rails 3 应用程序中所有引擎的列表

根据Rails 引擎扩展Rails 2.x 中的功能,可以做

此代码在 Rails 3 中不起作用

我需要在 Rails 3 中做什么才能获得这样的引擎列表?

这是在主应用程序中扩展 Rails 3 引擎的控制器所必需的

0 投票
2 回答
527 浏览

ruby-on-rails - Rails 引擎中的 Haml

我正在开发使用 HAML 作为视图模板的 Rails 引擎。所以我的 gemspec 有以下几点: 行

但是当我在一个不使用 HAMl 本身的应用程序中使用这个 gem 时,HAML 似乎没有被初始化(尽管 Gemfile.lock 明确指出它是依赖项)。

我应该在引擎代码中添加一些 HAML 初始化吗?

0 投票
1 回答
1107 浏览

ruby-on-rails - 从父应用程序重新打开 Rails 3 引擎类

就目前而言,您无法/app通过简单地在父应用程序的/app目录中添加相同的类来重新打开引擎目录中包含的引擎类。例如:

my_engine如果父应用程序中存在同名文件,则文件 from甚至不会加载。更多细节在这里:

http://www.cowboycoded.com/2011/02/28/why-you-cant-reopen-rails-3-engine-classes-from-the-parent-app/

我正在寻找一种解决方法,它允许我将相同的文件名/类放在与父应用程序相同的路径中,然后重新打开而不是覆盖该类。也许我错过了一些明显的东西。我可以使用使用 class_eval 的单独文件(不同的文件名)来完成这项工作,但我对该解决方案并不满意。关于这个优雅的解决方案的任何想法?

我也想知道这个限制背后是否有原因,或者它只是rails加载文件的结果(参见包含的链接)而不是故意的。在我看来,改变引擎的负载行为以允许以这种方式重新打开类将是 rails 中的一个很好的特性。我知道一开始我很困惑,我相信其他开发人员也会遇到这个问题。

0 投票
7 回答
24914 浏览

ruby-on-rails-3 - Rails Engine - Gems 依赖项,如何将它们加载到应用程序中?

我在这里做一个引擎,它可以独立工作。

当我将其转换为 gem 并将其加载到另一个应用程序中时,我会收到很多未定义的错误,这些错误来自我的引擎 gem 的依赖项。

这是gemspec:

在应用程序中,当我进行捆绑安装时,它会列出所有这些依赖项,但是当我运行应用程序时,我会收到很多未定义的方法错误(例如,来自回形针的 has_attachment)。似乎应用程序没有加载引擎依赖项。这是默认行为吗?我可以改变它吗?引擎内部的插件也发生了同样的事情。

如果我在应用程序 Gemfile 中手动插入这些宝石,一切正常......

0 投票
1 回答
365 浏览

ruby-on-rails - Rails 引擎没有缓存

在开发中,我试图通过在ActiveRecord::Base类中包含一个方法来收集我的应用程序中的所有模型,以便他们可以配置模型,它会给我一个钩子来将该模型添加到全局数组中。

我的EngineName::Models课程只是一个包含所有模型的包装器。

但是,在每次刷新时,config_block我的模型中的方法都会被调用,然后在我的全局模型数组中一遍又一遍地附加相同的模型。

正如你在下面看到的,每当我遍历我的所有模型时,它都会继续附加自己。

在此处输入图像描述

有没有办法在我的引擎中缓存某些类?或者我在模型本身中使用钩子注册模型的方法中是否存在缺陷?

0 投票
1 回答
2813 浏览

ruby-on-rails-3 - Rails::Engine 命名空间控制器和模型

我遵循以下教程:http ://www.themodestrubyist.com/2010/03/05/rails-3-plugins---part-2---writing-an-engine/

这一切都很好。我使用命名空间控制器

在教程中,他没有命名模型。我想命名我的模型,但它不会与主机应用程序冲突。所以我尝试了以下方法:

这是我的观点,有一个简单的 form_for 应该去 accounts_path

但是当我使用我的命名空间模型时,我收到以下错误:

由新方法 (@account = Account.new) 创建的对象导致:

路由文件:(当我没有命名模型时,这有效。)

所以这是一个路由的事情。当我没有命名空间时,模型一切正常,但是当我命名它时它不起作用。然后我尝试了以下方法:

现在我得到没有路由错误的表格。但是当我尝试提交表单时,对象并没有保存。

我知道我正在做 @account = Account.new(params[:account]) 并且如果我将其更改为 Account.new(params[:authr_account] 我应该工作但我想用户 params[:account]应该工作对吗?因为控制器也是命名空间的......

然后我发现了一些关于isolated_name空间的东西,所以我尝试了这个:

我将路线更改为:

但这给了我以下错误:

我尝试了所有方法,并查看了其他宝石,它们具有命名空间模型。我确信我需要命名我的模型只是为了确保它们不会与主机应用程序冲突。我想使用 restfullroutes 但我不知道如何解决这个问题。

我在用:

感谢您的任何建议/帮助

0 投票
1 回答
1618 浏览

ruby-on-rails - Rails 3 Engines: how to change the priority of your routes

I am working on extracting some of the functionality of one of my apps into an Engine. It seems that the routes in your app are generated and then the routes for the engine. The end result is that my engine routes are considered low priority and my app routes are eating up all the requests before they ever get to the engine routes. Is there way for me to control the priority of my engine routes?

0 投票
1 回答
254 浏览

ruby-on-rails - 我的 rails 3 引擎的控制器仅在 rails 每秒刷新一次页面时才找到,否则返回 LoadError

我正在开发一个 Rails 3 引擎,但每次都很难让控制器加载。

每第二次访问我得到的页面;Webedit/public filesController#index中的LoadError

重现(假设 bash、ruby 1.9.2 和 rails 3);

然后转到http://localhost:3000/public

它会说“嗨”或错误..刷新以查看它更改为相反的行为。

任何帮助将不胜感激。我在 ruby​​ 调试器中花了一些时间,但需要了解很多关于 rails 如何工作以获得有意义的结果。