Я использую 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 %>