组合2个表,循环结果并显示每个表的项目

时间:2013-11-07 16:10:02

标签: ruby-on-rails ruby ruby-on-rails-3 if-statement each

所以我试图组合两个表并按start_date的顺序显示结果。 我尝试了一些东西,但因为它在技术上是一个嵌套循环,它给我每个项目的双重结果。 我目前的代码如下

<% @subcategory = Subcategory.all %>
<% @product = Product.all %>
<% (@product + @subcategory).each do |product, subcategory|%>
<% if product.display_on_home_page and !product.is_highlight_product and !(product == '..') or subcategory.
display_on_home_page and !subcategory.is_highlight_product and !(subcategory == '..')%>
<div class="column_entry">
<%= link_to image_tag(subcategory.image_attachment.url(:normal_page_size)), subcategories_content_url(subcategory.id), :controller=>'subcategories' %>
</div>
<% end %>
<% if product.price_from %>
<div class="column_entry">
<div class="product_special">
    <span class="a">From Only</span>
    <span class="b"><%= number_to_currency(product.price,:unit=>'€') %></span>
</div>
<%= link_to image_tag(product.product_image.url(:normal_page_size)), products_content_url(product.id), :controller=>'products' %>
</div>
<% else %>
<div class="column_entry">
<div class="product_special">
    <span class="a">Only</span>
    <span class="b"><%= number_to_currency(product.price,:unit=>'€') %></span>
</div>
<%= link_to image_tag(product.product_image.url(:normal_page_size)), products_content_url(product.id), :controller=>'products' %>
</div>
<% end %>
<% end %>

我知道这是一个相当长的复杂陈述,它应该循环遍历所有子类别和所有产品并显示图像,还有两种不同的方式来显示价格基于一个布尔值,表示是否价格是特定金额,或者从给定价格开始。

目前它正在读取循环,但它给了我错误

 undefined method `is_highlight_product' for nil:NilClass

因为这是引用的表中的第一列,并且它在这里打破了,我认为在查看存储在表中的信息的能力方面肯定存在一些冲突。

我仍然对轨道上的红宝石很新,所以任何帮助,甚至只是在正确的方向上轻推都会非常感激。

如果您想了解更多信息,请在评论中提出,我会尽快将其提出来。

1 个答案:

答案 0 :(得分:1)

这里的问题是,当你做这样的事情时:

(@product + @subcategory).each do |product, subcategory|

局部变量product将首先遍历产品,然后通过子类别进行迭代,局部变量subcategory将始终为零。

你能做什么,肮脏的方式 - 检查

if product.is_a?(Product)
  # do your things
elsif product.is_a?(Subcategory)
  # do other things
end