ruby-on-rails - 呈现传递局部变量的模板时出现问题

标签 ruby-on-rails ruby templates ruby-on-rails-3 rendering

我正在运行 Ruby on Rails 3,我想呈现一个传递局部变量的模板 (show.html.erb)。

RAILS_ROOT/views/users/show.html.erb 我有

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

我还有一个页面 Controller 来处理页面,在 application_controller.rb 中有一个 @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 mistakely be 4 -- 如果你真的想要 nil 的 id,使用 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 }

但那些不起作用。


更新

如果在 pages_controller.rb 我把这个

def user
  @user ||= @current_user
end

它会工作并且在你可以直接使用的 View 文件中

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

无论如何,我发现我有这个错误(更多信息见下文):

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

错误是从位于从 show.html.erb 加载的部分中的此 form 语句生成的:

<%= form_for(@user, :url => user_path) do |f| %>
  ...
<% end %>

最佳答案

:locals => { :user => @current_user }

在模板中

Name: <%= user.name %>

局部变量是局部的,所以你不需要@来引用它们。

@user502052
您可以从您的 Controller 显式呈现 View 。

render :template => "users/show", :locals => {...}

当您不在 Controller 中执行 render 时,框架会使用默认参数为您执行此操作。当您这样做时,您可以指定不同的模板文件、传递局部变量、呈现部分:render 函数支持的任何内容。

关于ruby-on-rails - 呈现传递局部变量的模板时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5020553/

相关文章:

javascript - Bootstrap : 'TypeError undefined is not a function' /'has no method ' tab'' when using bootstrap-tabs

ruby-on-rails - 如何按字母顺序和数字对标题进行排序?

c++ - 为什么 std::list 可以有一个 T 类型的分配器?

ruby - Ruby 元编程方法列表?

ruby-on-rails - 进一步改进 Active Record/Postgresql 查询

c++ - 根据类模板参数值禁用成员函数

json - Azure ARM 内联 IF 不工作

javascript - React-Rails - 入门问题

java - MultipartEntityBuilder 将图片发送到铁路服务器

ruby - 为什么从类中调用setter方法时可以更改方法名称?