【问题标题】:Render partial from controller and from view从控制器和视图渲染部分
【发布时间】:2015-08-01 10:21:39
【问题描述】:

在我的 Rails 应用程序中,我可以从一个控制器和另一个 erb 文件中渲染一个 erb 文件,如下所示:

# a_controller.rb
class AController < ApplicationController
def index
    render 'lista'
end

# b_controller.rb
class BController < ApplicationController
def index
    render 'listb'
end

# lista.html.erb
<%= render 'list' %>

# listb.html.erb
Some content that I want to keep
<%= render 'list' %>

# _list.html.erb
Hello

如您所见,lista 仅呈现部分_list。 我想做的是从listb.html.erb 内部调用&lt;%= render 'lista' %&gt;。 但是当我这样做时,我收到一条错误消息,指出未找到部分 _lista

你有什么想法吗?

【问题讨论】:

    标签: ruby-on-rails ruby render partials


    【解决方案1】:

    lista.html.erb 是一个页面,而不是部分。您的代码正在寻找一个名为 lista 的部分代码,但它不存在。

    我真的认为你应该创建一个名为_lista 的新部分,你可以在lista.html.erblistb.html.erb 中渲染它。你的控制器仍然可以render 'lista' 渲染部分_lista

    【讨论】:

    • 我所有的文件都在application 文件夹中,我已经看到这样可以在不指定文件夹的情况下访问它们...
    • 其实,lista 并不是一个局部的。您正在考虑您的页面lista.html.erb。这就是您收到错误的原因。我更新了我的答案。
    • 是的那 3 个,因为我在不同的地方使用它们
    • 嘿@Nobe4,很酷,我更新了我的答案。 lista 不是局部的。
    【解决方案2】:

    您应该创建一个名为 _lista.html.erb 的部分文件,或者您可以将文件名从 lista.html.erb 更改为 _lista.html。 erb

    当前文件 lista.html.erb 不是部分文件,这就是为什么当您尝试渲染 lista 部分文件时,rails 会为您生成错误

    #lista.html.erb
    ##assuming list is in lista/list.html.erb 
    <%= render 'lista/list' %>
    

    【讨论】:

    • 如果我想保留页面而不是部分,我可以从视图中渲染它们吗?
    • 我不认为你可以像你说的那样这样做。您应该根据 rails norm 使用 partial 来渲染 rails 中的数据。
    【解决方案3】:

    您需要创建_list.html.erb 部分(任何文件名)文件以在@​​987654322@ 或listb.html.erb 中访问它,然后您可以随意访问。

    例如:-

    # lista.html.erb
    <%= render 'listb' %>
    

    lista.html.erb 中,我们可以调用当前目录中的listb (_listb.html.erb) 文件。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-04-14
      • 1970-01-01
      • 2015-04-04
      • 2011-12-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-06-05
      相关资源
      最近更新 更多