Ruby on rails Rails引擎渲染视图

Ruby on rails Rails引擎渲染视图,ruby-on-rails,partial-views,rails-engines,Ruby On Rails,Partial Views,Rails Engines,我正在开发一个rails引擎。除了rails文档中的示例之外,这是我的第一个示例,因此我没有很好的参考。它有一个我要求应用程序渲染的部分 <%=render partial: 'my_engine/foo/bar'%> 我还惊讶地发现,您需要在名称空间控制器中手动包含名称空间的应用程序控制器 require_dependency "enginename/application_controller" 但正如Rich所说,引擎只是一个美化了的模块,所以我想它时不时需要一些帮助 当然

我正在开发一个rails引擎。除了rails文档中的示例之外,这是我的第一个示例,因此我没有很好的参考。它有一个我要求应用程序渲染的部分

<%=render partial: 'my_engine/foo/bar'%>
我还惊讶地发现,您需要在名称空间控制器中手动包含名称空间的应用程序控制器

require_dependency "enginename/application_controller"
但正如Rich所说,引擎只是一个美化了的模块,所以我想它时不时需要一些帮助

当然,Javascript文件是隔离的,因为它们只在加载引擎中的一个页面时加载,而不是在呈现引擎中的部分页面时加载。您可以让引擎的用户在application.js中包含javascript文件,但随后需要手动对它们命名,以避免将它们与其他来源的类似js混淆。肯尼斯·杜鲁耶斯(Kenneth Truyers)有一篇关于这一点的博客,我想在以后的练习中使用它,也许我现在就需要开始了

lso区域设置没有名称间隔,所以您需要自己完成。易于添加:引擎名称到区域设置文件层次结构 阿拉德: :引擎名称 :变量 我建议在引擎名称中添加一个前缀,比如x,这样可以避免使用相同名称作为变量的用户对引擎区域设置的攻击。所以xAdmin:比Admin:更好,因为像我这样的人可能会使用Admin:作为管理函数的变量:),然后发现引擎中的所有本地化突然消失了

里奇,我更亲近了吗

现在让我继续提问

我不确定初始化文件是否有名称空间。apps initializers目录中的enginename.rb文件是否覆盖引擎的initializers目录中具有相同名称的文件?我假设如果这是真的,我们可以在引擎初始值设定项中使用不同的名称,因为我认为它与文件名没有真正的关联,只是记账

现在,如何在应用程序中扩展模型

因此,要向应用程序模型添加列,可以这样做吗 在engine.rb中(位于库中)
mattr_访问器:user_类 mattr\u访问器:用户表

在engine_initializer.rb中

    engine.user_class= 'User'
    engine.user_table='users'
然后在迁移过程中

add_column  Engine.user_table.to_sym, :attribute   
 add_index   Engine.user_table.to_sym, :attribute,   
        name: "index_#{Engine.user_table}_on_engine_attribute".to_sym
这似乎行得通

但是我们如何向模型中添加方法呢。 我让用户添加require'engine/user_include.rb'


是否有一种很好的方法可以做到这一点

您的代码将为您提供预期的输出,rails提供了不同的呈现选项和标记属性

此参考将帮助您更新

一,


2.

模块和类

我是做错了什么事,还是就是这样

你没有做错,但这不是“现在的样子”。。。让我解释一下它是如何工作的

Rails引擎不过是美化了的
模块
&
。当您创建一个引擎(gem)时,它本质上就像创建一个-'

旨在使您能够向系统添加标准化功能,而不会干扰您的代码库(基本上是如何
gems
工作的)。您的问题是是否需要在路径等中调用引擎的名称:

<%= image_tag('my_engine/addphoto.jpg') %>

底线是如果您将资产与引擎捆绑在一起,Rails将如何访问这些文件?将基于引擎的文件与其他应用程序分开意味着您将能够专门为引擎绑定文件(它们不会冲突)

这就是
引擎存在的原因-它们允许您在不干扰应用程序其他部分的情况下提供功能


宝石

最近,我可以证明发动机的工作方式


rails gem基本上只是一个引擎,附带了一些其他文件。因此,如果您将各种
控制器
模型
资产
与您的gem一起使用,那么让它们成为
引擎
独有的(以免与应用程序的其他部分发生冲突)难道没有意义吗?

谢谢您的帮助。我想我明白了。我现在正在简化引擎,直到我让各种东西都能正常工作,然后我会重新添加一些东西。我会回来的:)嘿,我扩展了我的问题,太长了,无法发表评论。如果你能再检查一下我在哪里,我会很感激的
add_column  Engine.user_table.to_sym, :attribute   
 add_index   Engine.user_table.to_sym, :attribute,   
        name: "index_#{Engine.user_table}_on_engine_attribute".to_sym
#app/controllers/namespace/controller.rb
Class Namespace::Controller < ApplicationController
  ...
end
module Blorgh
  class Engine < Rails::Engine
    ...
  end
end
<%= image_tag('my_engine/addphoto.jpg') %>