La difficulté sur l'affichage d'un modèle de passer une variable locale

Je suis en cours d'exécution Ruby on Rails 3 et je voudrais rendre un template (show.html.erb) en passant une variable locale.

Dans RAILS_ROOT/views/users/show.html.erb j'ai

Name: <%= @user.name %>
Surname: <%= @user.surname %>

J'ai également un contrôleur de la page pour gérer les pages et les application_controller.rb un istance de @current_user. Une page est appelée user, donc dans RAILS_ROOT/views/pages/user.html.erb j'ai

<%= render :template => "users/show", :locals => { :user => @current_user } %>

Le code ci-dessus ne fonctionne pas (j'ai cette erreur: RuntimeError in Pages#user, Called id for nil, which would mistakenly be 4 -- if you really wanted the id of nil, use object_id) mais cela fonctionne:

<%= render :template => "users/show", :locals => { :user => @user = @current_user } %>

Je pense que c'est pas une bonne approche à "écraser" le @user variable. C'est parce que, par exemple, si j'ai besoin de rappeler @user après le 'rendu' instruction, elle ne fonctionne plus.

Alors, qu'est ce qu'une solution afin de rendre show.html.erb?


J'ai essayé aussi

<%= render :template => "users/show", :locals => { @user => @current_user } %>
<%= render :template => "users/show", :locals => { :object => @current_user, :as => @user }

mais ceux-ci ne fonctionnent pas.


Mise à JOUR

Si dans pages_controller.rb j'ai mis ce

def user
  @user ||= @current_user
end

de sa mise en œuvre dans la vue fichiers, vous pouvez utiliser

<%= render :template => "users/show" %>

De toute façon, j'ai découvert que j'ai cette erreur (voir ci-dessous pour plus d'infos):

ActionController::RoutingError in Pages#user
No route matches {:action=>"destroy", :controller=>"users"}

L'erreur est généré à partir de ce forme déclaration situé dans un partiel chargé de show.html.erb:

<%= form_for(@user, :url => user_path) do |f| %>
  ...
<% end %>

OriginalL'auteur user502052 | 2011-02-16