首页 > 解决方案 > 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 %>

循环发生了两次,尽管其中只有一个会话。

标签: ruby-on-rails

解决方案


问题是您在这里有一个课程的会话构建:

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

推荐阅读