【问题标题】:How do I arrange Rails model items into columns when I only want certain items which meet a condition?当我只想要满足条件的某些项目时,如何将 Rails 模型项目排列成列?
【发布时间】:2018-03-08 13:26:26
【问题描述】:

我有一个我去过的地点的 Rails 模型。每个位置都有一个与我访问过的 5 个区域之一相关的区域 ID。因此,例如,位置“柏林墙”将具有 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重复很多代码,并且
  • 似乎只有切片中的两个位置(location 和 locationb)具有相同的区域 ID 时才会显示位置。

非常感谢您的帮助:)

【问题讨论】:

  • 你是如何从控制器中填充@locations 数组的?尝试使用位置和区域表连接查询以获取数据,这样您就可以避免在视图中检查if condition

标签: html ruby-on-rails ruby


【解决方案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 才能使上述内容生效

【讨论】:

  • ****我的位置 db:table 已经有一个 region_id。现在看起来这些位置没有被加载到浏览器中,尽管它没有给我任何错误。我觉得我的 Locations 迁移文件中缺少一些东西。我不会添加类似的内容: t.belongs_to :regions
猜你喜欢
  • 2013-01-06
  • 1970-01-01
  • 2013-06-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-11-23
相关资源
最近更新 更多