Rails 3.1:引擎与可安装应用程序

2023-12-02

有人可以帮助我理解 Rails 引擎和可安装应用程序之间的区别吗?在 Rails 3.1 中,您可以使用“rails new 插件”创建任一插件___“ 命令。

rails plugin new forum --full        # Engine
rails plugin new forum --mountable   # Mountable App

您什么时候想使用其中一种而不是另一种?我知道您可以将引擎打包为宝石。可安装应用程序不就是这样吗?还有哪些其他区别?


我注意到以下几点:

全引擎

对于完整的引擎,父应用程序会继承引擎的路由。没有必要指定任何内容parent_app/config/routes.rb。在 Gemfile 中指定 gem 足以让父应用继承模型、路由等。引擎路由指定为:

# my_engine/config/routes.rb 
Rails.application.routes.draw do 
  # whatever 
end 

没有模型、控制器等的命名空间。这些是立即 可由父应用程序访问。

可安装的发动机

引擎的命名空间默认是隔离的:

# my_engine/lib/my_engine/engine.rb
module MyEngine 
  class Engine < Rails::Engine 
    isolate_namespace MyEngine 
  end 
end

使用可安装引擎,路由被命名空间,并且父应用程序可以将此功能捆绑在单个路由下:

# my_engine/config/routes.rb 
MyEngine::Engine.routes.draw do 
  #whatever 
end 

# parent_app/config/routes.rb 
ParentApp::Application.routes.draw do 
    mount MyEngine::Engine => "/engine", :as => "namespaced" 
end 

模型、控制器等与父应用程序隔离——尽管助手可以轻松共享。

这些是我发现的主要差异。也许还有其他人?我已经问过了here,但尚未收到回复。

我的印象是,由于完整的引擎不会将自身与父应用程序隔离,因此最好将其用作与父应用程序相邻的独立应用程序。我相信可能会发生名称冲突。

当您想要避免名称冲突并将引擎捆绑在父应用程序中的一个特定路由下时,可以使用可安装引擎。例如,我正在致力于构建我的第一个专为客户服务而设计的引擎。父应用程序可以将其功能捆绑在单个路由下,例如:

mount Cornerstone::Engine => "/cornerstone", :as => "help" 

