showアクションでエラーが出て実装できません。
- 評価
- クリップ 1
- VIEW 12K+

退会済みユーザー
showアクションを行おうとすると <h2><%= link_to co_member.company_name, :co_detail %></h2>の列に下記のようなエラーが出てしまい、
解決できません。どなたかわかる方おられましたら、教えていただけないでしょうか?
よろしくお願いいたします。
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]
app/views/co/top/index.html.erb
<% @title = 'top_page' %>
<%= page_entries_info @co_members %>
<%= paginate @co_members %>
<% @co_members.each do |co_member| %>
<div id="contents">
<div class="left">
<%= image_tag co_member.photo.url(:thumb), width: 200 %>
</div>
<h2><%= link_to co_member.company_name, :co_detail %></h2>
<p><%= co_member.title %></p>
<p><%= truncate(co_member.body, length: 80) %>
<%= link_to "read more", "" %></p>
<br class="leftclear">
</div>
<% end %>
<%= paginate @co_members %>
app/controllers/co/details_controller.rb
class Co::DetailsController < ApplicationController
def show
@co_member = CoMember.find(params[:id])
end
end
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, except: [ :new, :create, :destroy ]
resources :detail
end
end
-
気になる質問をクリップする
クリップした質問は、後からいつでもマイページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
クリップを取り消します
-
良い質問の評価を上げる
以下のような質問は評価を上げましょう
- 質問内容が明確
- 自分も答えを知りたい
- 質問者以外のユーザにも役立つ
評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。
質問の評価を上げたことを取り消します
-
評価を下げられる数の上限に達しました
評価を下げることができません
- 1日5回まで評価を下げられます
- 1日に1ユーザに対して2回まで評価を下げられます
質問の評価を下げる
teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。
- プログラミングに関係のない質問
- やってほしいことだけを記載した丸投げの質問
- 問題・課題が含まれていない質問
- 意図的に内容が抹消された質問
- 過去に投稿した質問と同じ内容の質問
- 広告と受け取られるような投稿
評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。
質問の評価を下げたことを取り消します
この機能は開放されていません
評価を下げる条件を満たしてません
質問の評価を下げる機能の利用条件
この機能を利用するためには、以下の事項を行う必要があります。
- 質問回答など一定の行動
-
メールアドレスの認証
メールアドレスの認証
-
質問評価に関するヘルプページの閲覧
質問評価に関するヘルプページの閲覧
checkベストアンサー
+6
エラー(例外)メッセージを読む練習をしていきましょう。エラーメッセージが読めないと例外が発生する度にteratailに質問を書き込む事になります。
例外の種類(例外クラス名)は最初に書いてある ActionController::UrlGenerationError
です。
英語が苦手なのであれば単語をそのままカタカナにしてルー大柴の気持で読めばだいたいわかります。
アクションコントローラでURLのジェネレーションがエラーだぜ
です。
どこでその例外が発生したかはその後 in Co::Top#index
Showing /vagrant/app/views/co/top/index.html.erb where line #11 raised:
に書いてあります。
カタカナにできるところはカタカナしましょう。
イン Co::Top#index ショーイング /vagrant/app/views/co/top/index.html.erb where ライン #11 raised
Co::Top#index が /vagrant/app/views/co/top/index.html.erb の 11行目 をショーイングで raised です。
その後に何がわるかったかのヒントが書いてあります。
No route matches {:action=>"show", :controller=>"co/detail", :host=>"jobtopaz.example.com"} missing required keys: [:id]
ノー ルート マッチ {:action=>"show", :controller=>"co/detail", :host=>"jobtopaz.example.com"} ミッシング リクワイヤード キーズ [:id]`
{:action=>"show", :controller=>"co/detail", :host=>"jobtopaz.example.com"} マッチするルートがない。必須のキーがない [:id]
と、いう事でまとめると発生している例外の意味は
「link_to co_member.company_name, :co_detail
で指定している :co_detail に :id がないのでマッチするルートがないのでURLの生成に失敗した」という事になります。
例外を解消するには :id を指定してあげると解消します。
:idを指定する方法はご存知だと思うので書きません。
もしご存じなければ自分で調べてみてください。もし調べたり試したりしてもわからなければ別途質問を立てるといいと思います。
ところでRuby on Rails ガイドは読んだ事がありますでしょうか?
分野別にわかれてかかれていますので必要なところから読む事も可能です。
今回の話ですと Rails のルーティングあたりが参考になると思います。
ちなみに、タイトルは「ActionController::UrlGenerationError の意味を知りたい」あたりが適切だと思います。
投稿
-
回答の評価を上げる
以下のような回答は評価を上げましょう
- 正しい回答
- わかりやすい回答
- ためになる回答
評価が高い回答ほどページの上位に表示されます。
-
回答の評価を下げる
下記のような回答は推奨されていません。
- 間違っている回答
- 質問の回答になっていない投稿
- スパムや攻撃的な表現を用いた投稿
評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。
15分調べてもわからないことは、teratailで質問しよう!
- ただいまの回答率 88.20%
- 質問をまとめることで、思考を整理して素早く解決
- テンプレート機能で、簡単に質問をまとめられる
2016/10/13 15:22
エラー箇所の
app/views/co/top/index.html.erbを
<%= link_to co_member.company_name, co_detail_path(co_member) %>
として、無事解決できました。
本当に、ありがとうございました!!!