在我的控制器中,我正在设置一条新记录和一组记录。如何从集合中删除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
答案 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
操作可以在此时设置用户。