我在“每次执行”循环时都遇到问题,我不知道是什么原因。
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
EDIT2:
使用<% .. %>
@course.sessions.count: <%= @course.sessions.count %><br>
<% @course.sessions.each do |session| %>
<hr>
Topic: <%= session.topic %><br>
<hr>
<% end %>
该循环发生了两次,尽管其中只有一个会话。
答案 0 :(得分:1)
在您的控制器上,您可以执行以下操作:
@new_session = @course.sessions.build
这会实例化一个与课程关联的新的空会话对象,并且在您进行@course.sessions.each
时会被迭代。
@course.sessions.count
不会计算该空对象,我想它实际上是在进行计数查询,因此新的会话对象尚未计数,因为它尚未在数据库中。
我想你可以做类似的事情
<% @course.sessions.reload.each do |session| %>
忽略最近建立的会话