我on Rails的3运行Ruby和我想呈现模板(show.html.erb
)传递一个局部变量的模板。麻烦渲染传递一个局部变量
在RAILS_ROOT/views/users/show.html.erb
我
Name: <%= @user.name %>
Surname: <%= @user.surname %>
我也有一个页面控制器来处理页面,并在application_controller.rb
的@current_user
的istance。一个页面被称为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
,它将不再起作用。
那么,什么是为了渲染show.html.erb
的解决方案?
我也
<%= render :template => "users/show", :locals => { @user => @current_user } %>
<%= render :template => "users/show", :locals => { :object => @current_user, :as => @user }
tryed但那些不工作。
UPDATE
如果pages_controller.rb
我把这个
def user
@user ||= @current_user
end
它会工作,并在视图文件,你可以只使用
<%= render :template => "users/show" %>
反正我discoverd我有这个错误(更多信息见下面):
ActionController::RoutingError in Pages#user
No route matches {:action=>"destroy", :controller=>"users"}
从该形式位于部分负载从show.html.erb
语句生成错误:
<%= form_for(@user, :url => user_path) do |f| %>
...
<% end %>
好了,你的代码工作。但是,因为在我看来,我有`@ user`语句(其他控制器依赖于语句`@ user`),所以我需要使用该“格式”。 – user502052 2011-02-16 18:33:29
@ user502052`@ user`是一个全局变量,你不能'本地化'它。我建议以相同的方式从你的控制器传递局部变量。 – 2011-02-16 18:35:38