gpt4 book ai didi

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

转载 作者:数据小太阳 更新时间:2023-10-29 06:45:40 24 4
gpt4 key购买 nike

我正在运行 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com