Ruby on Rails: la Coutume de Concevoir l'Enregistrement Contrôleur, vous Demandant De Créer une Action
J'ai personnalisé l'enregistrement de contrôleur, mais je ne veux pas remplacer une action de créer de concevoir. Lorsque j'essaie d'inscrire un utilisateur, j'ai cette erreur:
Unknown action
The action 'create' could not be found for Devise::RegistrationsController
Est-il le demande parce que j'ai coutume d'inscription contrôleur? Si oui, est-ce à dire que je dois copier toutes les actions que je ne suis pas primordial à partir d'ici: https://github.com/plataformatec/devise/blob/master/app/controllers/devise/registrations_controller.rb
Ou sa parce qu'il ya quelque chose de mal avec ma demande?
Mon parcours:
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
C'est ma concevoir enregistrement contrôleur
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
C'est le formulaire d'inscription:
<%= 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 %>
OriginalL'auteur hellomello | 2013-08-23
Vous devez vous connecter pour publier un commentaire.
Votre contrôleur de l'enregistrement hérite de la mauvaise classe: DeviseController
C'est une classe de base pour l'enregistrement et n'a pas de "créer" la méthode, et le fait de votre personnalisé Concevoir::RegistrationsController classe (il n'a que de modifier et de méthodes de mise à jour) - qu'il engage l'erreur.
Afin de créer votre propre enregistrement contrôleur pour les utilisateurs avec reprise à l'originale de concevoir des méthodes, je vous suggère de ne les suivants:
1. créer dossier "utilisateurs" dans le dossier controllers
2. créer il y registrations_controller.rb fichier, et de définir la classe:
et de redéfinir des actions ("edit" et "mise à jour")
3. informer les "itinéraires.rb" fichier des changements:
en fait, je pense qu'il peut l'être), mais j'ai l'habitude de suivre les rails de conventions de nommage j'ai eu une expérience douloureuse de débogage de telles applications: les erreurs sont ont tendance à être dans des endroits très inattendus et souvent la seule raison, que certains naming convention n'a pas été suivie.
il manque le " s " et la fin de l'enregistrement. Le nom doit être registrations_controller.rb
Pour une personne qui se demandait - contrairement à d'autres mise à jour des routes, vous n'aurez pas de :id param de la route. C'est parce que la classe n'est pas destiné à mettre à jour d'autres utilisateurs, seulement l'utilisateur actuel. Ainsi, lors de la création de liens en vue de la mise à jour de l'utilisateur, vous devez laisser l'id dans edit_user_registrations_path - ie. PAS edit_user_registrations_path(current_user.id)
OriginalL'auteur Roaring Stones