🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Devise

Deviseとは、Ruby-on-Railsの認証機能を追加するプラグインです。

Ruby

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

Ruby on Rails

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

Q&A

解決済

1回答

7517閲覧

Rails 投稿一覧ページに投稿者の情報も表示したい。

bok_sakai

総合スコア20

Devise

Deviseとは、Ruby-on-Railsの認証機能を追加するプラグインです。

Ruby

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

Ruby on Rails

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

0グッド

1クリップ

投稿2019/10/13 05:46

編集2019/10/13 09:53

前提・実現したいこと

rails6を実際に動かしながら勉強している者です。

投稿詳細ページに投稿者のリンクを貼ることには成功したのですが、投稿一覧ページにも誰が投稿したのかをみられるようにしたいと思っています。

しかし調べても参考になりそうなサイトが見当たらなかったので、こちらで質問させていただきました。

投稿一覧ページの各投稿に、icon、nickname、user_nameを表示する方法を教えていただけませんでしょうか。

投稿一覧ページ

#home.html.erb <% @post.each do |post| %> <div class="posts-index-item"> <%= link_to(post.content, "http://localhost:3000/post/#{post.id}") %> </div> <% end %>
#top_controller class TopController < ApplicationController def home @post = Post.all.order(created_at: :desc) end end

投稿詳細ページ

#show.html.erb こちらでは表示できる <div class="posts-show-item"> <%= @post.content %> <div class="post-time"> <%= @post.created_at %> </div> <%= link_to(@user.user_name, "http://localhost:3000/users/#{@user.id}") %> </div>
#post_controller class PostController < ApplicationController protect_from_forgery except: :update before_action :ensure_correct_user,{only: [:edit,:update,:destroy]} def show @id = params[:id] @post = Post.find_by(id: params[:id]) @user = User.find_by(id: @post.user_id) end def edit @post = Post.find_by(id: params[:id]) end def update @post = Post.find_by(id: params[:id]) @post.content = params[:content] @post.save redirect_to("/") end def destroy @post = Post.find_by(id: params[:id]) @post.destroy redirect_to("/") end def ensure_correct_user @post = Post.find_by(id:params[:id]) if @post.user_id != @current_user.id flash[:notice] = "権限がありません" redirect_to("/posts/index") end end end

post model 投稿テーブル

#post.rb class Post < ApplicationRecord end

User model

#user.rb ユーザーテーブル class User < ApplicationRecord # Include default devise modules. Others available are: # :confirmable, :lockable, :timeoutable, :trackable and :omniauthable devise :database_authenticatable, :registerable, :recoverable, :rememberable, :validatable before_create{ self.nickname = username } def user_name "@#{self.username}" end def posts return Post.where(user_id: self.id) end mount_uploader :icon, ImageUploader end

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

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

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

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

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

siruku6

2019/10/13 06:39

homeやshowの表示を行っているcontrollerファイル、それから、postとuserのmodelファイルも掲載しておくと、回答が付きやすくなると思います。 @postや@userの定義と、それぞれのモデル間のアソシエーション状況が必要だからです。 それから質問ですが、一覧画面に表示したい投稿者情報は、user_name属性のことでしょうか??
bok_sakai

2019/10/13 09:56

お手数おかけしてしまってすみません。 不慣れなもので、とても参考になりました。ありがとうございます。 ご質問についても追記内で明記しましたので、ご回答のほどよろしくお願いします。
guest

回答1

0

ベストアンサー

link_to(@user.user_name, "http://localhost:3000/users/#{@user.id}")
ですが、
link_to(@user.user_name, user_path(@user))
の方がよいです。
で、
「投稿一覧ページにも誰が投稿したのかをみられるようにしたい」というのは、投稿者の詳細へのlinkを貼りたいということでしょうか?
でしたらば上とほぼ同じです
link_to(post.user.user_name, user_path(post.user_id))

post.user_id の user_id は、Postの投稿者のIDをそういう名前で登録してあるだろうという予想で。
post.user.user_name で良いかどうかは分からないので適宜変えて下さい

投稿2019/10/13 09:42

winterboum

総合スコア23567

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

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

bok_sakai

2019/10/13 10:07

ありがとうございます。 早速指摘いただいた2点を修正してみました。 そして、一つ目のリンクの指定の仕方についてはうまくいったのですが、 link_to(post.user.user_name, user_path(post.user_id))を加えてみるとエラーが発生してしまいます。なせユーザーがnillになってしまうのか分かりません、、、。 NoMethodError in Home#hyoron Showing /Users/****/test_app/app/views/top/home.html.erb where line #5 raised: undefined method `user' for #<Post:0x00007fd6ae871478>
bok_sakai

2019/10/13 10:27

>> post.user.user_name で良いかどうかは分からないので適宜変えて下さい 何に基づいて変えればいいのでしょうか、2段階でピリオドがつく構文を書いたことがないので教えていただきたいですm(_ _)m
winterboum

2019/10/13 11:58

Post、Userの定義が不足かな。 このモデルの関連の定義 has_*, belongs_to の載っている当たりを見せて下さい。
bok_sakai

2019/10/13 12:02

has_*, belongs_to 定義していないのですが、まずかったですか(T T)
bok_sakai

2019/10/13 12:06

今から定義すれば間に合いますか?
bok_sakai

2019/10/13 12:10

なんどもすみません、 参考サイトに倣ってbelongs_to :userを定義してみるとうまくいきました! ご協力ありがとうございました、助かりました。
winterboum

2019/10/13 12:26

書き忘れてました「2段階でピリオドがつく構文を書いたことがない」の件 いくつ連なっても同じです post.user.user_name は  user = post.user name = user.user_name をつなげただけ
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問