【问题标题】:Rendering partials for Sets渲染集合的部分
【发布时间】:2013-02-04 23:43:13
【问题描述】:

渲染部分函数是否采用任何类型的集合?我尝试传入一个 Set (@dogs),但它似乎不起作用:

<%= render(:partial => "dog", :collection => @dogs, :as => :dog) %>  

我尝试在文档 http://guides.rubyonrails.org/layouts_and_rendering.html 上查找它,但它似乎并没有暗示对集合有任何限制...是否有我遗漏的东西或其他方法可以找到?

谢谢。

PS 但是当我尝试将非常集合转换为数组时,它起作用了。

【问题讨论】:

    标签: ruby-on-rails-3 partials


    【解决方案1】:

    它不适用于集合,因为PartialRenderer#collection 方法尝试使用to_ary 将集合强制转换为数组:

    def collection
      if @options.key?(:collection)
        collection = @options[:collection]
        collection.respond_to?(:to_ary) ? collection.to_ary : []
      end
    end
    

    但是Sets 没有实现to_ary,所以,正如你所发现的,你必须像这样传递集合:

    :collection => @dogs.to_a
    

    【讨论】:

    • 你会说基本上不使用集合,因为大多数 ruby​​ 代码只知道如何处理哈希/数组?
    【解决方案2】:

    正确的方法是将集合传递给partials

    &lt;%= render partial: "cat", locals: {cats: @cats} %&gt;

    【讨论】:

    • 这是将整个集合传递给部分集合的正确方法。然而,render partial: "cat", collection: @cats 为集合中的每个对象渲染一次部分,这是完全不同的事情。
    猜你喜欢
    • 2015-10-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-24
    • 2014-12-22
    • 2013-03-24
    相关资源
    最近更新 更多