Ruby on rails Rails4:如何仅显示一次值

Ruby on rails Rails4:如何仅显示一次值,ruby-on-rails,ruby,ruby-on-rails-4,Ruby On Rails,Ruby,Ruby On Rails 4,我只想显示一次房间名称。 总结如下: 文章表 id day start_time title 2 1 09:00 Math 4 2 10:00 English 5 1 11:00 Science 8 3 12:00 Physics 9 2 13:00 Music 房间桌子 id day name 3 1 classA 6 2 classB 7 3 classC 我希望在视图中显示以下数据: Da

我只想显示一次房间名称。 总结如下:

文章表

id day start_time title
2  1   09:00      Math
4  2   10:00      English
5  1   11:00      Science
8  3   12:00      Physics
9  2   13:00      Music
房间桌子

id day name
3  1   classA
6  2   classB
7  3   classC
我希望在视图中显示以下数据:

Day1
09:00 Math
11:00 Science
Room classA

Day2
10:00 English
13:00 Music
Room classB
请告诉我如何显示上述值。 房间名称每次都显示在下面的代码中

视图代码

<div class="row">
  <% @article.group_by(&:day).each do |day, articles| %>
    <h3>Day <%= day %></h3>

    <% articles.each do |a| %>
      <%= a.start_time %>
      <% a.category %>
      <%= a.contents %><br>
      <%= a.matching_detail.try(:name) %><br> #I'd like to display only one time
    <% end %>

  <% end %>
</div>

我会尽力帮助:

控制器

在本节中,您需要选择只需要的字段。然后,将项目表与房间连接起来

@articles = Article.select("articles.id, articles.title, articles.contents, articles.category, articles.created_at, rooms.name AS room_name").joins(:rooms).group_by{|x| [x.created_at, x.room_name]}
模型

删除匹配的\u详细信息方法,因为您不需要此方法。它的方法将加载循环中的数据,所以我将很长时间加载您的数据

看法

为了便于查看,您必须编辑一些代码,以便在下面显示

<div class="row">
  <% @articles.each do |data, articles| %>
    <h3>Day <%= data[0] %></h3>
    <% articles.each do |a| %>
      <%= a.start_time %>
      <% a.category %>
      <%= a.contents %><br>
    <% end %>
    <%= data[1] %><br> #I'd like to display only one time
  <% end %>
</div>
注: 数据[0]表示日期,数据[1]表示房间名称
我希望这对您有所帮助。

我通过以下方式重新创建了您的rails项目:

rails新学校调度器 从您的问题中添加了架构文件 rails db:schema:load 添加您的模型文件-文章和房间 在db/seeds.rb中添加测试数据以填充数据库,请参见下文 然后我做了一些改变:

为学校添加了脚手架:rails g scaffold School title:string必须删除添加到db/migrate的迁移文件 更新了学校模型,见下文 更新了school view show.html.erb,见下文 然后我测试了一下:

点燃的铁轨 导航到 单击要显示的内容的“显示” 瞧! db/seeds.rb

School.delete_all

School.create(id: 1, title: "The One You Want To Show")
School.create(id: 2, title: "Some Other School")

Article.delete_all

Article.create(id: 2, school_id: 1, day: 1, start_time: "09:00", title: "Math")
Article.create(id: 4, school_id: 1, day: 2, start_time: "10:00", title: "English")
Article.create(id: 5, school_id: 1, day: 1, start_time: "11:00", title: "Science")
Article.create(id: 8, school_id: 2, day: 3, start_time: "12:00", title: "Physics")
Article.create(id: 9, school_id: 1, day: 2, start_time: "13:00", title: "Music")

Room.delete_all

Room.create(id: 3, school_id: 1, day: 1, name: "classA")
Room.create(id: 6, school_id: 1, day: 2, name: "classB")
Room.create(id: 7, school_id: 2, day: 3, name: "classC")
app/models/school.rb

class School < ActiveRecord::Base
  has_many :rooms
  has_many :articles

  def days
    self.articles.pluck(:day).uniq
  end
end

您是否考虑过在数据库中执行视图/函数,以返回已过滤/分组/排序的数据?如果有大量数据,在查看时分组/显示往往会使服务器延迟。感谢您的评论,@Oscar Valdez Esquea。如果你能给我一些线索,我将不胜感激。虽然我尝试了一些代码,但它不起作用。谢谢你的评论,@Muhamad Akbar Bin Wid。虽然我试过你的建议,但我做不到。房间的名称显示在文章数据之后,例如09:00数学课11:00科学课。我想做的是显示最后一节课,比如09:00数学11:00科学课。如果您能给我一个提示,我们将不胜感激。谢谢您的更新,@Muhamad Akbar Bin Widayat。结果是一样的。虽然我在我的示例文章和房间表中写的id和日期的数量是相同的,但它们实际上是不同的。这和我的问题有关吗?“我更新了问题中的样本表。谢谢你的明确解释,@alexanderbird。”。它起作用了!
School.delete_all

School.create(id: 1, title: "The One You Want To Show")
School.create(id: 2, title: "Some Other School")

Article.delete_all

Article.create(id: 2, school_id: 1, day: 1, start_time: "09:00", title: "Math")
Article.create(id: 4, school_id: 1, day: 2, start_time: "10:00", title: "English")
Article.create(id: 5, school_id: 1, day: 1, start_time: "11:00", title: "Science")
Article.create(id: 8, school_id: 2, day: 3, start_time: "12:00", title: "Physics")
Article.create(id: 9, school_id: 1, day: 2, start_time: "13:00", title: "Music")

Room.delete_all

Room.create(id: 3, school_id: 1, day: 1, name: "classA")
Room.create(id: 6, school_id: 1, day: 2, name: "classB")
Room.create(id: 7, school_id: 2, day: 3, name: "classC")
class School < ActiveRecord::Base
  has_many :rooms
  has_many :articles

  def days
    self.articles.pluck(:day).uniq
  end
end
<p id="notice"><%= notice %></p>

<p> 
  <strong>Title:</strong>
  <%= @school.title %>
</p>

<% @school.days.each do |d| %>

  <h3>Day<%= d %></h3>

  <% @school.articles.where(day: d).each do |a| %>
    <%= a.start_time %>
    <%= a.title %><br>
  <% end %>

  <p>Room <%= @school.rooms.where(day: d).first.name %></p>  

<% end %>

</br>
<%= link_to 'Edit', edit_school_path(@school) %> |
<%= link_to 'Back', schools_path %>
class Article < ActiveRecord::Base
  belongs_to :school
end

class Room < ActiveRecord::Base
  belongs_to :school
end