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

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

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

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

Q&A

解決済

3回答

794閲覧

Railsのshowアクションの実行時にidが取得できず(Couldn't find Client with 'id'=)が発生してしまうのでご教授お願いします。

koume

総合スコア458

Ruby on Rails 5

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

0グッド

0クリップ

投稿2019/06/25 15:28

Rails5でアプリケーションを作成しています。
クライアントの一覧表示はできていますが、そこから、各クライアントの詳細を表示しようとすると(Couldn't find Client with 'id'=)が発生しエラーとなってしまいます。
原因はidが取得できていないのが原因なのはわかりますが、どのように記述すればidが取得できるのか教えていただきたいのです。コードは以下になります。

routes.rb resource :request do get :company end
requests_controller.rb def show @client = Client.find(params[:id]) end def edit @request_form = General::RequestForm.new(Request.find(1)) end

たぶんroutes.rbの記述がまちがっているのかと思います。
resource :request do を resources :requests do のようにしないとidが取得出来ないのかと思い、そのようにすると今度はeditアクションでエラーが発生してしまうのです。
試しに(params[:id])のところをClient.find(1)とするときちんと表示が出来ます。

コンソールの表示になります。 Started GET "/request" for 10.0.2.2 at 2019-06-25 23:56:17 +0900 Processing by General::RequestsController#show as HTML Parameters: {"host"=>"hunter-chan.com"} Client Load (7.6ms) SELECT `clients`.* FROM `clients` WHERE `clients`.`id` = NULL LIMIT 1 Completed 404 Not Found in 13ms (ActiveRecord: 7.6ms) ActiveRecord::RecordNotFound (Couldn't find Client with 'id'=): app/controllers/general/requests_controller.rb:9:in `show'

どのようにしたらidが取得できるのでしょうか?ご教授の程よろしくお願いします。

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

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

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

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

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

guest

回答3

0

ベストアンサー

<% p = RequestPresenter.new(c, self) %>
がおかしいです。
self ??これで意図したデータが得られてます?

で、おそらく c すなわち request の請求者の情報を取り出そうとしていると思うのですが、new ですから新たに作っているわけでが、この中にClientの情報もあるのですね?

:general_client がまたわかりません。pからclientを得るmethodなのかな?ここにはURLやそれを作り出す情報が来ます。

Clientの詳細を表示させるなら、Requestのコントラーラではなく、Clientのコントローラを呼びたいです。
routes に Clientコントローラへの定義をかき
resources :clients

:general_client ではなく client_path(p から clientのidを得る式)
にしてみて下さい

投稿2019/06/25 16:54

winterboum

総合スコア23331

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

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

koume

2019/06/25 18:04

回答有り難うございます。もう一度見直してみました。 ご指摘の通りClientのコントローラを呼ぶようにして、 <%= link_to p.company_name, general_client_path(c) %> の用に記述し、idを取得できました。 今後とも宜しくお願いします。
guest

0

Started GET "/request"  を見ると、linkの書き方に問題がありそうです。
index の viewを見せて下さい

投稿2019/06/25 16:09

winterboum

総合スコア23331

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

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

koume

2019/06/25 16:36

回答ありがとうございます。viewは以下になります。 <% @title = '検索結果一覧' %> <h1><%= @title %></h1> <div class="table-wrapper"> <table class="listing"> <tr> <th>会社名</th> <th>時間</th> </tr> <% @requests.each do |c| %> <% p = RequestPresenter.new(c, self) %> <tr> <td><%= link_to p.company_name, :general_client %></td> <td><%= link_to p.operation_status, :general_client %></td> </tr> <% end %> <% end %> </table> </div> このようにしています。宜しくお願いします。
koume

2019/06/25 16:37

すいません。<% end %>が1つ多かったです。無視してください。
guest

0

今はログを見る限り、https://hunter-chan.com/requestのようなURLにアクセスし、その際にRequestsControllershowメソッドを走らせています。

でそのshowメソッドですが、
params[:id]は、本来https://hunter-chan.com/****/:id:idの部分を指します。
が、今回:idがURLになさそうなので、エラーが起きています。

この解決策として例えば、、、

routes

1resources :requests

routes.rbを書き、http://localhost:3000/requests/1のようなURLにアクセスするとparams[:id]が取得できてClient.find(1)のデータが返ってくる、とったことができるかもです!

投稿2019/06/25 15:53

hatsu

総合スコア1809

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問