联系人has_many notes;笔记属于联系人。在我的笔记控制器中,成功保存笔记后,我使用以下方法重定向到笔记的联系人:
format.html { redirect_to(@note.contact, :notice => 'Note was successfully created.') }
在我的单元测试中,我正在测试创建注释并重定向到注释的联系人视图页面的能力。我的notes.yml fixture只是设置音符,在notes_controller_test.rb的设置部分,我将灯具中的音符分配给@note。
这是实际的测试代码:
test "should create note" do
assert_difference('Note.count') do
post :create, :note => @note.attributes
end
end
我认为该笔记已成功保存,但重定向失败。所以看起来控制器中的redirect_to会抛出“无法重定向到nil!”错误,但我似乎无法理解为什么。
这是我的Notes创建操作:
def create
@note = Note.new(params[:note])
respond_to do |format|
if @note.save
format.html { redirect_to(@note.contact, :notice => 'Note was successfully created.') }
format.xml { render :xml => @note.contact, :status => :created, :location => @note.contact }
else
format.html { render :action => "new" }
format.xml { render :xml => @note.contact.errors, :status => :unprocessable_entity }
end
end
端
答案 0 :(得分:2)
看来你的灯具没有在@note上创建和/或加载联系人。抛出'redirect to nil'是因为@ note.contact返回nil。确保注释的contact_id有效,并且在测试运行之前,该注释是从db及其联系人加载的。
答案 1 :(得分:0)
当我添加我的联系人时,我在声明值时没有指定ID。我只想说:
one:
firstname: John
lastname: doe
我在夹具中添加了一个id字段,测试通过了。甜! :)感谢您指出我正确的方向。看起来好像你没有指定一个特定的ID,然后它会给它一个疯狂的长随机ID(见于test.log)。
有没有办法给它一个ID,将它与音符夹具连接而不用硬编码那里的数字?
one:
firstname: John
lastname: doe
然后在我的笔记夹具中:
one:
body: This is a note text.
contact_id: <%= contacts(:one).id %>
那会有用吗?