Ruby on rails 3 如何重新路由标准rest操作以设计控制器?
我一直在将Desive构建成一个小的Rails应用程序。这是一个相当标准的设置,但有一个缺点是需要更改此项目的默认身份验证规则。非幂等注册操作必须仅限于经过身份验证的用户 为此,我编写了一个自定义注册控制器,并将其链接到路由中。定制控制器真正要做的就是改变过滤要求。基于Rails控制器过滤,我以最小的努力实现了这一点 但就其本身而言,这只适用于设计特定的操作,如/users/sign\u或/users/edit。我还想将标准Rails操作(/users/new、/users/1/edit等)连接到自定义控制器。我可以让动作实例化控制器——可以说是把马引向水——但是当动作是新的而不是注册时,它会在过滤过程中崩溃 问题似乎是,当操作为“新建”时,resource\u name的结果为零,但当操作为“注册”时,结果为零。我不明白为什么Desive会在意,或者代码中的区别在哪里。我看过其他的问题,比如和,但他们没有涉及到这个问题 我得到的具体错误是 注册控制器中的命名错误#新增 nil:NilClass的未定义方法“name” 轨迹的顶部是 设计(2.1.2)应用程序/控制器/设计控制器。rb:22:inRuby on rails 3 如何重新路由标准rest操作以设计控制器?,ruby-on-rails-3,devise,controller,Ruby On Rails 3,Devise,Controller,我一直在将Desive构建成一个小的Rails应用程序。这是一个相当标准的设置,但有一个缺点是需要更改此项目的默认身份验证规则。非幂等注册操作必须仅限于经过身份验证的用户 为此,我编写了一个自定义注册控制器,并将其链接到路由中。定制控制器真正要做的就是改变过滤要求。基于Rails控制器过滤,我以最小的努力实现了这一点 但就其本身而言,这只适用于设计特定的操作,如/users/sign\u或/users/edit。我还想将标准Rails操作(/users/new、/users/1/edit等)连接
resource\u name'app/controllers/registrations\u controller.rb:104:in
authenticate\u scope!'
这显然是第一次引用design_映射时发生的。但是根据上面的stackoverflow问题,我还明确提供了Desive_映射的帮助程序,他们甚至没有被调用
有人能解释一下或帮我找出进一步的方向吗
从routes.rb:
Fs::Application.routes.draw do
devise_for :users, :controllers => { :registrations => 'registrations' }
resources :users, :except => [:index, :show], :controller => 'registrations'
resources :users, :only => [:index, :show]
[……]
rake routes报告:
new_user_session GET /users/sign_in(.:format) devise/sessions#new
user_session POST /users/sign_in(.:format) devise/sessions#create
destroy_user_session DELETE /users/sign_out(.:format) devise/sessions#destroy
user_password POST /users/password(.:format) devise/passwords#create
new_user_password GET /users/password/new(.:format) devise/passwords#new
edit_user_password GET /users/password/edit(.:format) devise/passwords#edit
PUT /users/password(.:format) devise/passwords#update
cancel_user_registration GET /users/cancel(.:format) registrations#cancel
user_registration POST /users(.:format) registrations#create
new_user_registration GET /users/sign_up(.:format) registrations#new
edit_user_registration GET /users/edit(.:format) registrations#edit
PUT /users(.:format) registrations#update
DELETE /users(.:format) registrations#destroy
users POST /users(.:format) registrations#create
new_user GET /users/new(.:format) registrations#new
edit_user GET /users/:id/edit(.:format) registrations#edit
user PUT /users/:id(.:format) registrations#update
DELETE /users/:id(.:format) registrations#destroy
GET /users(.:format) users#index
GET /users/:id(.:format) users#show
我的注册\u controller.rb:
class RegistrationsController < Devise::RegistrationsController
prepend_before_filter :authenticate_scope!, :except => [:index, :show]
skip_filter :require_no_authentication
end
使用:
轨道3.2.6
Ruby 1.9.3
设计2.1.2
更新:粘贴到正确的跟踪输出中。因此一种解决方案似乎是添加
devise_scope :user do
get '/users/new' => 'registrations#new'
end
进入routes.rb。这可能不是最好的答案,但它是有效的。因此,一个解决方案似乎是添加
devise_scope :user do
get '/users/new' => 'registrations#new'
end
进入routes.rb。这可能不是最好的答案,但它是有效的