替代每个块以避免为子类别的每个实例打印标题?

时间:2013-06-26 19:07:25

标签: ruby ruby-on-rails-3

我获得了一项任务:有一个静态网页,其中包含已在视图中手动编写的信息。我应该将该信息移动到数据库中,以便我们清除视图。我的问题是我不知道如何以与目前页面完全相同的格式打印该信息。

我要做的是编写一个返回这样的信息的方法(原始格式示例):

<strong>Category1</strong>
<ul class="square_list">
<li>Item1</li>
<li>Item2</li>
 #...etc
</ul>

<strong>Category2</strong>
<ul class="square_list">
<li>Item1</li>
<li>Item2</li>
 #...etc
</ul>

#...etc

最接近我能用自己有限的知识得到这个:

<% Bus.find(10).amenities.each do | amenity | %>
    <strong><%= amenity.category %></strong>
    <ul class="square_list">
    <li><%= amenity.item %></li>
    </ul>
<% end %>

在项目的每个实例上方打印出类别名称。有没有办法让每个块做我想要的,或者我应该使用另一种方法吗?

根据要求,型号信息:

class Bus < ActiveRecord::Base
has_many :bus_amenities
has_many :amenities, :through => :bus_amenities

class BusAmenity < ActiveRecord::Base
belongs_to :bus
belongs_to :amenity

class Amenity < ActiveRecord::Base
has_many :bus_amenities
has_many :buses, :through => :bus_amenities

Amenity(类别:字符串,项目:字符串) BusAmenity只是公共汽车和设施的中间人。

此应用使用Rails 3.0.19和Ruby 1.9.3p327。

如果我没有提供足够的信息请告诉我。

2 个答案:

答案 0 :(得分:1)

除了amenity有单数item之外,你看起来非常合适。如果它是items的集合,那么您的模板可以稍微修改以匹配原始:

<% Bus.find(10).amenities.each do | amenity | %>
    <strong><%= amenity.category %></strong>
    <ul class="square_list">
    <% amenity.items.each do |item| %>
      <li><%= item %></li>
    <% end %>
    </ul>   
<% end %>

答案 1 :(得分:0)

我找到了一个可以做我想要的解决方案,但它看起来很糟糕。我相信那里有更好的解决方案。

所以这就是我想要的,但是为每个类别编写每个块似乎都很啰嗦。

<strong>Category1</strong>
 <% Bus.find(10).amenities.find(:all, :conditions => {:category => "category1" }).each do | amenity | %>
  <ul class="square_list">
   <li><%= amenity.item %></li>
  </ul>
 <% end %>

<strong>Category2</strong>
 <% Bus.find(10).amenities.find(:all, :conditions => {:category => "category2" }).each do | amenity | %>  
  <ul class="square_list">
   <li><%= amenity.item %></li>
  </ul>
 <% end %>