Rails集合不包含新记录

时间:2013-05-23 21:37:49

标签: ruby-on-rails

在我的控制器中,我正在设置一条新记录和一组记录。如何从集合中删除new_record?

def index
  @note = @user.notes.build
  @notes = @user.notes
end

不幸的是,当我不想要它时,我会得到一个空的Note记录。

更新

class NotesController < ApplicationController

  before_action :get_user

  def index
    prepare_notes
  end

  private

  def prepare_notes
    @notes = @user.notes
    @note = @user.notes.build
  end

  def get_user
    @user = current_user
  end

end

2 个答案:

答案 0 :(得分:1)

正如您在docs所看到的,它会创建一个新的空对象。如果您更改行的顺序:

def index
  @notes = @user.notes
  @note = @user.notes.build
end

在@notes变量中你会得到实际的音符。

答案 1 :(得分:1)

您正在此处构建空记录:@note = @user.notes.build

当您在两行中的任何一行中调用@user.notes时,AR会缓存生成的集合。因此,在两行代码中,它返回相同的集合对象。调用build方法时,新的空Note对象将添加到此同一集合中。因此,无论您将这些代码行放入何种顺序,您都会看到新的空Note

如果您有双向关系设置,则可以创建新笔记并将用户分配给它:

def index
  @note = Note.new(user: @user)
  @notes = @user.notes
end

这会创建一个新的Note并设置它的内部用户参考。但是,它不会使用此关联修改用户对象。

如果您不打算在视图中使用@note.user引用,则可以将附件删除给用户,然后只有@note = Note.new。根据您是否允许用户为其他用户创建备注,#create操作可以在此时设置用户。