Я использую Ruby on Rails 3, и я хотел бы отобразить шаблон (show.html.erb
), передающий локальную переменную.
В RAILS_ROOT/views/users/show.html.erb
У меня
Name: <%= @user.name %>
Surname: <%= @user.surname %>
Iтакже есть контроллер страниц для обработки страниц и в application_controller.rb
istance @current_user
.Страница называется user
, поэтому в RAILS_ROOT/views/pages/user.html.erb
у меня есть
<%= render :template => "users/show", :locals => { :user => @current_user } %>
Приведенный выше код не работает (я получаю эту ошибку: RuntimeError in Pages#user, Called id for nil, which would mistakenly be 4 -- if you really wanted the id of nil, use 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"}
Ошибка генерируется из этого оператора form , расположенного в частично загруженном из show.html.erb
:
<%= form_for(@user, :url => user_path) do |f| %>
...
<% end %>