私はRSpecがエラーを起こす理由を理解できません。 エラーメッセージは次のとおりです。どのようにActiveRecord :: RecordNotFoundを解決するには?
1) ArticlesController POST #update with valid params assigns the article as @article
Failure/Error: @article = Article.find(params[:article][:id])
ActiveRecord::RecordNotFound:
Couldn't find Article with 'id'=
# ./app/controllers/articles_controller.rb:205:in `update'
# ./spec/controllers/articles_controller_spec.rb:121:in `block (4 levels) in <top (required)>'
RSpecテストのためのデータベースを用意しました。スキーマが形成され、データが空でした。
はここ
def update
@article = Article.find(params[:article][:id])
@article.publish_at = params[:article][:publish_at]
@article.publish_until = params[:article][:publish_until]
@article.update_user_id = params[:article][:update_user_id]
@article.article_histories.build
@article.article_histories.last.article_id = params[:article][:id]
@article.article_histories.last.title = params[:article_histories][:title]
@article.article_histories.last.content = params[:article_histories][:content]
@article.article_histories.last.version = @article.article_histories.maximum(:version) + 1
@article.current_version = @article.article_histories.last.version
@article.status = Article.statuses[:ready] unless @article.scrape?
@article.thumbnail = article_params[:file]
マイRSpecのテストはこのようなものです私の記事のコントローラーです。
describe 'POST #update' do
context 'with valid params' do
let(:new_attributes) {
{
current_version: 2,
publish_version: 2,
thumbnail: "uploads/article/thumb/thumb_20170327055055.png",
status: "publish",
publish_datetime: "2017-04-16 19:51:03",
user_id: 2,
update_user_id: 3,
article_histories_attributes:[
version: 2,
title: "Hello! again",
content: "World!World!!! <br />"
]
}
}
it 'assigns the article as @article' do
article = Article.create! valid_attributes
put :update, params: {id: article.to_param, article: new_attributes}, session: valid_session
expect(assigns(:article)).to eq(article)
end
この問題を解決するにはどうすればよいですか?
[更新] このようなパラメータをいくつか変更しました。しかし、まだ動作しません。
RSpec.describe ArticlesController, type: :controller do
login_admin
let(:valid_attributes) {
{
id: 1,
current_version: 1,
publish_version: 1,
thumbnail: "uploads/article/thumb/thumb_20170327055055.png",
status: "publish",
publish_datetime: "2017-04-16 19:51:03",
user_id: 1,
update_user_id: 1,
article_histories_attributes:[
version: 1,
title: "Hello!",
content: "World!World!!!"
]
}
}
describe 'POST #update' do
context 'with valid params' do
let(:new_attributes) {
{
id: 1,
current_version: 2,
publish_version: 2,
thumbnail: "uploads/article/thumb/thumb_20170327055055.png",
status: "publish",
publish_datetime: "2017-04-16 19:51:03",
user_id: 2,
update_user_id: 3,
article_histories_attributes:[
version: 2,
title: "Hello! again",
content: "World!World!!! <br />"
]
}
}
コントローラ{id:article.to_param、article:new_attributes}に渡しています。コントローラは、articleに渡される値が:idキーを含むハッシュであることを期待していますが、変数new_attributesには:idキーが含まれていません。したがって、{article:new_attributes.merge(article.to_param)}を送信して、その変数に追加する必要があります。これは役に立ちます –
コメントありがとうございます。私は結局解決しました。 –
歓迎です。 –