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

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

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

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

Ruby on Rails

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

ルーティング

ルーティングとは、TCP/IPネットワークにおいて、目的のホストまでパケットを送る為のパス選定のプロセスを言います。

Q&A

解決済

1回答

1524閲覧

投稿商品詳細ページの価格をクリックするとその価格を投稿した人のページへ遷移させたい。

jones

総合スコア36

Ruby

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

Ruby on Rails

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

ルーティング

ルーティングとは、TCP/IPネットワークにおいて、目的のホストまでパケットを送る為のパス選定のプロセスを言います。

0グッド

0クリップ

投稿2020/11/12 07:35

編集2020/11/12 07:40

前提・実現したいこと

Rubyでオークションサイトを作成しています。
投稿商品詳細ページに安い順で価格を並べて表示させるところまでできて、価格にリンクを付け
価格をクリックするとその価格を提示した人の詳細ページに遷移するという実装を行っています。
しかしながら価格をクリックすると下記のエラーが表示されました。

発生している問題・エラーメッセージ

コピペ用

error

1ActiveRecord::RecordNotFound in UsersController#show 2Couldn't find Sell with 'id'=1

画像ではこちらです
イメージ説明
このエラーは「sellテーブルの中にid=1が入っていないです」という意味だと認識しています。
価格にも削除機能を付けて削除認めidが1の価格がなくなったためです。
下記のSeqel proをご確認ください
イメージ説明

価格ごとにidがついているので、価格をクリックするとidが付与されたページに飛ぶものではないのかと思っていましたが、
それができていないみたいです。価格ごとに飛べるようにしたいのが今回の目的です。

作成したコード一覧

ルーティング
route.rb
コントローラー
users_contorller.rb
sells_controller.rb
charter_controller.rb
ビュー
charters/show.html
users/show.html

該当のソースコード

route.rb

ruby

1Rails.application.routes.draw do 2 get 'users/show' 3 devise_for :users 4 root to: "charters#index" 5 resources :charters do 6 resources :sells, only: [:create, :destroy, :show] 7 resources :users, only: [:show] 8 end 9end

ルーティングはcharterに紐つくためuserとsellをネストしています
rails routesをした場合下記の通りです。
イメージ説明
charters/show.html.erb

html

1<h6>価格一覧</h6> 2<ul class="price-row"> 3 <% @sells.each do |sell|%> 4 <li class="price-lists"> 5 <%= link_to "#{sell.sell}円", charter_user_path(@charter), id: "price", class: "price-list" %> 6 </li> 7 <% end %> 8</ul>

users/show.html.erb

html

1<div class=some> 2<%= @name %> 3<%= @price%> 4 <div class="charter-delete"> 5 <%= link_to "削除", charter_sell_path(@sell), method: :delete %> 6 </div> 7</div>

users_controller.rb

class UsersController < ApplicationController def show @user = User.find(params[:id]) @charter = Charter.find(params[:id]) @name = @charter.user.username @sell = Sell.find(params[:id]) @price = @sell.sell end end

sells_controller.rb

class SellsController < ApplicationController def index @sells = Sell.all.order("sell asc") end def create @sell = Sell.create(sell_params) if @sell.save redirect_to charter_path(@sell.charter) else @charter = @sell.charter @sell = @charter.sell render "charters/show" end end def show @charter = Charter.find(params[:id]) @name = @charter.user.username @sell = Sell.find(params[:id]) @price = @sell.sell end def destroy @sell = Sell.find(params[:id]) if @sell.destroy redirect_to root_path end end private def sell_params params.require(:sell).permit(:sell).merge(user_id: current_user.id, charter_id: params[:charter_id]) end end

自分が考えている問題点(仮説)

charter/show.htmlのlinkをクリックした際に表示されるURLが

/charters/1/users/1

となっているので、ここが

/charters/1/users/2

などとなればいいと思っていますが、おそらくネストになっているため、charter_id = 1がこのURLに反映されているのだと思います。

Rails.application.routes.draw do get 'users/show' devise_for :users root to: "charters#index" resources :charters do resources :sells, only: [:create, :destroy, :show] do resources :users, only: [:show] end end end

ルーティングのネストを変えてみました。
rails routesをした場合下記の通りです
イメージ説明
上から2行目のパスをcharter.show.htmlのリンクに記述しました。
charter/show.html.erbのリンク部分のパスを変えたものの今度は下記のようなエラーへ変わりました。
![イメージ説明]
:idを:user_idへ変更
イメージ説明

補足情報(FW/ツールのバージョンなど)

ruby 2.6.5

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

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

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

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

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

guest

回答1

0

ベストアンサー

@charter = Charter.find(params[:charter_id])

で取得できると思いますよ

投稿2020/11/12 10:42

hukurouo

総合スコア108

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

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

jones

2020/11/12 13:16

すみません、今回の問題はネストを外すことで違う形に変更しました。 せっかくご回答いただいたところ大変申し訳ありません。 しかしながらこの問題の次の実装を行うにあたって再度似たようなエラーが発生した際にこの回答を参考いたしました。 結果思うように動くようになりましたので、本当にありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問