在 rails 视图中打印多维数组

Posted

技术标签:

【中文标题】在 rails 视图中打印多维数组【英文标题】:Print multidimensional array in rails views 【发布时间】:2014-05-05 16:33:09 【问题描述】:

在我的控制器中我这样做:

@categories = Category.all
for i in @categories.min.id..@categories.max.id
   @allposts.push(Post.where(:Category => i))
end

在视图中(haml)我愿意

<% @allposts.each do |posts, slots| %>
  <% @slots.each do |post| %>
    <%= post.Title %>
  <% end %>
<% end %>

我看到了这个错误:

undefined method `each' for nil:NilClass on @slots.each do |post|.

提前谢谢你。

【问题讨论】:

你为什么一直尝试使用@slots?在您创建为|posts, slots|的块内... @Saska 如果Category 与模型Post1-M relationship 相关联,那么您可以简单地循环@categories 就像@categories.each do |category| category.posts 以获取与给定关联的所有帖子类别。为什么要制作多维数组并将其复杂化? 【参考方案1】:

你还没有在方法中定义@slots。也许你的意思是slots

<% @allposts.each do |posts, slots| %>
  <% slots.each do |post| %>
    <%= post.Title %>
  <% end %>
<% end %>

【讨论】:

【参考方案2】:

修正是:

<% @allposts.each do |posts, slots| %>
  <% slots.each do |post| %>  # <--- see I removed @ symbol
    <%= post.Title %>
  <% end %>
<% end %>

您的块变量是slots,您尝试使用@slots。我认为这是一个错字。由于没有定义这样的@slots 变量,所以当你想使用它时,你得到了nil。局部变量和实例变量之间有一个甜蜜的区别。如果你没有在任何地方定义一个局部变量,比如foo,如果你想在其他任何地方使用foo,你最终会得到未定义的局部变量或方法。但是对于实例变量,没有错误,你会默默得到nil

【讨论】:

比你的答案落后 41 秒 :) @Pavan 是的.. 可能会少 10 秒.. 我的鼠标右键不起作用.. :)

以上是关于在 rails 视图中打印多维数组的主要内容,如果未能解决你的问题,请参考以下文章

遍历多维数组并打印所有可能性

有没有办法在java中的多维数组中反转特定数组?

main() 打印出与paint() 不同的多维数组的值

在表视图内的集合视图中传递多维数组

如何在PHP中调用和打印“多维数组函数”?

C 语言数组 ( 多维数组本质 | n 维数组名称本质 是 n-1 级数组指针 )