Trouble on rendering a template passing a local variable

Я использую Ruby on Rails 3 и хочу визуализировать шаблон ( show.html.erb ), передавая локальную переменную.

В RAILS_ROOT /views/users/show.html.erb У меня есть

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

У меня также есть контроллер страниц для обработки страниц, а в application_controller.rb есть @current_user . Страница называется пользователь , поэтому в RAILS_ROOT / views / pages / user.html.erb у меня

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

Приведенный выше код не работает (я получаю эту ошибку: RuntimeError в Pages # user, названный id для nil, который по ошибке был бы 4 - если вам действительно нужен идентификатор nil, используйте object_id ), но это работает:

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

Я думаю, что это не очень хороший подход , чтобы «перезаписать» переменную @user . Это потому что, например, если мне нужно вспомнить @user после вышеупомянутого оператора render, он больше не будет работать.

Итак, каково решение для визуализации show.html .erb ?


Я тоже пробовал

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

, но они не работают.


ОБНОВЛЕНИЕ

Если в pages_controller.rb я поместил этот

def user
  @user ||= @current_user
end

, он будет работать и в файлах представления вы можете просто использовать

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

В любом случае, я обнаружил, что у меня есть эта ошибка (дополнительную информацию см. ниже):

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

Ошибка генерируется из этого оператора формы , расположенного в частично загруженном из show.html.erb :

<%= form_for(@user, :url => user_path) do |f| %>
  ...
<% end %>
11
задан user502052 16 February 2011 в 19:46
поделиться