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

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

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

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

URL

URL(ユニフォームリソースロケータ)とは、インターネット上のリソース(Webページや電子メールの宛先等)を特定するための形式的な記号の並びの事を言う。

Ruby on Rails

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

API

APIはApplication Programming Interfaceの略です。APIはプログラムにリクエストされるサービスがどのように動作するかを、デベロッパーが定めたものです。

React.js

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

Q&A

0回答

1281閲覧

Rails(API)+React 一部画像のURLが取得できません

aaa11

総合スコア14

Ruby on Rails 6

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

URL

URL(ユニフォームリソースロケータ)とは、インターネット上のリソース(Webページや電子メールの宛先等)を特定するための形式的な記号の並びの事を言う。

Ruby on Rails

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

API

APIはApplication Programming Interfaceの略です。APIはプログラムにリクエストされるサービスがどのように動作するかを、デベロッパーが定めたものです。

React.js

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

0グッド

0クリップ

投稿2021/08/06 14:00

編集2021/08/10 06:05

ローカル環境で開発しており、Rails(API)からusersテーブルとrecipesテーブルをJoinしてデータを取り出しています。画像保存にはGemのcarrierwaveを使用して画像をDBに保存しています。Reactでは取り出したデータを表示するだけとなります。取り出したデータの内、recipeImageのurlだけ取れない状況にあります。原因が分からず困っています。どなたかご教授していただけませんか?

イメージ説明

#Rails実装
schema.rb(一部省略しています)

Rails

1ActiveRecord::Schema.define(version: 2021_08_06_122553) do 2 create_table "recipes", charset: "utf8mb4", force: :cascade do |t| 3 t.integer "user_id" 4 t.string "title" 5 t.string "recipe_image" 6 t.text "material" 7 t.text "body" 8 t.datetime "created_at", precision: 6, null: false 9 t.datetime "updated_at", precision: 6, null: false 10 end 11 12 create_table "users", charset: "utf8mb4", force: :cascade do |t| 13 t.string "name" 14 t.string "email" 15 t.string "image" 16 t.string "profile" 17 end 18end

image_uploader.rb

Rails

1class ImageUploader < CarrierWave::Uploader::Base 2 storage :file 3 4 def store_dir 5 "uploads/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}" 6 end 7 8 # 受け付け可能なファイルの拡張子を指定 9 def extension_allowlist 10 %w(jpg jpeg png) 11 end 12end

carrierwave.rb

Rails

1CarrierWave.configure do |config| 2 config.asset_host = "http://localhost:3001" 3 config.storage = :file 4 config.cache_storage = :file 5end

models/user.rb

class User < ActiveRecord::Base devise :database_authenticatable, :registerable, :recoverable, :rememberable, :validatable include DeviseTokenAuth::Concerns::User mount_uploader :image, ImageUploader has_many :recipes, dependent: :destroy end

models/recipe.rb

class Recipe < ApplicationRecord mount_uploader :recipe_image, ImageUploader belongs_to :user end

recipes_controller.rb

Rails

1class Api::V1::RecipesController < ApplicationController 2 def index 3 @recipes = User.joins(:recipes).select("users.*,recipes.*") 4 @recipes.order(updated_at: :desc) 5 render json: @recipes 6 end 7end

#React実装
index.ts

React

1export interface User { 2 id?: number 3 uid?: string 4 provider?: string 5 email?: string 6 name?: string 7 image?: { 8 url: string 9 } 10 profile?: string 11 allowPasswordChange?: boolean 12 created_at?: Date 13 updated_at?: Date 14 } 15 16 export interface ShowRecipes extends User { 17 id?: number 18 user_id?: number 19 title?: string 20 recipeImage?:{ 21 url: string 22 } 23 material?:string 24 body?: string 25 }

Top.tsx

1return( 2 <> 3 <div className="w-full flex flex-wrap justify-between"> 4 { 5 recipes.map((recipe) => ( 6 <Card className="my-1 px-1 w-64 md:w-1/2 lg:my-4 lg:px-4 lg:w-64" key={recipe.id}> 7 <div className="my-4"> 8 <div> 9 <Link to = {`${`/showRecipe/${recipe.id}`}`}> 10 <img alt="Placeholder" className="block w-64 h-64" src={recipe.recipeImage?.url}/> 11 </Link> 12 </div> 13 <div className="my-4"> 14 <h1 className="text-lg text-current font-bold"> 15 <Link to = {`${`/showRecipe/${recipe.id}`}`} 16 className="no-underline hover:underline text-black"> 17 {recipe.title} 18 </Link> 19 </h1> 20 </div> 21 <div className="flex items-center justify-between leading-none"> 22 {/* アイコン画像 */} 23 <Link to = "#" 24 className="flex items-center no-underline hover:underline text-black"> 25 <img alt="Placeholder" className="block rounded-full w-8 h-8" src={recipe.image?.url}/> 26 <p className="ml-2 text-sm"> 27 {recipe.name} 28 </p> 29 </Link> 30 </div> 31 </div> 32 </Card> 33 )) 34 } 35 </div> 36 </> 37)

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

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

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

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

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

aaa11

2021/08/06 19:27

回答ありがとうございます。 まだ開発段階なのでhttp://localhost:3001/から画像を保存して表示しています。 usersとrecipesテーブルを内部結合してusersテーブルのimageのurlは取得して表示できている状態でrecipesテーブルのrecipeImageのurlが取得出来ていません。またrecipesのカラムだけを取得する際はrecipeImageのurlは取得できています。カラム名が競合して取得出来ていないとかでしょうか?
hoshi-takanori

2021/08/06 19:57

失礼しました。Rails はよく分かりませんが、最初の画像が取得された JSON なら、image は url プロパティを持つオブジェクトですが、recipeImage は単なる url 文字列になってるように見えますね。つまり、export interface ShowRecipes は recipeImage?: { url: string } ではなく recipeImage?: string では。
aaa11

2021/08/07 06:33

なぜそうなっているのかが分からず先に進まない状態ですね。単体では取得できるのでSQLの取り出し方に原因があるのでしょうか?
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

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

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

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問