rog*_*iog 13 ruby rubygems ruby-on-rails ruby-on-rails-3
我开发Rails应用程序特别是一个rubygem,我想从我的宝石加控制器,使其可在Rails应用程序(类似于设计确实与RegistrationsController,SessionsController).
在宝石方面:
我尝试添加以下app/controllers/samples_controller.rb
class SamplesController < ApplicationController
def index
.
.
end
end
Run Code Online (Sandbox Code Playgroud)
然后在我的rails路线上添加它:
match 'route' => 'samples#index'
Run Code Online (Sandbox Code Playgroud)
要么
resources :samples
Run Code Online (Sandbox Code Playgroud)
显然我在那里遇到了一些问题,但我不知道它是什么?我是否需要在某处明确要求我的SampleController或应用程序上的初始化程序?
现在我在访问路线时遇到此错误
uninitialized constant SamplesController
Run Code Online (Sandbox Code Playgroud)
谢谢 :)
Ket*_*kar 21
假设您的gem名为MyGem,并且您有一个名为SamplesController的控制器,您想在应用程序中使用它.您的控制器应定义为:
module MyGem
class SamplesController < ApplicationController
def whatever
...
end
end
end
Run Code Online (Sandbox Code Playgroud)
在你的gem目录中,它应该存在app/controllers/my_gem/samples_controller.rb(不在lib文件夹下).
然后使用代码在gems lib/my_gem文件夹中创建engine.rb
module MyGem
class Engine < Rails::Engine; end
end
Run Code Online (Sandbox Code Playgroud)
您可以通过在config文件夹中使用代码创建routes.rb来编写gem中的路由
# my_gem/config/routes.rb
Rails.application.routes.draw do
match 'route' => 'my_gem/samples#index'
end
Run Code Online (Sandbox Code Playgroud)
最终的结构是这样的
## DIRECTORY STRUCTURE
#
- my_gem/
- app/
- controllers/
- my_gem/
+ samples_controller.rb
- config/
+ routes.rb
- lib/
- my_gem.rb
- my_gem/
+ engine.rb
+ version.rb
+ my_gem.gemspec
+ Gemfile
+ Gemfile.lock
Run Code Online (Sandbox Code Playgroud)
而已.
首先,您的代码中有一个拼写错误:AppicationController应该是ApplicationController。
那么,您没有遵循 Rails 命名约定(资源等的复数形式):
resources :samples或resource :sample。class SamplesController是samples_controller.rb.遵循惯例,你应该没问题。
| 归档时间: |
|
| 查看次数: |
4685 次 |
| 最近记录: |