【问题标题】:Trouble on loading multiple partial templates in a view在视图中加载多个部分模板时遇到问题
【发布时间】:2011-06-16 08:22:52
【问题描述】:

我正在使用 Ruby on Rails 3.0.7,我想了解如何处理以下情况以避免在加载视图时覆盖 istance 变量 @photo

在我的视图文件中,我有:

<div>
  <%=
    render :partial => 'user/photos',
           :locals  => {
             :photo => @photo = 'test_photo1.jpg',
           }
  %>
</div>

<div>
  <%=
    render :partial => 'user/photos',
           :locals  => {
             :photo => @photo = 'test_photo2.jpg',
           }
  %>
</div>

如果我加载上面的视图,我会在输出时出现奇怪的行为。这表明@photo 类在页面加载时被覆盖(被第二个渲染语句)。当然,如果我只进行一次渲染,一切都可以。

如何解决上述问题才能正确传递变量?

注意:我无法更改 @photo 名称。也就是说,两个部分模板必须相同。


我也试过这个版本,只是删除了@photo 变量

<div>
  <%=
    render :partial => 'user/photos',
           :locals  => {
             :photo => 'test_photo1.jpg',
           }
  %>
</div>

<div>
  <%=
    render :partial => 'user/photos',
           :locals  => {
             :photo => 'test_photo2.jpg',
           }
  %>
</div>

但这仍然行不通。

【问题讨论】:

    标签: ruby-on-rails ruby ruby-on-rails-3 class partial-views


    【解决方案1】:
    <div>
      <%=
        render :partial => 'user/photos',
               :locals  => {:photo = 'test_photo2.jpg'}
      %>
    </div>
    

    试试看,我不知道你为什么有:photo =&gt; @photo = 'test_photo2.jpg'

    另见Rails guides on partials。它们确实让您能够很好地掌握基础知识。

    【讨论】:

    • @Devin M - 我需要在部分模板中使用“@photo”变量。 ':photo' 接缝在局部中不可访问。
    • 然后在调用中使用@photo而不是:photo
    • 你想作为局部变量传入什么?
    • @Devin M - 我试图传递一个变量以便在部分模板中使用它,但它会在加载\渲染主视图时接缝该变量被覆盖(通过第二个渲染语句) 以便出现不需要的行为。
    • 它应该一个接一个地渲染,并使用你传入的本地变量。如果您传入不同的本地变量,那么您将得到渲染。基本上,您调用一次渲染,它会渲染您传递给它的内容。你再次调用它,它会呈现你传递给它的新东西。
    猜你喜欢
    • 2013-10-12
    • 2012-09-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多