当我只想要符合条件的某些项目时,如何将Rails模型项目排列到列中?

时间:2018-03-08 01:28:19

标签: html ruby-on-rails ruby

我有一个我访问过的Rails模型。每个位置都有一个区域ID,属于我访问过的5个区域之一。因此,例如,位置"柏林墙"会有region_id ="欧洲"。

在浏览网站时,首先会看到显示的5个区域(我也有区域模型)。如果单击某个区域,则下一页将显示与该区域关联的所有位置。

所以,我需要打电话给所有的位置,但只有这些位置' region_id与给定区域相同。但是,我不确定如何执行此操作(使用.each方法),同时还将这些位置拆分为2列。

这是我目前拥有的html和ruby代码。请注意,它非常混乱,需要大量重复:

   <div class="container-fluid">
<% @locations.each_slice(2) do |location, locationb| %>
  <% if location.region_id.to_s.downcase == @region.name.downcase && locationb.region_id.to_s.downcase == @region.name.downcase %>
      <div class="row">
        <div class="col-md-6">
          <a href="/regions/<%=@region.name%>/<%=location.id%>">
          <h4 class="media-heading">|    <%=location.caption %> </h4>
          <img class="media-object" src="<%=location.image_url%>" alt="..." width = 400>
          </a>
          <p>|    <b>Date Visited:</b>   <%= location.date %>  |  <b>Near:</b> <%= location.nearest_area %></p>
          <a href="/regions/<%=@region.name%>/<%=location.id%>" class = "btn btn-primary">View</a>
          <a href="/<%=@region.name%>/<%=location.id%>/edit" class = "btn btn-warning">Edit</a>
          <a href="/<%=@region.name%>/destroy_warning/<%=location.id%>" class = "btn btn-danger">Destroy</a>
        </div>
        <div class="col-md-6">
          <a href="/regions/<%=@region.name%>/<%=locationb.id%>">
          <h4 class="media-heading">|    <%=locationb.caption %> </h4>
          <img class="media-object" src="<%=locationb.image_url%>" alt="..." width = 400>
          </a>
          <p>|    <b>Date Visited:</b>   <%= locationb.date %>  |  <b>Near:</b> <%= locationb.nearest_area %></p>
          <a href="/regions/<%=@region.name%>/<%=locationb.id%>" class = "btn btn-primary">View</a>
          <a href="/<%=@region.name%>/<%=locationb.id%>/edit" class = "btn btn-warning">Edit</a>
          <a href="/<%=@region.name%>/destroy_warning/<%=locationb.id%>" class = "btn btn-danger">Destroy</a>

        </div>
      </div>

    <%end%>
   <%end%>
  </div>

你可以忽略很多这段代码 - 我的问题在于第1-6行。问题在于使用.each_slice方法,

  • 我必须为locationb和
  • 重复很多代码
  • 似乎仅当切片中的两个位置(位置和位置b)具有相同的区域ID时才显示位置。

非常感谢帮助:)

1 个答案:

答案 0 :(得分:1)

您应该查看关联:http://guides.rubyonrails.org/association_basics.html

实质上,在Location模型中,您可以添加以下内容:

belongs_to :region

Region模型中,您可以添加以下内容:

has_many :locations

然后你可以这样做:

@region = Region.find_by(region_id: 'europe')
@locations = @region.locations

以上内容将为您提供属于“欧洲”地区的所有地点。

要记住以上内容的一个重要事项,您需要在您的位置数据库表中添加region_id以使上述工作