Tag: 轨道引擎

Rails Engines – 简单可能的引擎(1)添加模型和(2)在包含类中添加关联

我正在尝试编写我的第一个引擎,但遇到以下情况的问题。 在主机应用程序中,我将拥有User模型(这在引擎中可以保证,所以我可以引用User类而不是某种程度的间接),它有一个名称。 在引擎中,我将有一个post模型,需要在包含应用程序中的post模型和用户模型之间创建关联。 >rails plugin new abc –mountable … >rails g model Post header:string body:text user_id:integer …编辑post文件: module Abc class Post < ActiveRecord::Base attr_accessible :body, :header, :user_id belongs_to :user def self.say_hello puts "hello: " + Object.const_get(User).to_s end end end 如何访问包含类中的用户模型以添加以下内容? has_many :abc_posts, class: “Abc::Post” 我已经尝试了引擎中的每个变体(在app / models / app / models / abc等……): class User […]

开发生成HTML的辅助函数:我应该使用嵌套的content_tag()s还是partials?

我正在开发一个Rails引擎(和gem),它应该提供许多小帮助函数,为视图生成HTML。 现在我想知道是否可以依靠使用许多嵌套的content_tag调用来生成HTML,或者如果仅仅依赖于partial更加务实。 在我看来,第一种方法可能更清洁(但性能更慢),但第二种方法似乎更容易做,所以我想我会赞成第二种方法。 你们有什么感想?

在rails 3.2.8引擎中加载simple_form的错误

