0

在我的控制器中,我正在设置一条新记录和一组记录。如何从集合中消除 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
4

2 回答 2

1

你在这里建立空记录:@note = @user.notes.build

当您调用@user.notes这两行中的任何一行时,AR 正在缓存结果集合。所以在这两行代码中,它都返回了同一个集合对象。当该build方法被调用时,新的空Note对象被添加到同一个集合中。因此,不管你把这些代码行放在什么顺序,你都会看到新的 empty Note

如果您有两种方式的关系设置,您可以创建一个新注释并将用户分配给它:

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

这将创建一个新的Note并设置它的内部用户参考。但是,它还没有修改具有此关联的用户对象。

如果您不打算@note.user在视图中使用引用,则可以将附件拖放给用户,然后将@note = Note.new. 根据您是否允许用户为其他用户创建注释,您的#create操作可以在该点设置用户。

于 2013-05-23T21:44:49.823 回答
1

正如您从文档中看到的那样,它创建了一个新的空对象。如果更改行的顺序:

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

在@notes 变量中,您将获得实际的注释。

于 2013-05-23T21:42:19.040 回答