相关疑难解决方法(0)

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

有人可以帮我理解Rails引擎和可安装应用程序之间的差异吗?在Rails 3.1中,您可以使用"rails new plugin _ __ "命令创建任一个.

rails plugin new forum --full        # Engine
rails plugin new forum --mountable   # Mountable App
Run Code Online (Sandbox Code Playgroud)

你什么时候想要使用一个?我知道你可以将Engine打包成一个宝石.可安装应用程序的情况不是这样吗?还有什么其他差异?

ruby-on-rails-plugins rails-engines ruby-on-rails-3 ruby-on-rails-3.1

119
推荐指数
4
解决办法
3万
查看次数

如何从主机应用程序可用的Rails 3引擎创建路由?

我有一个Rails 3应用程序,其中包含多个包含附加功能的引擎.每个引擎都是一个单独的服务,客户可以购买.

但是,我对来自引擎的路径存在问题,这些路由不容易用于控制器和视图.

控制器:

class ClassroomsController < ApplicationController
  ..
  respond_to :html

  def index
    respond_with(@classrooms = @company.classrooms.all)
  end

  def new
     respond_with(@classroom = @company.classrooms.build)
  end

  ..
end
Run Code Online (Sandbox Code Playgroud)

app/views/classrooms/new.html.haml:

= form_for @classroom do |f|
  ..
  f.submit
Run Code Online (Sandbox Code Playgroud)

config/routes.rb 在引擎中:

MyEngineName::Engine.routes.draw do
  resources :classrooms
end
Run Code Online (Sandbox Code Playgroud)

config/routes.rb 在app中:

Seabed::Application.routes.draw do
  mount MyEngineName::Engine => '/engine'
  ...
end
Run Code Online (Sandbox Code Playgroud)

lib/my_engine_name.rb 在引擎中:

module MyEngineName
  class Engine < ::Rails::Engine
  end
end
Run Code Online (Sandbox Code Playgroud)

试图进入/classrooms/new结果

NoMethodError in Classrooms#new

Showing app/views/classrooms/_form.html.haml where line #1 raised:
  undefined method `hash_for_classrooms_path' for #<Module:0x00000104cff0f8>
Run Code Online (Sandbox Code Playgroud)

并尝试classrooms_path …

ruby-on-rails url-routing rails-routing rails-engines ruby-on-rails-3

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

Rails 3初始化命令

有人可以指出我正确的方向为rails模块实例化的顺序.

我想要找到的主要内容是:

1)何时加载宝石?

2)何时加载config/initializers/*?

3)什么时候在routes.rb中命名路由被处理?

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

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

如何从引擎覆盖Rails应用程序路由?

我有一个Rails应用程序,我正在尝试将Rails引擎集成到.

主机应用程序有一些捕获所有路线:

  # magic urls
  match '/' => 'admin/rendering#show'
  match '*path/edit' => 'admin/rendering#show', :defaults => { :editing => true }
  match '*path' => 'admin/rendering#show'
Run Code Online (Sandbox Code Playgroud)

看起来应用程序捕获所有路由后加载引擎路由.

/sitemap.xml(.:format)                                            {:format=>"xml", :controller=>"admin/sitemaps", :action=>"show"}
                              /(.:format)                                                       {:controller=>"admin/rendering", :action=>"show"}
                              /*path/edit(.:format)                                             {:controller=>"admin/rendering", :action=>"show"}
                              /*path                                                            {:controller=>"admin/rendering", :action=>"show"}
           engine_envs GET    /engine/envs/:id(.:format)                                       {:controller=>"engine/envs", :action=>"show"}
                       PUT    /engine/envs/:id(.:format)                                       {:controller=>"engine/envs", :action=>"update"}
                jammit        /assets/:package.:extension(.:format)                             {:extension=>/.+/, :controller=>"jammit", :action=>"package"}
Run Code Online (Sandbox Code Playgroud)

到目前为止,一切都在击中/engine/envs路线被应用程序捕获所有路线.但是我发现堵塞路线是在发动机后加载的,我不相信那些被抓住了.有没有办法覆盖应用程序路线?

routes ruby-on-rails ruby-on-rails-plugins rails-engines ruby-on-rails-3

5
推荐指数
1
解决办法
2636
查看次数