Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/52.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 在控制器中保存后,集成测试中的关联记录为零_Ruby On Rails_Ruby_Ruby On Rails 3 - Fatal编程技术网

Ruby on rails 在控制器中保存后,集成测试中的关联记录为零

Ruby on rails 在控制器中保存后,集成测试中的关联记录为零,ruby-on-rails,ruby,ruby-on-rails-3,Ruby On Rails,Ruby,Ruby On Rails 3,在一个控制器中,我有一个update方法,它创建一个记录call it book,将它与现有的记录call it author关联并保存它 这本书属于一位作者 将作者添加到book controller.rb def更新 @author=App::Models::author.newparams @book=App::Models::book.whereid:params[:book\u id]。第一个 @book.author=@author @书,救命! 这个很好用。。。 放置@book.a

在一个控制器中,我有一个update方法,它创建一个记录call it book,将它与现有的记录call it author关联并保存它

这本书属于一位作者

将作者添加到book controller.rb

def更新 @author=App::Models::author.newparams @book=App::Models::book.whereid:params[:book\u id]。第一个 @book.author=@author @书,救命! 这个很好用。。。 放置@book.author.inspect 呈现json:{status::ok} 终止 将作者添加到书籍控制器规格rb

描述App::AddAuthorToBookController do 描述“更新”是什么 这是一个人为的例子,有更多的设置有关创建正确的书。。。 let:name{'foobar'} let:action{xhr:put,:update,params} let:params{{first_name:name} 主题{book} 在{action}之前 它{expectresponse.status.to eq 200} 它“应该将作者保存到书中”这样做 为什么作者nil在这里? 把书。作者。检查 expectbook.author.first_name.to eq name 终止 终止 终止
我试着在测试中重新加载book.reload,但没有成功。我是rails新手,在控制器测试中是否有一些常规的方法来测试相关记录?

首先,我建议您使控制器更通用,因为这是您需要遵循的正确体系结构,因此,您的控制器可以称为authors_controller.rb并管理所有authors内容或books_controller.rb并管理所有books内容。按照这种方法,你可以有一个方法来关联一本书,它接收一个作者和一本书,并创建正确的关联。让我用代码解释一下:

类作者<应用程序记录 你有很多书吗 字段:名称 验证:名称,状态:true 终止 教材错误 这将允许您捕获与更新相关的异常 终止 终止 然后,假设将从路由调用此方法,您可以通过执行以下操作来测试此方法

RSpec测试 spec/controllers/authors\u controller.rb RSpec.description AuthorsController do let:作者{author.first} let:book{book.first} 它“应该将作者与提供的书联系起来”这样做 期望做 post:associate_book,参数:{author_id:author.id,book_id:book.id} end.to将{author.books.count}更改为1 终止 终止 这将检查与作者关联的图书总数。

在将作者关联到图书之前未保存作者

def更新 @author=App::Models::author.newparams 只是错过了这个 @作者,救救我! @book=App::Models::book.whereid:params[:book\u id]。第一个 @book.author=@author @书,救命! 这个很好用。。。 放置@book.author.inspect 呈现json:{status::ok} 终止
您是否在测试请求中提供book_id?是否返回200状态?@maxpleaner是的,控制器返回正确的状态,并且在控制器puts中记录正确的关系。现在,我正试图在保存mongo的书之后,在测试中重新蚀刻它