前提
バックエンドをrails、フロントエンドをreactで作ってます。
railsはapiモードで作成しました。
対象となるデータベースは以下の通りです。
名前 todos
【カラム一覧】
id(number)
name
target_id(number)
created_at
updated_at
実現したいこと
id以外のカラムを参照してデータを取得したいです。
カールコマンドでいうと、下記のイメージです。
〇現状
curl -i localhost:3000/todos/1
実行すると、todosテーブルから、idが1のレコードを取得。
〇理想
curl -i localhost:3000/todos/1
実行すると、todosテーブルから、target_idが1のレコードを取得。
ちなみに、最終的にはアプリ上でidでも、target_idでもレコードが取得ができるようにしときたいので、以下のようにルーティング違ってもいいです。
curl -i localhost:3000/todos/1
実行すると、todosテーブルから、idが1のレコードを取得。
curl -i localhost:3000/todos/target_id/1
実行すると、todosテーブルから、target_idが1のレコードを取得。
発生している問題・エラーメッセージ、試したこと
下記のようにroutes.rbを変更しました。
該当のソースコード
rails
1Rails.application.routes.draw do 2 #mount_devise_token_auth_for ‘User’, at: ‘auth’ 3 # For details on the DSL available within this file, see https://guides.rubyonrails.org/routing.html 4 5 resources :todos param: :target_id 6 7end
しかし、この状態で下記コマンドを実行しても、結果はデフォルトのidによる取得となってました。
curl -i localhost:3000/todos/1
実行すると、todosテーブルから、idが1のレコードを取得。
コントローラーは、下記のとおりです。
もともとはshowでidによるレコードの抽出をしてました。
target_idでレコードを抽出する用のtargetを新しく作りましたが、やはり下記コマンドではデフォルトのidによる取得となってました。
curl -i localhost:3000/todos/1
rails
1class TodosController < ApplicationController 2 before_action :set_todo, only: %i[show] 3 4 def show 5 render json: @todo 6 end 7 8 def target 9 @todo = Todo.where(target_id: params[:target_id]) 10 render json: @todo 11 end 12 13private 14 15 def set_todo 16 @todo = Todo.find(params[:id]) 17 end 18 19end 20
補足情報(FW/ツールのバージョンなど)
Mysql
ruby on rails
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2023/01/13 08:40
2023/01/13 09:58