标签: rails-engines

Rails 引擎和设计

我有一个 Rails 引擎,我想在其中使用 Devise。我按照本指南正常安装了设备。

我在我的引擎 devise.rb 中添加了这个:

Devise.setup do |config|
  config.router_name = :cms_user
end
Run Code Online (Sandbox Code Playgroud)

我在我的路由文件中添加了这个:

Cms::User::Engine.routes.draw do
  devise_for :users, {
    class_name: 'Cms::User',
    module: :devise
  }
end
Run Code Online (Sandbox Code Playgroud)

我在我的路线中添加了这个:

devise_for :users, {
  class_name: 'Cms::User',
  module: :devise
}
Run Code Online (Sandbox Code Playgroud)

但是我不断收到此错误:

undefined method 'cms_user'
Run Code Online (Sandbox Code Playgroud)

我究竟做错了什么 ?

ruby-on-rails content-management-system rails-engines devise

3
推荐指数
1
解决办法
2904
查看次数

使用Rails引擎共享没有命名空间的模型

我试图通过使用Rails引擎将我的应用程序的模型分离为更可重用.

我创建了一个Common引擎,它包含了我想要在网站和API项目之间共享的应用程序的所有模型.

由于默认情况下Rails引擎命名空间的所有模型的性质,我想知道是否有一种方法可以让它更简单,只是不命名引擎所包含的任何模型.

我希望简化我的模型,而不必重写我的应用程序,为我的所有模型添加命名空间前缀,并将引擎共享为我的其他应用程序的全局模型.

我试过从引擎中删除"isolate_namespace"但我的视图中仍然存在路径问题.例如.

<%= link_to user.name, user %>
Run Code Online (Sandbox Code Playgroud)

在common的命名空间中查找url会产生错误

undefined method common_user_path
Run Code Online (Sandbox Code Playgroud)

有没有更好的方法来实现这一目标?

ruby-on-rails rails-engines

3
推荐指数
1
解决办法
996
查看次数

Rails 装饰器,覆盖 Rails 引擎

我正在编写一些装饰器来覆盖此处所述的 Rails 引擎。我正在尝试向引擎中的类添加一个简单的方法,这是我的代码:

# app/decorators/models/my_engine/user_decorator.rb

MyEngine::User.class_eval do
  def self.find_by_name_or_mis_id str
    where("CONCAT(#{table_name}.firstname, ' ', #{table_name}.surname) LIKE CONCAT('%', :s, '%') OR mis_id = :s", { s: str })
  end
end
Run Code Online (Sandbox Code Playgroud)

我的应用程序找不到该方法,在 rails 控制台中我尝试对其进行测试:

