J'utilise un joyau de devise pour les procédures sign_in / sign_out.
J'ai généré des fichiers de vues à partir de l'appareil, en utilisant rails g devise views
J'ai vu qu'il y avait un fichier devise / sessions / new.html.erb qui contenait un formulaire pour sign_in.
J'ai créé un autre fichier devise / sessions / _form.html.erb et l'ai fait <%= render 'form' %>
dans un fichier new.html.erb, et cela a très bien fonctionné.
Maintenant, je voulais inclure ce formulaire des différents contrôleurs. Donc, dans un contrôleur appelé «main», (en particulier, dans la page de vue) «mains / index.html.erb» j'ai inclus le <%= render 'devise/sessions/form' %>
fichier. Il semble que l'inclusion a bien fonctionné, mais j'obtiens l'erreur suivante.
NameError in Mains#index
Showing /home/administrator/Ruby/site_v4_ruby/app/views/devise/sessions/_form.html.erb where line #1 raised:
undefined local variable or method `resource' for #<#<Class:0x007f1aa042d530>:0x007f1aa042b870>
Extracted source (around line #1):
1: <%= form_for(resource, :as => resource_name, :url => session_path(resource_name)) do |f| %>
2: <p><%= f.label :email %><br />
3: <%= f.text_field :email %></p>
4:
Il semble que la partie form_for (resource, ...) soit à l'origine du problème (ce qui fonctionne bien si je suis sur la page sign_in du périphérique d'origine ... Comment puis-je résoudre ce problème de manière rails?
Personnellement, je préfère utiliser la fonction «render» pour inclure le formulaire, plutôt que d'écrire des codes html en ligne.
Dois-je spécifier quelque chose (ressource) dans le contrôleur «principal»?
J'apprécierai votre aide. Je vous remercie.
la source
Réponses:
Comme le dit Andres, le formulaire appelle des helpers qui sont spécifiés par Devise et qui ne sont donc pas présents lorsque vous accédez à un formulaire Devise à partir d'un contrôleur non-Devise.
Pour contourner ce problème, vous devez ajouter les méthodes suivantes à la classe d'assistance du contrôleur sous lequel vous souhaitez afficher le formulaire. Alternativement, vous pouvez simplement les ajouter à votre assistant d'application pour les rendre disponibles n'importe où.
Source: http://pupeno.com/blog/show-a-devise-log-in-form-in-another-page/
la source
inherited_resources
.helper_method :resource_name, :resource_class, :resource, :devise_mapping
(cela:resource_class
semble être une exigence dans les nouvelles versions de Devise).Peut essayer ceci aussi ... cochez cette question .
La source
la source
Le formulaire que vous avez créé fonctionne lorsqu'il est rendu à partir d'un contrôleur Devise car la "ressource" est définie via Devise. Jetez un œil à l'implémentation de Devise SessionsController - d'après ce que je comprends, vous essayez de répliquer la "nouvelle" action. La méthode "build_resource" est probablement ce que vous recherchez.
La gemme Warden est la provenance des objets «ressources». Si vous souhaitez creuser plus profondément, ce serait l'endroit où chercher.
la source
Pour affiner la réponse acceptée, nous utilisons cet assistant pour autoriser différents types de ressources:
où
admin_controller?
est quelque chose d'avant dans laApplicationController
gestion des redirections de connexion:la source
J'obtenais la même erreur que
undefined local variable or method "resource"
vous décrivez de l'un de mes contrôleurs, car ma classe de base de contrôleur manquait ce qui suit (Rails-API ActionController :: API était en faute):Ainsi, les méthodes d'assistance de Devise n'ont pas pu être résolues dans la vue.
Pour que Devise fonctionne avec Rails-API, je devais inclure:
la source