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