Ruby on rails RubyonRails:定制设计注册控制器,请求创建操作
我有一个自定义注册控制器,但我不想覆盖Desive的创建操作。当我尝试注册用户时,出现以下错误:Ruby on rails RubyonRails:定制设计注册控制器,请求创建操作,ruby-on-rails,ruby-on-rails-3,ruby-on-rails-3.1,devise,ruby-on-rails-3.2,Ruby On Rails,Ruby On Rails 3,Ruby On Rails 3.1,Devise,Ruby On Rails 3.2,我有一个自定义注册控制器,但我不想覆盖Desive的创建操作。当我尝试注册用户时,出现以下错误: Unknown action The action 'create' could not be found for Devise::RegistrationsController 是因为我有一个自定义注册控制器才要求它的吗?如果是,这是否意味着我需要从这里复制我没有覆盖的所有操作: 还是因为我的申请有问题 我的路线: devise_for :user, :controllers =>
Unknown action
The action 'create' could not be found for Devise::RegistrationsController
是因为我有一个自定义注册控制器才要求它的吗?如果是,这是否意味着我需要从这里复制我没有覆盖的所有操作:
还是因为我的申请有问题
我的路线:
devise_for :user, :controllers => { :registrations => "devise/registrations" }, :skip => [:sessions] do
get 'signup' => 'devise/registrations#new', :as => :new_user_registration
post 'signup' => 'devise/registrations#create', :as => :user_registration
end
这是我的设计注册控制器
class Devise::RegistrationsController < DeviseController
skip_before_filter :require_no_authentication
def edit
@user = User.find(current_user.id)
@profile = Profile.new
end
def update
# required for settings form to submit when password is left blank
if params[:user][:password].blank? && params[:user][:password_confirmation].blank?
params[:user].delete(:password)
params[:user].delete(:password_confirmation)
end
@user = User.find(current_user.id)
if @user.update_attributes(params[:user])
set_flash_message :notice, :updated
# Sign in the user bypassing validation in case his password changed
sign_in @user, :bypass => true
redirect_to after_update_path_for(@user)
else
render "edit"
end
end
protected
def after_update_path_for(resource)
user_path(resource)
end
def after_sign_up_path_for(resource)
user_path(resource)
end
end
class designe::RegistrationsControllertrue
重定向到(@user)的更新后路径
其他的
渲染“编辑”
结束
结束
受保护的
更新后的def路径(资源)
用户路径(资源)
结束
注册后的def路径(资源)
用户路径(资源)
结束
结束
这是登记表:
<%= form_for(resource, :as => resource_name, :url => registration_path(resource_name)) do |f| %>
...
<div>
<%= button_tag :type => :submit, :class => "btn btn-large btn-inverse" do %>
Sign up
<% end %>
</div>
...
<% end %>
resource_name,:url=>registration_path(resource_name))do | f |%>
...
:提交,:类=>“btn btn大btn反向”do%>
注册
...
您的注册控制器继承自错误的类:DevisionController
它是注册的基类,没有“创建”方法,您的自定义Desive::RegistrationsController类也没有(它只有编辑和更新方法)-它会导致错误
为了为使用原始Desive方法的用户创建自己的自定义注册控制器,我建议您执行以下操作:1.在控制器文件夹中创建“用户”文件夹
2.创建注册\u controller.rb文件,并在其中定义类:
Users::RegistrationsController < Devise::RegistrationsController
这很有效。为什么它不能被设计成文件夹名呢?事实上,我认为可以)但我通常遵循rails命名约定,因为我在调试此类应用程序时有过痛苦的经历:错误往往出现在非常意外的地方,而且往往是唯一的原因,未遵循某些命名约定。@Rowlingstones您缺少“s”和注册结束。名称必须是registrations\u controller.rbf,否则任何人都会想知道-与其他更新路由不同,路由中不会有:id参数。这是因为该类不打算更新其他用户,而只是更新当前用户。因此,在视图中创建链接以更新用户时,您需要在edit_user_registrations_path-即NOT edit_user_registrations_path(当前_user.id))中省略id
devise_for :users, :controllers => { registrations: 'users/registrations' }