我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