Rails d'erreur resource_name - mise en place de l'aide de routage et de rendu
Je suis en train d'essayer de rendre la vue login pour le Concevoir gem mais j'obtiens une erreur, ci-dessous le code que j'ai actuellement:
C'est mon views/users/shared/_links.html.erb
:
<%- if controller_name != 'sessions' %>
<%= link_to "Sign in", new_session_path(resource_name) %><br />
<% end -%>
<%- if devise_mapping.registerable? && controller_name != 'registrations' %>
<%= link_to "Sign up", new_registration_path(resource_name) %><br />
<% end -%>
<%- if devise_mapping.recoverable? && controller_name != 'passwords' %>
<%= link_to "Forgot your password?", new_password_path(resource_name) %><br />
<% end -%>
<%- if devise_mapping.confirmable? && controller_name != 'confirmations' %>
<%= link_to "Didn't receive confirmation instructions?", new_confirmation_path(resource_name) %><br />
<% end -%>
<%- if devise_mapping.lockable? && resource_class.unlock_strategy_enabled?(:email) && controller_name != 'unlocks' %>
<%= link_to "Didn't receive unlock instructions?", new_unlock_path(resource_name) %><br />
<% end -%>
<%- if devise_mapping.omniauthable? %>
<%- resource_class.omniauth_providers.each do |provider| %>
<%= link_to "Sign in with #{provider.to_s.titleize}", omniauth_authorize_path(resource_name, provider) %><br />
<% end -%>
<% end -%>
Et mon config/routes.rb
:
Densidste::Application.routes.draw do
match 'user/edit' => 'users#edit', :as => :edit_current_user
match 'signup' => 'devise/users#new', :as => :signup
match 'logout' => 'devise/sessions#destroy', :as => :logout
devise_for :users do
get "login", :to => "devise/sessions#new"
end
resources :sessions
resources :users
devise_for :users
resources :aktivs
resources :taggingposts
resources :tags
resources :kommentares
resources :posts
# You can have the root of your site routed with "root"
# just remember to delete public/index.html.
root :to => "public#index"
end
Et dans mon application de mise en page:
<%= render("users/shared/links") %>
J'obtiens l'erreur suivante dans le _links.html.erb
partielle:
NameError in Public#index
Showing C:/Rails/Densidste/app/views/users/shared/_links.erb where line #2 raised:
undefined local variable or method `resource_name' for #<#<Class:0x5db76c0>:0x5db6538>
Extracted source (around line #2):
1: <%- if controller_name != 'sessions' %>
2: <%= link_to "Sign in", new_session_path(resource_name) %><br />
3: <% end -%>
4:
5: <%- if devise_mapping.registerable? && controller_name != 'registrations' %>
Trace of template inclusion: app/views/public/index.html.erb
Rails.root: C:/Rails/Densidste
Enfin, dans mon contrôleur d'application j'ai le texte suivant:
before_filter :resource_name
def resource_name
if user_signed_in?
current_user.name
else
:user
end
end
end
Toute aide serait grandement appréciée, merci!
Vous devez vous connecter pour publier un commentaire.
resource_name
est définie dans le dispositif a généré des contrôleurs. Je ne pense pas que vous pouvez inclure ces liens partagés dans la présentation de l'application, je pense qu'ils sont destinés à une utilisation sur les concevoir des formulaires (inscription,les sessions,les mots de passe,des confirmations,etc), qui sont rendues par concevoir des contrôleurs.Si vous voulez avoir un peu de login/out extraits de code dans chaque page, vous pouvez envisager d'écrire ces liens vous-même. Par exemple, si votre objet que vous utilisez pour concevoir est
user
, vous pouvez écrire ceci:la
resource_name
est juste le Concevoir l'abstraction de la ressource que vous utilisez. Je pense que si vous êtes à faire ce lien, vous savez qui de votre authentifié objets que vous souhaitez connecter en tant que, de sorte que vous pouvez le spécifier explicitement. Vous pourrait également exécuterrake routes | grep sessions
et de voir quel est le nom du chemin d'accès est et de l'utiliser directement. Par exemple:resource_name
est généralement le trait de soulignement version du nom de la classe. Vous pouvez essayer decurrent_user.class.name.underscore
. Cela devrait donneruser
pour un objet de typeUser
oufancy_user
pour un objet de la classe FancyUser.Le problème est que dans votre
routes.rb
fichier de la définition d'une ressource appeléesessions
, concevoir dispose également d'une ressource avec le même nom.La solution est simple, il suffit de retirer le
resources :sessions
à partir du fichier de routes et tout devrait fonctionner.La raison à cela est parce que les rails crée route des aides pour toutes les ressources. De sorte qu'il crée un itinéraire à l'aide appelée new_session_path(format). Mais concevoir crée également une méthode d'aide appelé
new_session_path(resource_name)
. Le dispositif de la version renvoie un chemin d'accèsnew_<resouce_name>_session_path
. En d'autres termes, les aides généré par le fichier de routes remplacer ceux de concevoir.Noter que cela peut aussi arriver si vous faites quelque chose comme:
Dans ce cas, la solution est de remplacer
new_session
etdestroy_session
aveclogin
etlogout
respectivement.