如果我的假设与我的假设相距甚远,请有人告诉我,我会修复此响应。我写了一篇关于这个主题的小文章here.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Rails 3.1:引擎与可安装应用程序 的相关文章

  • 更改 en.yml 文件中的属性名称不起作用

    我更改了 ruby on Rails 项目中 en yml 文件中的属性名称 按钮工作正常 但字段属性并没有改变 这是我的模型 class Enr AffordableWarmth lt ActiveRecord Base self tab
  • 在rails中,如何在要求升级帐户之前限制用户在数据库中保存的帖子数量

    我添加了一种控制非订阅用户和订阅用户的小方法 基本上我的想法是所有使用 Devise 注册的用户都会获得一个帐户 但是 我的模型或根据找到的用户 ID 在数据库中存储的用户可以拥有的帖子数量应该是 25 个帖子 我猜下面的方法会起作用 Mo
  • STI 在遗传类型之间发生变化。

    在我的模型中 我像这样使用 STI 车辆型号 vehicle rb class Vehicle lt ActiveRecord Base end 车型 car rb class Car lt Vehicle end 总线模型 bus rb
  • 实施单表继承后,Rails 路由损坏

    我已经为 person 类实现了单表继承 class Person lt ActiveRecord Base end class Teacher lt Person end class Student lt Person end class
  • Ruby on Rails 中的垃圾收集器?

    我尝试在 Google 上搜索很多有关 Rails 垃圾收集器的信息 但没有得到可靠的答案 有谁有资源来展示如何垃圾收集是在 Rails 中实现的吗 我们怎样才能控制它呢 Rails 是一个框架 而不是一种语言 Rails 背后的语言称为
  • 如何创建下载链接

    创建下载链接的最佳方法是什么 还有比下面更好的方法吗 我正在考虑使用link to Download controller gt action gt id gt 视图中 Adding match documents download id
  • 使用 Rails 应用程序推送到 Heroku 时如何忽略文件夹和文件?

    我有一个Rails 3 2 8应用程序 我不想推送我的spec文件夹和test登录 Heroku 我该怎么做 如果有一个staging偏僻的 Thanks 你可以把它们放进去 gitignore 但这会将它们从您的整个存储库中排除 更好的解
  • 正则表达式检查 ruby​​ 中的字母数字字符串

    我正在尝试验证 ruby 中的字符串 任何包含空格 下划线或任何特殊字符的字符串都将无法通过验证 有效字符串应仅包含字符 a zA Z0 9 我的代码看起来像 def validate string regex a zA Z0 9 if s
  • 回形针:从带扩展名的 url 上传

    我想通过 S3 存储上的回形针从 URL 上传图片 我与 Ruby 1 9 3 Rails 3 2 6 paperclip 3 1 3 aws sdk 1 3 9 我有我的图片模型 class Asset has attached file
  • 在 Rails 3 中将“当前”类添加到导航的最佳方法

    我的导航菜单中有一些静态页面 我想向当前显示的项目添加一个像 current 这样的类 我这样做的方法是添加大量的辅助方法 每个方法对应一个项目 来检查控制器和操作 def current root class class current
  • 如何在 Rails 3 中查看用户的实时活动?

    我想做的是让我的管理员用户能够实时 通过一些 AJAX jQuery 功能 看到我的用户正在做什么 我该如何去做呢 我认为它与会话活动有关 并且我已经开始将会话保存到数据库 而不是 cookie 但一般来说 我如何获取该信息并实时解析它 我
  • 如何在控制器中获取f.submit的名称参数?

    我创建了 form html erb 其中的编码如下 是的 我确实有两个相同表单的提交 并且它们都有 更新 和 销毁 等名称 当用户按下销毁按钮时 books controller 中的更新操作将被调用 并判断是 更新 还是 销
  • $ bundle exec rake db:reset 命令提升无法删除 db/development.sqlite3

    我试着跑 bundle exec rake db reset并在控制台上发现以下内容 Couldn t drop db development sqlite3
  • Rails 3 安装在 Gem Builder 中挂起,并显示“无法将“\xF1”从 ASCII-8BIT 转换为 UTF-8”

    我按照这个教程http pragmaticstudio com blog 2010 9 23 install rails ruby mac http pragmaticstudio com blog 2010 9 23 install ra
  • Rails - 使用 %W

    我有以下效果很好的 def steps w hello billing confirmation end steps first 但我想这样做 def step title w Upload a photo Billing Info Con
  • 使用 tweetstream 守护进程写入数据库

    我正在尝试将与关键字匹配的所有推文写入我的数据库 我在中设置了以下内容tracker rb require rubygems require tweetstream TweetStream Daemon new Bill Gates mon
  • 将 URL 转换为 JSON 版本?

    在我的应用程序的所有页面上 我想要一个指向当前页面的 JSON 版本的链接 有什么巧妙的技巧可以做到这一点吗 当 URL 中包含额外的 参数时 情况就变得复杂了 所以 url 将被转置为 users gt users json users
  • 将 gmaps4rails 与 https/SSL 结合使用

    我是 gmaps4rails 的忠实粉丝 它使向我们的网络应用程序添加地图变得非常容易 我现在遇到的唯一问题是 如果您在 https 页面上使用它 则会收到有关混合内容的安全警告 谷歌地图API确实支持https 所以我认为这只是将脚本引用
  • 拆分字符串而不删除分隔符

    我需要解析一个文件以获取单个 SQL 语句并从 Rails 控制器运行它们 我有以下代码 sql file RAILS ROOT lib evidence interface import sql sql stmts array File
  • 新分配的序列不起作用

    在 PostgreSQL 中 我创建了一个新表并为其分配了一个新序列id柱子 如果我从 PostgreSQL 控制台插入记录 它可以工作 但是当我尝试从 Rails 导入记录时 它会引发异常 无法找到关联的序列 这是表格 d user me

