質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Q&A

1回答

4251閲覧

Railsを使ったブログ開発で、カテゴリー機能を実装したい

RnnPenguins

総合スコア36

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

0グッド

0クリップ

投稿2017/09/05 06:08

編集2017/09/05 09:34

#質問
Railsを使って基本的なブログ機能を実装しているのですが、カテゴリー機能がうまくいきません。
カテゴリーをつけてブログ記事を新規作成しようとするとエラーが出てDBへ保存されないという状態なのですが、エラーの原因がわからないので、助けていただけないでしょうか。

実装内容は以下の通りです。

モデル
1つの記事に対して、複数あるカテゴリーのうちの1つを付与したいので、以下2つのモデルを用意しています。

rb

1class Article < ApplicationRecord 2 #コメント機能をつけています。こちらはうまくいっていますが、何か影響を与えている可能性も考えて、一応記載しておきます。 3 has_many :comments, dependent: :destroy 4 5 belongs_to :blog_category 6

rb

1class BlogCategory < ApplicationRecord 2 has_many :articles 3end

ビュー
付与するカテゴリーはすでに作成済みで、app/view/articles/newに以下を実装

erb

1<h1>New Post</h1> 2<%= provide :button_text, "投稿" %> 3 4<%= form_for @article do |f| %> 5 <%= f.label :category_id, "カテゴリ" %> 6 <%= f.collection_select :category_id, BlogCategory.all, :id, :name %> 7 <%= link_to "カテゴリを追加する", new_blog_category_path %> 8 <%= f.label :title %> 9 <%= f.text_field :title %> 10 . 11 . 12 . 13 <%= f.submit %> 14<% end %>

コントローラー

rb

1def create 2 @article = Article.new(article_params) 3 if @article.save 4 flash[:success] = "Successfully created..." 5 redirect_to @article 6 end 7 end 8 9private 10def article_params 11 params.require(:article).permit(:category_id, :tag_list, :title, :content) 12 end

エラー
サーバーのログで、以下のようなエラーが出ます。エラーというか、DBに保存できませんでしたという内容だと思うのですが、この原因がわからず困っています。

Parameters: {"utf8"=>"✓", "authenticity_token"=>"trT175kWavDp5FOmuYJQQ9Q03WCLGRzkZjPoaH/kNPUeAzX8GTg8wIRzx1J651XO62cLoGJwl2WdteSeCJhq5w==", "article"=>{"category_id"=>"2", "tag_list"=>"apple, orange", "title"=>"hogehoge", "content"=>"fooooo"}, "commit"=>"投稿"} (0.1ms) begin transaction (0.1ms) rollback transaction No template found for ArticlesController#create, rendering head :no_content Completed 204 No Content in 86ms (ActiveRecord: 0.2ms)

#試したこと
カテゴリー機能を追加したところ、保存ができなくなりました。そこで、Articleモデルのbelongs_toとビューのカテゴリーセレクトを外してみるとうまく保存できたので、アソシエーションのところで何か足りていないor間違っているのでしょうか。

色々と調べて試してみたのですが、解決できずこちらで質問させていただきました。
ご回答をお願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

NobutakaKomaki

2017/09/05 08:29

app/view/articles/の配下に、create.html.erbは作りましたか?
RnnPenguins

2017/09/05 09:43

create.html.erbは作成しておりません。質問に記載しているビューはコントローラーのnewメソッドで呼ばれて、フォームのsubmitでメソッドはPOST、アクションはcreateでDB登録処理→成功したら別のビューにリダイレクトするという考えだったので、create.html.erbは作りませんでした。今までCRUD実装するときはこのような実装でcreateにビューは作っていなかったのですが、今回DBに登録できないのはそれが原因なのでしょうか?
NobutakaKomaki

2017/09/06 04:23

No template foundというエラーがありますので、create.html.erbファイルを作れば、エラーがなくなるかと思いますよ。
NobutakaKomaki

2017/09/06 04:24

中身はいりませんので、ファイルだけ作成してみてください。
RnnPenguins

2017/09/06 14:06

create.htm.erbを作成するとNo template foundというエラーは無くなりましたが、rollback transactionは相変わらずで、DBへの登録はできませんでした。少し勘的なところもありますが、子モデルの方からレコードを登録しようとしているあたりが怪しいかなと思っています。その辺りを試してみようと思います。
NobutakaKomaki

2017/09/07 02:11

rails のバージョンは何でしょうか? rails 5であれば、belongs_to :blog_category, required: falseなどとしてみてください。
RnnPenguins

2017/09/09 03:37

2日空いてしまい申し訳在りません。required: falseにすることで保存することができました!このオプションがわからなかったので調べると、外部キーのnilを許容するオプションということですね。ここで何が起こっているのか完全にわかっていないので、これからその辺りも勉強します。ひとまず機能としては問題解決できて本当に助かりました。ありがとうございます!
guest

回答1

0

Articleモデルなのに
コントローラで
@blog = Blog.new(blog_params)
で、Blogモデルになっているのは何故でしょうか?

投稿2017/09/05 08:45

zooiiooz

総合スコア176

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

RnnPenguins

2017/09/05 09:38

Blogはこちらの記載ミスでしたので、訂正しました。開発の便宜上、記事モデルをBlogとしていたのですが、こちらで質問する際、内容のわかりやすさからBlogをArticleに書き換えて質問しました。その際の書き換え漏れです。ややこしくしてしまいすいません。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問