ブログ内容などを格納するブログ本体DBとカテゴリーDBの2つがあるのですが、以下の表のようなブログ記事一覧表示で includes
をやってもカテゴリー名が表示されず、何が原因がわかりません。
記事の一覧
ブログタイトル | カテゴリー | content |
---|---|---|
Railsをやってみた | ブログの内容 | |
iPhone Xレビュー | ブログの内容 |
DBの関係は「1対多」でカテゴリーDBからは複数参照できますが、ブログ本体DBからは、1つしか参照できない関係です。
###DB
ブログ本体DB 「blog」
|id|blogtitle|blogcategory_id|content|
|:--|:--:|--:|
|1|Railsをやってみた|1|ブログの内容|
|2|iPhone Xレビュー|2|ブログの内容|
カテゴリーDB「blogcategory」
id | category |
---|---|
1 | プログラミング |
2 | モバイル |
###blogs_controller.rb
Ruby
1 def index 2 @blogs = Blog.includes(:blogcategory).order(created_at: :desc) # 投稿日の最新順に表示 3 end
###view/blogs/index.html.erb
viewが一番の問題で <%= blog.category %>
だと空白のまま表示され、 <%= blog.blogcategory.category %>
だと、
NoMethodError in Blogs#index Showing /app/views/blogs/index.html.erb where line #34 raised: undefined method `category' for nil:NilClass
とエラーが出てしまいます。
しかし、Ajaxでカテゴリー名で絞り込み検索をすると、表示されます。
ajaxには <%= blog.blogcategory.category %>
と記述していてこれで難なく表示されます。
Ruby
1<table> 2 <tr> 3 <th>ブログタイトル</th> 4 <th>カテゴリー</th> 5 <th>投稿日時</th> 6 </tr> 7 8 <% @blogs.each do |blog| %> 9 <tr> 10 <td><%= link_to blog_path(blog) do %> <%# タイトル名をクリックすると編集ページにリンクする %> 11 <%= blog.blogtitle %> 12 <% end %> 13 </td> 14 <td><%= blog.blogcategory.category %></td> 15 <td><%= blog.created_at %></td> 16 </tr> 17 <% end %> 18 </table>
###models/blogs.rb
Ruby
1class Blog < ApplicationRecord 2 belongs_to :blogcategory, optional: true 3end
###models/blogcategory.rb
Ruby
1class Blogcategory < ApplicationRecord 2 has_many :blogs 3 accepts_nested_attributes_for :blogs, allow_destroy: true # 投稿フォームで必要。2つのフォームでDBに登録可能にする 4end 5
どのようにしたら各記事のカテゴリー名が表示されるでしょうか?ご指摘いただければと思います。
回答1件
あなたの回答
tips
プレビュー