随机推荐

  • PHP 缓存的最佳方式

    目前 我正在尝试编写一个关于电子商务的软件 我的数据通常只是 MySQL 查询 例如语言变量结果 错误号猫 gt No category found 在 PHP 中缓存这些数据的最佳且简单的方法是什么 apc
  • 将字符串列表转换为列表列表,列表列表中的每个元素作为字符串中的每个可迭代字母。全部排成一行

    使用字符串 x 列表 x foo bar 我怎样才能在一行中完成以下操作 y for word in x y append n for n in word print y 导致 f o o b a r With list和简单的列表理解 g
  • 在回调函数中访问 $(this)

    我正在努力将prompt 更改为jPrompt 因为IE阻止prompt 运行 问题是 this 不再正常工作 因为 jPrompt 不返回值 而是使用回调函数 假设我有这样的东西 它有效 a foo click function this
  • Jupyter 笔记本并排显示两个 pandas 表

    我有两个 pandas 数据框 我想在 Jupyter 笔记本中显示它们 做类似的事情 display df1 display df2 将它们显示在另一个下面 我想在第一个数据框的右侧有第二个数据框 有类似的问题 但看起来人们对将它们合并到
  • 使用 JQuery 更改 CSS 属性

    今天我看到了一个非常简单的方法来改变font size使用 jQuery 的元素 它看起来与以下内容非常相似 这显然不起作用 但我想知道缺少什么 我记得这只是一行代码 注 我已经尝试过jQuery document body css fon
  • 我可以使用 ObjectChangeListener 监听任何对象的更改吗?

    我有一个Integer称为x 如果它发生变化 那么我想在 GUI 中更新我的表 听 x 我已经尝试过 ChangeEvent y new javax swing event ChangeEvent x 我实施javax naming eve
  • Netlogo 数组需要文字值

    该数组需要一个文字值 set chrom forage min forage rate share min share rate mating treshold print chrom 我该如何处理 我真的不明白 Netlogo 中的数组
  • DDD 和聚合事务边界

    假设我有一个名为文档的对象 它有一堆图像 音频 视频等形式的子对象 因此 我的应用程序的用户可以通过键入一些文本 添加图像 视频等来创建文档 据我了解在DDD中 文档是一个聚合体 而图像 视频总是与作为根的文档相关联 基于这种理解 我将如何
  • 处理 html 表单提交中的 UTF 字符

    我的 html 表单有一些输入文本字段 这些字段可能会获取中文 日文 欧洲字符 特殊字符 例如 等 简而言之 就是 unicode 字符 为了在服务器端 使用 php 处理这些值 我可以假设所有浏览器在提交表单时默认都以 UTF 8 格式对
  • 使用 Perl 正则表达式确定 URI 是否有效

    对于我正在开发的应用程序 我需要一个 Perl 脚本 它循环遍历大量 CSV 文件并确保每一行都包含有效的 URI 我之前已经问过一个关于解析 CSV 文件的问题 并且我已经开始使用Text CSV让我的生活变得更轻松 现在我面临确保 UR
  • 如何将 jQuery 验证与“chosen”插件一起使用?

    我有一些
  • C#:在 RichTextBox 中粘贴 RTF,但保留颜色和格式(即:粗体、下划线等)

    是否可以将文本粘贴到富文本框中 同时保留粘贴内容在富文本框中使用的字体 换句话说 我想从 Word 中复制一些已格式化的内容 即 使用字体 X 并带有下划线和蓝色的文本 然后将其粘贴到我的 RichTextBox 中 我希望粘贴的内容具有与
  • 使用多个参数调用 shell 命令

    我正在尝试通过 Perl 脚本自动创建证书 我要运行的命令是 easyrsa build client full clientname nopass 我认为应该在 Perl 中完成的方式是 my arguments build client
  • UITextField 仅允许使用字母数字字符

    我该如何在 iOS 中只允许输入字母数字字符UITextField 使用 UITextFieldDelegate 方法 textField shouldChangeCharactersInRange replacementString 使用
  • SimpleTestCursor robolectric 3.0--编译问题

    我正在尝试在我的应用程序中测试光标 但对于以下导入 我收到错误消息 无法解析符号 测试员 我正在使用 Robolectric 3 0 为什么导入无法解析 我是否缺少一些依赖项 我看过互联网但没有支持 请帮忙 我正在尝试使用 this API
  • 如何将张量板与 tf.layers 一起使用?

    由于权重没有明确定义 我如何将它们传递给摘要编写者 例如 conv1 tf layers conv2d tf reshape X FLAGS batch 3 160 320 filters 16 kernel size 8 8 stride
  • Eclipse PyDev 抛出虚假错误

    我昨天更新了 PyDev Eclipse 现在它告诉我没有 name其他保留字 内置函数无效 但脚本运行良好 我在这个论坛上读到 问题涉及错误导入内置程序 我尝试过更改解释器并重新添加它 但没有成功 有人可以帮我吗 错误 未定义的变量mai
  • glut - 按住某个键

    我有一些基本代码来使用 glut 收集按键向上和按键按下事件 如果我按住一个键 我会连续触发事件 下 上 下 上 下 上 而不是预期的向下 开始时一次 和向上 一次 最后 include
  • 使用 HTML 按钮调用 JavaScript 函数

    我正在尝试使用 HTML 按钮来调用 JavaScript 函数 这是代码
  • Rails 3.1:引擎与可安装应用程序

    有人可以帮助我理解 Rails 引擎和可安装应用程序之间的区别吗 在 Rails 3 1 中 您可以使用 rails new 插件 创建任一插件 命令 rails plugin new forum full Engine rails plu