在rails 3.2.8引擎中加载simple_form时,simple_form初始化文件simple_form.rb会导致错误: /config/initializers/simple_form.rb:2:in `’: uninitialized constant SimpleForm (NameError) from c:/Ruby193/lib/ruby/gems/1.9.1/gems/railties-3.2.8/lib/rails/engine.rb:588:in `block (2 levels) in ‘ from c:/Ruby193/lib/ruby/gems/1.9.1/gems/railties-3.2.8/lib/rails/engine.rb:587:in `each’ 在引擎的config / initializers下,simple_form.rb是: # Use this setup block to configure all options available in SimpleForm. SimpleForm.setup do |config| # Wrappers are used by the form builder to generate a # complete input. You can remove any component […]

从父应用程序重新打开Rails 3引擎类

就目前而言,只需在父应用程序的/app目录中添加相同的类,就无法重新打开引擎/app目录中包含的Engine类。 例如: /my_engine/app/controllers/users_controller.rb /my_app/app/controllers/users_controller.rb 如果父应用程序中存在my_engine文件,则my_engine的文件甚至不会加载。 更多细节在这里: http://www.cowboycoded.com/2011/02/28/why-you-cant-reopen-rails-3-engine-classes-from-the-parent-app/ 我正在寻找一种解决方法,允许我在与父应用程序相同的路径中删除相同的文件名/类,并重新打开而不是覆盖该类。 也许我错过了一些明显的东西。 我能够使用一个使用class_eval的单独文件(不同的文件名)来完成这项工作,但我对这个解决方案并不满意。 关于优雅解决方案的任何想法? 我也想知道这个限制背后是否有原因,或者它只是rails如何加载文件(参见包含链接)而非故意的结果。 在我看来,改变引擎的负载行为以允许以这种方式重新打开类将是rails中的一个很好的特性。 我知道一开始我很困惑,我相信其他开发人员也会为这个问题而烦恼。

来自引擎的Rails.root

我从我的rails引擎访问Rails.root遇到了一些问题,我正在创建。 我需要从主应用程序中获取yml配置文件。 处理发动机配置是否有“最佳实践”?

使用来自引擎模型的主应用程序中的模型创建belongs_to关系

我自己构建了一个Rails引擎,要求主应用程序有一个Users表。 我需要能够在我的引擎中的一个模型和主应用程序中的Users表之间创建关系。 这比仅仅说belongs_to :user更复杂吗? 我收到一条错误,指出User对象为nil,但是当我使用控制台时,它会返回正确的用户。 我的假设是Rails假设我的belongs_to :user调用意味着用户的类与引擎在同一名称空间中,即MyEngine :: User。 有没有办法让我明确指定User类是在主应用程序的命名空间而不是引擎的?

Ruby on Rails 3.1博客引擎

我看到很多人都在询问博客引擎,但大多数问题和答案都相当陈旧。 或者,如果他们不老,大多数项目都是旧的。 我想知道是否有人知道任何目前支持Rails 3.1的博客引擎或者至少正在积极开发以支持Rails 3.1。 我也有兴趣看到为Rails 3.1博客编写的任何示例应用程序或博客文章。 我将在我的一个网站上添加一个博客,如果有任何好的,我更愿意只使用Rails引擎或示例代码。 我讨厌重新发明轮子。 寻找简单的东西,而不是太固执,所以我可以轻松修改,以满足自己的需要。

如何使用Cucumber和Rspec测试Rails 3引擎?

如果这个问题有点主观,我很抱歉…我正在试图找出用黄瓜和Rspec测试Rails 3引擎的最佳方法。 为了测试发动机,需要使用导轨3 app。 这是我目前正在做的事情: 通过运行: rails new /myengine/rails_app将rails测试应用程序添加到gem(myengine)的根目录 像在普通的Rails应用程序中一样,将Cucumber添加到/myengine/rails_app/features 在/myengine/rails_app/Gemfile需要Rails Engine Gem(使用:path=>”/myengine” ) 将spec添加到gem的根目录: /myengine/spec 在/myengine/spec/fixtures包含/myengine/spec/fixtures ,我将以下内容添加到我的cuc env.rb中: env.rb: Fixtures.reset_cache fixtures_folder = File.join(Rails.root, ‘spec’, ‘fixtures’) fixtures = Dir[File.join(fixtures_folder, ‘*.yml’)].map {|f| File.basename(f, ‘.yml’) } Fixtures.create_fixtures(fixtures_folder, fixtures) 你看到这样设置有什么问题吗? 测试运行良好,但我有点犹豫是否将function放在测试轨应用程序中。 我最初尝试将这些function放在gem的根目录中,并在features/support创建了测试rails应用程序,但由于某些原因,我运行测试时我的引擎无法初始化,即使我可以看到应用程序加载其他所有内容时瓜跑了。 如果有人正在使用Rails Engines并使用cuc和rspec进行测试,我很想听听你的设置。 * *更新 自从我写这个问题以后,我改变了我的设置。 我决定摆脱引擎根目录下的spec目录。 现在我只需创建一个名为“test_app”的rails应用程序,并在该应用程序中设置cuc和rspec,就像我通常在rails应用程序中所做的那样。 然后我像上面步骤#3中那样包含gem。 由于引擎是一个子应用程序,我想它最好测试它就像一个普通的rails应用程序。 如果有人有不同的设置,我仍然有兴趣听听。

如何在Rails引擎中获取Devise的current_user方法

我有一个使用Devise gem的Rails应用程序,我正在创建一个Rails引擎来安装在这个应用程序中。 mount Comments::Engine => ‘/talk’, :as => ‘comments’ 在Engine中,我想从主应用程序中获取current_user实例。 在{main_app} /initializers/comments.rb中 Comments.user_class = “User” Comments.current_user = “current_user” #current_user is Devise method(works fine in app) 在{engine} /lib/comments.rb中 require “comments/engine” module Comments mattr_accessor :user_class, :current_user def self.user_class @@user_class.constantize end def self.current_user send(@@current_user) end end 当我调用Comments.current_user ,我收到错误“错误的常量名称current_user”。 我究竟做错了什么?

为已安装的Rails引擎设置default_url_options

使用rails 3.2.13和spree 2.0.2 我在动态范围内遇到了与Rails可安装引擎类似的问题 我的路线: scope ‘:locale’, locale: /en|jp/ do mount Spree::Core::Engine, at: ‘/store’ root to: ‘home#index’ end 我想输出更改区域设置的链接: 但这输出: JP 而不是预期的: JP – 编辑 – 当我把它放到ApplicationController : def default_url_options(options={}) { locale: I18n.locale } end 它在商店中设置语言环境参数两次而不是合并它们: http://localhost:3000/en/store/products/bag?locale=en