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

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

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

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

Haml

Haml(HTML abstraction markup language)は、HTML/XHTMLを効率的に記述するためのマークアップ言語および記法です。

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

データベース

データベースとは、データの集合体を指します。また、そのデータの集合体の共用を可能にするシステムの意味を含めます

コードレビュー

コードレビューは、ソフトウェア開発の一工程で、 ソースコードの検査を行い、開発工程で見過ごされた誤りを検出する事で、 ソフトウェア品質を高めるためのものです。

Q&A

2回答

820閲覧

投稿一覧のカテゴリーが全て表示されてしまうので、投稿に紐づいたカテゴリーだけを表示させたい

susume

総合スコア13

Ruby on Rails 5

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

Haml

Haml(HTML abstraction markup language)は、HTML/XHTMLを効率的に記述するためのマークアップ言語および記法です。

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

データベース

データベースとは、データの集合体を指します。また、そのデータの集合体の共用を可能にするシステムの意味を含めます

コードレビュー

コードレビューは、ソフトウェア開発の一工程で、 ソースコードの検査を行い、開発工程で見過ごされた誤りを検出する事で、 ソフトウェア品質を高めるためのものです。

0グッド

0クリップ

投稿2020/09/03 15:39

編集2020/09/04 14:49

前提・実現したいこと

投稿一覧のカテゴリーが全て表示されてしまうので、投稿に紐づいたカテゴリーだけを表示させたいです。

##現状
以下のようにデータベースに登録しているカテゴリー全てが投稿一覧に表示されてしまいます
イメージ説明
イメージ説明

これを選択したカテゴリーだけ表示されるようにしたいです。
※すでにshowページでは実装できているんですが、投稿一覧ではなかなか実装できずに困っています。
イメージ説明
ブーツがカテゴリーになります。

該当のソースコード

postコントローラー

class PostsController < ApplicationController before_action :authenticate_user!, except: [:index] def index @posts = Post.all @category_parents = Category.where(ancestry: nil) end def new @post = Post.new @category_parent = Category.where(ancestry: nil) end def get_category_children @category_children = Category.find("#{params[:parent_id]}").children end def create @post = Post.new(post_params) @post.user_id = current_user.id if @post.save redirect_to post_path(@post), notice: '投稿されました' else render :new, alert: '投稿できませんでした' end end def show @post = Post.find(params[:id]) @comment = Comment.new @comments = @post.comments.includes(:user) @category_id = @post.category_id @category_parent = Category.find(@category_id).parent end def edit @post = Post.find(params[:id]) if @post.user != current_user redirect_to posts_path, alert: '不正なアクセスです' end end def update @post = Post.find(params[:id]) if @post.update(post_params) redirect_to post_path(@post), notice: '投稿が更新されました' else render :edit end end def destroy post = Post.find(params[:id]) post.destroy redirect_to posts_path end private def post_params params.require(:post).permit(:title, :body, :image, :category_id) end end
.posts-index - @posts.each do |post| .posts-box .posts-box__image = link_to post_path(post) do = attachment_image_tag post, :image .posts-profile-box .posts-profile-box__image = link_to user_path(post.user.id) do = attachment_image_tag post.user, :profile_image, fallback: "no-image.png" .posts-profile-box__username %h1= link_to post.user.name, user_path(post.user.id) .posts-profile-box__favoritesBox .posts-profile-box__favoritesBox__favorite %div{id: "favorite_#{post.id}", style: "display: flex;"} = render partial: "favorites/favorite", locals: { post: post } .posts-profile-updateat = post.updated_at.strftime("%Y-%m-%d %H:%M") -------------------------------------------------------------- カテゴリーの表示 .category - @category_parents.each do |parent| %li = parent.name %li.aaaaaaaa - parent.children.each do |child| %li =child.name

showページ

.postWrapper .postWrapper__each-show-box .postWrapper__each-show-box__profile .postWrapper__each-show-box__profile__image = link_to user_path(@post.user) do = attachment_image_tag @post.user, :profile_image, fallback: "no-image.png", size: "100x100" .postWrapper__each-show-box__profile__username = link_to user_path(@post.user) do = @post.user.name .postWrapper__each-show-box__main-image = attachment_image_tag @post, :image, size: "710x600" .postWrapper__each-show-box__main-contents .postWrapper__each-show-box__main-contents__top .postWrapper__each-show-box__main-contents__top__title = @post.title .postWrapper__each-show-box__main-contents__top__favoritesBox %div{id: "favorite_#{@post.id}"} = render partial: "favorites/favorite", locals: { post: @post } .postWrapper__each-show-box__main-contents__edit-btn - if @post.user.id == current_user.id = link_to "編集", edit_post_path(@post) -------------------------------------------------------- カテゴリー .category_parent = @post.category.name

試したこと

showページのようにindexにも@post.category.nameを書くと、
undefined method `category' for nil:NilClassとなる。

- @category_parents.each do |parent| %li = @post.category.name←該当エラー発生 %li.aaaaaaaa - parent.children.each do |child| %li

お手数おかけしますが、よろしくお願いいたします。

【追記】
投稿一覧でカテゴリーが表示されないことについて
イメージ説明

本来であれば、投稿日時の下にカテゴリーが表示されるようになる。

if @post.present?をつけて新たに投稿したのは画像の6
カテゴリーのデータベースについては、質問文に記載あり
イメージ説明

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

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

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

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

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

guest

回答2

0

showをみるとカテゴリーはひとつだけ付くのですね?

で、表示したいのは post.category.name ですか?post.category.parent.name ですか?
いずれにしましても

-------------------------------------------------------------- カテゴリーの表示 .category = post.category.name = post.category.parent.name の様に。loopは不要です。

投稿2020/09/03 23:00

winterboum

総合スコア23567

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

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

susume

2020/09/04 10:07

それだとエラーになります。 = post.category.nameだと、 undefined method `name' for nil:NilClassになり、 = post.category.parent.nameだと undefined method `parent' for nil:NilClass Did you mean? present? になります。
guest

0

ひとまず提示されているエラーだけで考えると

@post.category.nameを書くと、undefined method `category' for nil:NilClassとなる。

これは「nil.categoryは定義されていない」のでエラーが表示された状態です。

そのため「@postに値があればカテゴリーを表示する、そうでなければ(この場合つまりnilなら)何も表示しない」にするとどうなりますか?

@post.category.name if @post.present?

投稿2020/09/04 10:16

no1knows

総合スコア3365

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

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

susume

2020/09/04 14:45

ご回答ありがとうございます! = @post.category.name if @post.present? このように記述したところ、エラーは解消されたのですが、カテゴリーが全く表示されないようになりました。 ひょっとして、gem ancestryの親カテゴリーに該当するものを表示させようとしているから、投稿一覧にはカテゴリーが表示されないってこともありますかね?? 質問文にも、上記を実行したことによる、カテゴリーが表示されない点について画像で追記いたしました。
susume

2020/09/08 01:31

上記に関して、ご回答いただきたいのですが、ほかに気になる点はございますか?
no1knows

2020/09/08 01:36

そもそも@post.category.nameでcategory名は取得されるような構成なのでしょうか? 例えばpostsテーブルにcategoryカラムがあり、categoriesテーブルにnameカラムがあるといった形です。
no1knows

2020/09/08 01:37

今のスクリーンショットだとカラム名がわからずどういう実装をしているのかわかりかねます。。。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問