ruby-on-rails - Rails:“每个执行”循环显示一个不应该存在的元素
问题描述
我有一个“每个都做”循环的问题,我不知道它的原因是什么。
Rails 版本:Rails 5.2.1 Ruby 版本:ruby 2.5.1p57(2018-03-29 修订版 63029)[x86_64-linux]
这是我的代码:
<%= @course.sessions.each do |session| %>
<%= session.topic %><br>
<hr>
<% end %>
@course.sessions.count 为 0。该课程没有任何课程。然而,仍然有一些东西:
<%= @course.sessions.each do |session| %> # shows:
[#<Session id: nil, topic: nil, date: nil, description: nil, course_id: 1, created_at: nil, updated_at: nil>]
当我向课程添加会话时,问题仍然存在:
<%= @course.sessions.each do |session| %> # shows:
[#<Session id: 1, topic: "First Session", date: "2018-09-14", description: "First Session", course_id: 1, created_at: "2018-09-14 13:29:30", updated_at: "2018-09-14 13:29:30">, #<Session id: nil, topic: nil, date: nil, description: nil, course_id: 1, created_at: nil, updated_at: nil>]
“每个执行”循环也出现两次。看这张照片
@course.sessions.count: <%= @course.sessions.count %><br>
<%= @course.sessions.each do |session| %>
<hr>
Topic: <%= session.topic %><br>
<hr>
<% end %>
似乎是什么问题?
编辑:
这是我的控制器:
def show
@new_session = @course.sessions.build
end
编辑2:
使用时也会出现问题<% .. %>
@course.sessions.count: <%= @course.sessions.count %><br>
<% @course.sessions.each do |session| %>
<hr>
Topic: <%= session.topic %><br>
<hr>
<% end %>
循环发生了两次,尽管其中只有一个会话。
解决方案
问题是您在这里有一个课程的会话构建:
def show
@new_session = @course.sessions.build
end
即您将一个新会话放入您的@course.sessions
收藏中,这就是您看到的原因#<Session id: nil, topic: nil, date: nil, description: nil, course_id: 1 ...>
,这对您来说是出乎意料的。
以下代码将帮助您避免此类问题:
def show
@new_session = Session.new(course: @course)
end
推荐阅读
- css - 升级到 Chrome 72 后是否有人遇到布局问题?
- react-native - 领域:“数组”类型的属性“虚拟”不能为空
- c++ - 自定义独立 printf 仅显示一个字母和随机大写 S
- html - 如何使用 CSS 管理 HTML 元素压缩
- javascript - 使用 vue.js 存储对象的元素
- java - Jenkins、Gradle 和“神器”是如何联系在一起的?
- c# - SpecFlow 在同一个或多个测试代理中并行执行
- javascript - 按字母顺序对 ToDoList 排序 - 已完成或未完成的任务
- r - 如何使用 dplyr 创建需要超过 50 个不同因子值的列
- java - 在 JAVA 中使用 XSLT 转换 XML