🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

Ruby on Rails 4

Ruby on Rails4はRubyによって書かれたオープンソースのウェブフレームワークです。 Ruby on Railsは「設定より規約」の原則に従っており、効率的に作業を行うために再開発を行う必要をなくしてくれます。

Q&A

解決済

1回答

7863閲覧

railsでshowアクションでエラーが出ます。

退会済みユーザー

退会済みユーザー

総合スコア0

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

Ruby on Rails 4

Ruby on Rails4はRubyによって書かれたオープンソースのウェブフレームワークです。 Ruby on Railsは「設定より規約」の原則に従っており、効率的に作業を行うために再開発を行う必要をなくしてくれます。

0グッド

0クリップ

投稿2016/10/08 08:31

編集2016/11/03 12:37

railsでshowアクションでエラーが出ます。
details_controller.rbの3行目に赤いラインが出てます。

ActiveRecord::RecordNotFound in Co::DetailsController#show
Couldn't find CoMember without an ID

初歩的な質問で申し訳ございません。
どなたか、お願いいたします。

app/controllers/co/details_controller.rb

class Co::DetailsController < ApplicationController def show @co_member = CoMember.find(params[:id]) end end

app/views/co/details/show.html.erb

<table class="company"> <tbody> <tr> <th class="arrow_box">画像</div></th> <td> <%= image_tag @co_member.photo.url(:thumb) %> </td> </tr> <tr> <th class="arrow_box">会社名</div></th> <td> <%= @co_member.company_name %> </td> </tr> <tr> <th class="arrow_box">担当者名</th> <td> <%= @co_member.company_staffname %> </td> </tr> <tr> <th>メールアドレス</th> <td class="email"> <%= @co_member.email %> </td> </tr> <tr> <th>郵便番号</th> <td> <%= @co_member.postal_code1 %> - <%= @co_member.postal_code2 %> </td> </tr> <tr> <th>都道府県</th> <td> <%= @co_member.prefecture %> </td> </tr> <tr> <th>市町村</th> <td> <%= @co_member.city %> </td> </tr> <tr> <th>住所</th> <td> <%= @co_member.address1 %> <%= @co_member.address2 %> </td> </tr> <tr> <th>電話番号1</th> <td> <%= @co_member.phones1 %> </td> </tr> <tr> <th>電話番号2</th> <td> <%= @co_member.phones2 %> </td> </tr> <tr> <th>タイトル</th> <td> <%= @co_member.title %> </td> </tr> <tr> <th>テキスト</th> <td> <%= @co_member.body %> </td> </tr> <tr> <th>最終更新日時</th> <td class="date"> <%= @co_member.updated_at.strftime("%Y-%m-%d %H:%M") %> </td> </tr> </tbody> </table>

config/routes.rb

Rails.application.routes.draw do config = Rails.application.config.jo constraints host: config[:co][:host] do namespace :co, path: config[:co][:path] do root 'top#index' get 'login' => 'sessions#new', as: :login resource :session, only: [ :create, :destroy ] resource :account resource :detail end end

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

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

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

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

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

guest

回答1

0

ベストアンサー

@co_member = CoMember.find(params[:id])

ActiveRecord::RecordNotFound Couldn't find CoMember without an ID

が発生するという事は params[:id] が nil なのだと思います。

どのような URL にアクセスされましたでしょうか?
/co/detail のように id を含んでいないURLへアクセスされておりませんでしょうか?

ちなみに id が指定されているが(params[:id]がnilではない)そのidのレコードが存在しない場合は

ActiveRecord::RecordNotFound: Couldn't find CoMember with 'id'=3249324

のようなエラーメッセージになるはずです。


rake routes コマンドを実行してみていただけるとわかると思いますが、(config[:co][:path]が'co'だとすると)

GET /co/detail(.:format) co/details#show

となり :id が含まれていないはずです。
これは resource :detail と宣言しているからです。

resources :detail という風に複数形にしてあげると

co_detail GET /co/detail/:id(.:format) co/detail#show

となり /co/idetail/1 というURLにアクセスした際 Co::DetailsController#show にルーティングされ params[:id] に 1 が入ります。

投稿2016/10/08 09:10

編集2016/10/09 13:22
hana-da

総合スコア1728

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

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

退会済みユーザー

退会済みユーザー

2016/10/09 11:28

回答ありがとうございます。 /co/details/1/showなどのidを含んだURLへアクセスしたいですが、 できません。 どうしたらいいのか、わかりません。
hana-da

2016/10/09 13:22 編集

すみません config/routes.rb をよく見てませんでしたので回答に追記しました
退会済みユーザー

退会済みユーザー

2016/10/10 01:56

回答ありがとうございます。 ご指摘の通り config/routes.rb を resources :detail と直し、app/views/co/top/index.html.erbより <h2><%= link_to co_member.company_name, :co_detail %></h2> で、app/views/co/details/show.html.erb にアクセスしようとしましたが。 ActionController::UrlGenerationError in Co::Top#index Showing /vagrant/app/views/co/top/index.html.erb where line #11 raised: No route matches {:action=>"show", :controller=>"co/detail", :host=>"jobtopaz.example.com"} missing required keys: [:id] とエラーが出て、 <h2><%= link_to co_member.company_name, :co_detail %></h2> が赤く出ました。 すみませんが、よろしくお願いいたします。
退会済みユーザー

退会済みユーザー

2016/10/10 02:12

追記いたします。 app/views/co/top/index.html.erb を <h2><%= link_to co_member.company_name, :show_co_detail %></h2> とした場合、 NoMethodError in Co::Top#index Showing /vagrant/app/views/co/top/index.html.erb where line #11 raised: undefined method `show_co_detail_path' for #<#<Class:0x007feb7c8855f8>:0x007feb7cf0d7e0> と、エラーが出ます。 よろしくお願いいたします。
hana-da

2016/10/10 06:03

コメント欄に追加の質問を書くのはよくないと思います。 ActiveRecord::RecordNotFound Couldn't find CoMember without an ID という例外が発生するという問題は解決していると思いますので、追加の質問は新規に質問を作成してた方がいいと思います。
退会済みユーザー

退会済みユーザー

2016/10/10 06:29

追加の質問の仕方が間違っており申し訳ございません。 最初のエラーと違うエラーに変わりましたが、 「 railsでshowアクションでエラーが出る」 とうい、元々の問題が解決できておりません。 未解決ですが、新規の質問をさせていただきます。 すみませんでした。
hana-da

2016/10/10 07:03

teratailさんは1つの質問に対して、質問者と回答者やりとりをしながら解決に至るという方法より、1つの質問に対して1つの回答で答えるという形を望んでおられるようですので、解決したいエラーが複数ある場合は全て明記するのがteratailの望む形のようです。 (初心者のうちはそれはかなりの難題だと僕は思いますが。。。)
退会済みユーザー

退会済みユーザー

2016/10/10 07:47

いろいろとありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問