# rails c
MyEngine::User.find_by_name_or_mis_id "John"
NoMethodError: undefined method `find_by_name_or_mis_id' for #<Class:0x007fcb85a45580>
Run Code Online (Sandbox Code Playgroud)

我可以通过require '/models/my_engine/user_decorator'在控制台上做来让它工作,为什么 rails 不接我的装饰器?

ruby-on-rails rails-engines

3
推荐指数
1
解决办法
3023
查看次数

如何将模块类名转换为rails中的符号

在rails初始化文件中,有一行用于配置接受符号的活动对象:

config.objects += [ :room, :hotel, ..etc ]
Run Code Online (Sandbox Code Playgroud)

这些符号表示我想要配置的类.

我的问题是我使用的是一个rails引擎,它定义了我想要配置的'Blogit :: Post'模块类.如何将其作为符号添加到配置数组中?

ruby ruby-on-rails rails-engines

3
推荐指数
1
解决办法
2293
查看次数

为什么需要显式加载可安装引擎的迁移和种子?

所以我一直在阅读Ruby on Rails Engine指南迁移+种子 ,似乎为了在引擎上运行种子,它们需要在使用它的应用程序中添加

(使用虚拟应用程序的示例)

添加MyEngine::Engine.load_seedEngine/test/dummy/db/seeds.rb

我的问题是为什么我们需要这样做,他们应该与主应用程序隔离?(它们没有关联,只是播种引擎数据库)

注意:如果您正在使用更多上下文,我已将设计gem(/ engine)添加到我的Engine中,种子数据只是在我的Engine上下文中创建用户以登录其界面

ruby rake ruby-on-rails rails-migrations rails-engines

3
推荐指数
1
解决办法
1384
查看次数

Rails引擎在外键中出现问题

我正在开发一个rails引擎,这是我的 gem.gemspec


s.required_ruby_version = '>= 2.0.0'

s.add_dependency 'rails', '>= 4.2.0'
s.add_dependency 'enumerate_it'
s.add_dependency 'slim-rails'
s.add_dependency 'bootstrap-sass'
s.add_dependency 'jquery-rails'

s.add_development_dependency 'rdoc'
s.add_development_dependency 'tomdoc'
s.add_development_dependency 'sqlite3'
s.add_development_dependency 'rspec-rails'
s.add_development_dependency 'timecop'
s.add_development_dependency 'shoulda-matchers'
s.add_development_dependency 'factory_girl_rails'
s.add_development_dependency 'database_cleaner'
s.add_development_dependency 'awesome_print'
s.add_development_dependency 'guard'
s.add_development_dependency 'guard-rspec'
s.add_development_dependency 'guard-migrate'
s.add_development_dependency 'guard-livereload'
s.add_development_dependency 'thor'
s.add_development_dependency 'simplecov'
s.add_development_dependency 'codeclimate-test-reporter'
Run Code Online (Sandbox Code Playgroud)

这是我的迁移文件,当我运行install命令时,它将复制到我的rails应用程序:

class CreateMpaStorySchema < ActiveRecord::Migration
  def change
    create_table :mpa_story_archetypes do |t|
      t.string :name
      t.string :api_name
      t.string :api_key
      t.text :description
      t.integer :kind, index: true
      t.integer :tier, index: true
      t.integer :execution, index: …
Run Code Online (Sandbox Code Playgroud)

rspec ruby-on-rails foreign-keys rails-migrations rails-engines

3
推荐指数
1
解决办法
540
查看次数

如何在Rails应用程序中识别路由

我有这个非常基本的问题.我正在使用这个仪表板导轨引擎,这给了我一个views/layouts/dashing/dashboard.html.erb.这是仪表板视图的布局.

但是我想自定义这个视图,比如添加一个导航栏,它有一个指向我的链接about_path.但是,仪表板视图中不会识别任何路径.它会导致错误undefined method about_path.

about_path路由在我的路由文件中定义,并且在其他不属于仪表板的视图中正常工作.

rails引擎是否可以识别我的应用程序中定义的路由?

dashboard routes ruby-on-rails rails-engines

3
推荐指数
1
解决办法
65
查看次数

ruby on rails引擎undefined方法'delete'代表nil:NilClass

我是Ruby on Rails的新手,使用rails 3.2.13和ruby 1.9.3p392.我正在尝试构建一个应用程序使用的引擎,这可能会导致我的困惑.

引擎名称为sales_app.我有一个页面将大量数据发布到sales_app/sales #create以创建销售.在销售控制器的创建操作中,我做了一些数据处理并尝试实例化Sale对象.我没有从模型中创建对象,而是获取了一个我甚至不知道我正在调用的删除方法的NoMethodError异常.请帮忙.

以下是相关细节.我的销售/新页面将以下参数发布到sales #create:

{"sale"=>{"name"=>"Test",
 "desc"=>"This is a test",
 "start_date"=>"05/30/2013",
 "end_date"=>"05/31/2013",
 "start_time"=>"07:00",
 "end_time"=>"08:00",
 "products"=>""},
 "create"=>"Create Sale"}
Run Code Online (Sandbox Code Playgroud)

Sales控制器的创建操作具有以下内容:

def create
  if params[:create] == "Create Sale"
    # process the data - add a start and end to params
    #format = "%m/%d/%Y %H:%M:%S"
    params[:sale][:start] = DateTime.strptime("#{params[:sale][:start_date]} #{params[:sale][:start_time]}:00", '%m/%d/%Y %H:%M:%S')
    params[:sale][:end] = DateTime.strptime("#{params[:sale][:end_date]} #{params[:sale][:end_time]}:00", '%m/%d/%Y %H:%M:%S')
    @sale = Sale.new(:name => params[:sale][:name], :desc => params[:sale][:desc], :start => params[:sale][:start], :end => params[:sale][:end])
    if @sale.save
      redirect_to @sale
    else …
Run Code Online (Sandbox Code Playgroud)

ruby-on-rails rails-engines ruby-on-rails-3

2
推荐指数
1
解决办法
4865
查看次数

如何在自定义Rails引擎gem中加载正确版本的动态库和gems(libxml,Nokogiri)?

我正在构建一个使用Nokogiri gem的rails引擎,我在MacOS 10.7和10.8中遇到了我的开发设置问题:

为了让Nokogiri在我的设置中正常工作,我更新了libxml和libxslt库:

brew update
brew install libxslt
brew upgrade libxml2
gem uninstall nokogiri
gem install nokogiri -- --with-xml2-include=/usr/local/Cellar/libxml2/2.9.0/include/libxml2 --with-xml2-lib=/usr/local/Cellar/libxml2/2.9.0/lib --with-xslt-dir=/usr/local/Cellar/libxslt/1.1.28
Run Code Online (Sandbox Code Playgroud)

如果我在"常规"rails应用程序中使用它,Nokogiri可以正常工作(将它包含在Gemfile中,运行bundle install).

当我尝试从我正在构建的Rails引擎中使用Nokogiri并使用我的应用程序作为宝石时出现问题.

在gemspec中:

s.add_dependency 'nokogiri' # XML parsing
Run Code Online (Sandbox Code Playgroud)

我还在Gem的Gemfile顶部尝试了以下内容:

gem 'nokogiri'
Run Code Online (Sandbox Code Playgroud)

当我启动一个使用我的Rails Engine gem的应用程序时,我收到以下警告:

WARNING: Nokogiri was built against LibXML version 2.9.0, but has dynamically loaded 2.7.8
Run Code Online (Sandbox Code Playgroud)

如何配置gem和/或bundler和/或Rails以使用正确版本的Nokogiri和libxml以及libxslt?

另外,这是输出 nokogiri -v

# Nokogiri (1.5.9)
    ---
    warnings: []
    nokogiri: 1.5.9
    ruby:
      version: 1.9.3
      platform: x86_64-darwin12.3.0
      description: ruby 1.9.3p392 (2013-02-22 revision 39386) [x86_64-darwin12.3.0]
      engine: ruby
    libxml:
      binding: extension
      compiled: …
Run Code Online (Sandbox Code Playgroud)

ruby ruby-on-rails libxml2 nokogiri rails-engines

2
推荐指数
1
解决办法
1017
查看次数

发电机不在宝石中工作

在gem中创建生成器时遇到问题.当我运行rails g发电机时显示:

Supportator:
  supportator:initializer
Run Code Online (Sandbox Code Playgroud)

但是当我运行发生器rails generate supportator:initializer时发生以下错误:

Could not find generator supportator:initializer.
Run Code Online (Sandbox Code Playgroud)

这是生成器的代码:

require 'rails/generators'

module Supportator
  class InitializerGenerator < Rails::Generators::Base
    source_root File.expand_path("../templates", __FILE__)

    def create_initializer_file
      copy_file '_browser_validator.html.haml', 'app/views/_browser_validator.html.haml'
      copy_file 'en_supportator.yml' , 'config/locales/en_supportator.yml'
      copy_file 'es_supportator.yml' , 'config/locales/es_supportator.yml'
    end

  end
end
Run Code Online (Sandbox Code Playgroud)

这是引擎的代码:

module Supportator
  require 'rails'
  class Engine < ::Rails::Engine
  end
end
Run Code Online (Sandbox Code Playgroud)

你知道为什么会这样吗?

ruby ruby-on-rails generator rails-engines ruby-on-rails-4

2
推荐指数
1
解决办法
619
查看次数