Rails:“每次操作”循环显示一个元素,该元素不应存在

时间:2018-09-14 13:40:09

标签: ruby-on-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 %>

enter image description here

问题出在哪里?

编辑:

这是我的控制人:

  def show
    @new_session = @course.sessions.build
  end

EDIT2:

使用<% .. %>

时也会发生此问题
  @course.sessions.count: <%= @course.sessions.count %><br>
  <% @course.sessions.each do |session| %>
    <hr>
      Topic: <%= session.topic %><br>
    <hr>
  <% end %>

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

1 个答案:

答案 0 :(得分:1)

在您的控制器上,您可以执行以下操作:

@new_session = @course.sessions.build

这会实例化一个与课程关联的新的空会话对象,并且在您进行@course.sessions.each时会被迭代。

@course.sessions.count不会计算该空对象,我想它实际上是在进行计数查询,因此新的会话对象尚未计数,因为它尚未在数据库中。

我想你可以做类似的事情

<% @course.sessions.reload.each do |session| %>

忽略最近建立的会话