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

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

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

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

React.js

Reactは、アプリケーションのインターフェースを構築するためのオープンソースJavaScriptライブラリです。

Q&A

解決済

1回答

1666閲覧

ReactとRails API を使って投稿一覧にユーザ名を表示させる方法

yamamotosyo

総合スコア7

Ruby on Rails 6

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

React.js

Reactは、アプリケーションのインターフェースを構築するためのオープンソースJavaScriptライブラリです。

0グッド

0クリップ

投稿2021/07/27 22:28

解決したいこと

・Home画面で、各投稿にユーザ名を表示させたい
今回viewはReactで実装しています。RailsはAPIモードを使用して実装を進めています。

調べたこと

・ユーザと投稿を紐づける必要がある

  • Articlesテーブルにuser_idカラムを追加した
  • Articleモデルには belongs_to :user Userモデルには has_many :articles を記述
  • UsersコントローラーではArticle.where やArticlesコントローラーではUser.find_by が使えるので、紐付けはうまく行ったと思う

・Railsでviewを作る場合には

<% @articles.each do |article| %> <%= article.user.name %> <% end %>

このようにすれば投稿に紐づくユーザ名が取得できる

わからないこと

Railsでviewを作る際には上記の方法で取得できることはわかったのですが、今回はRailsはAPIモードで、JSONを返すようにしています。
なので、

<% @articles.each do |article| %> <%= article.user.name %> <% end %>

と同じように表示させることができません。

Home画面では、全ての投稿を表示させている状態です。(参考: QiitaZenn のTOPページ)
Homeは、articles#indexに飛ばすようにルーティングをしています。

# articles_controller def index articles = Article.all render json: { articles: articles }, status: :ok end

動作を確認するにあたり、簡単ではありますが3名のユーザと、それに紐づく投稿を24件作成しています。

# seed.rb 3.times do |n| user = User.new( name: "user_#{n}", email: "example#{n}@example.com" ) 8.times do |m| user.articles.build( title: "title#{m}", content: "aaaaaaaaaaaaaaaaaaaaaaaaa" ) end user.save! end

React側はこのようにしています。投稿者:{article.user_id} としている部分で名前を表示させたいです。

<ul> { articles.map( article => ( <li key={article.id}> <h3>{ article.title }</h3> <p>{ replaceCreatedAt(article.created_at) }</p> <p>投稿者:{article.user_id}</p> <div>{ article.content }</div> </li> ))} </ul>

考えたこと

ReactはJSONを元に表示させているだけですので、RailsがJSONを返すときの

render json: { articles: articles }

このarticlesの中に各ユーザの情報をいれておかないと、React側でユーザ名を表示させることはできないと考えていました。
user_idを元に投稿者を決定し、名前を取得すればよいのでは?と思ったのですが、実装方法がわからない状態です。

環境
Mac
Rails 6.0.4
React 17.0.2
node v14.16.0

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

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

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

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

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

guest

回答1

0

ベストアンサー

このarticlesの中に各ユーザの情報をいれておかないと、React側でユーザ名を表示させることはできないと考えていました。

そうとも限りません。別途でUserの情報を供給して、JavaScriptで紐付ける、という方向性も考えられます。

投稿2021/07/27 22:49

maisumakun

総合スコア146018

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問