【问题标题】:Rails 6: Render a partial if only I'm using a method from my controllerRails 6:如果我只使用控制器中的方法,则渲染部分
【发布时间】:2020-01-21 08:28:18
【问题描述】:

我有一个用户控制器,带有indexshoweditdestroy 方法。在我的 layouts/ 文件夹中,我有一个通用的 user.html.erb 布局,可以呈现一些部分。由于某些信息不可用,这些部分当然会产生错误,例如@user.name。当我处于def show 状态时,我尝试始终渲染该部分,例如:

<% if Users.show %>
<% render "shared/asides/users" %>
<% else %>
Other partials
<% end %>

我尝试了多种方法,但总是出错。即使试图在 Rails 文档中找到这一点,我也感到完全迷失,那里似乎也没有任何说明。

【问题讨论】:

  • 布局必须是通用的东西,不需要检查当前操作。你的布局有,或者至少应该有一行= yield,这就是当前操作的视图所在的地方。所以如果你有views/users/show.html.erb,它会自动插入到布局中的yield的位置

标签: ruby-on-rails render partial-views ruby-on-rails-6


【解决方案1】:

您的问题是,正如您所说,您试图显示与用户相关的内容,例如 @user.name,但没有 @user。

那么为什么不在显示部分之前检查@user 呢?或者如果你有一组用户,我猜是@users?

<% if @users %>
  <%= render "shared/asides/users" %>
<% else %>
  <%= Do something else %>
<% end %>

也许有点整洁:

<%= render (@users ? path/to/partial_a.html.erb : path/to/partial_b.html.erb) %>

【讨论】:

    【解决方案2】:

    您可以为您的动作制作一个特殊的布局。然后,在操作结束时添加要渲染的布局。

    def show
      ...
      render layout: "custom_layout"
    end
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-08-19
      • 2014-01-12
      • 2014-11-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多