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

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

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

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

Q&A

解決済

1回答

15446閲覧

showアクションでエラーが出て実装できません。

退会済みユーザー

退会済みユーザー

総合スコア0

Ruby on Rails 4

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

0グッド

1クリップ

投稿2016/10/10 12:05

編集2016/11/03 12:36

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

ruby

1<% @title = 'top_page' %> 2 3<%= page_entries_info @co_members %> 4<%= paginate @co_members %> 5 6 <% @co_members.each do |co_member| %> 7<div id="contents"> 8 <div class="left"> 9 <%= image_tag co_member.photo.url(:thumb), width: 200 %> 10 </div> 11 <h2><%= link_to co_member.company_name, :co_detail %></h2> 12 <p><%= co_member.title %></p> 13 <p><%= truncate(co_member.body, length: 80) %> 14 <%= link_to "read more", "" %></p> 15 <br class="leftclear"> 16</div> 17 <% end %> 18 19 <%= paginate @co_members %>

app/controllers/co/details_controller.rb

ruby

1class Co::DetailsController < ApplicationController 2 def show 3 @co_member = CoMember.find(params[:id]) 4 5 end 6end

config/routes.rb

ruby

1Rails.application.routes.draw do 2 config = Rails.application.config.jo 3 4 constraints host: config[:co][:host] do 5 namespace :co, path: config[:co][:path] do 6 root 'top#index' 7 get 'login' => 'sessions#new', as: :login 8 resource :session, only: [ :create, :destroy ] 9 resource :account, except: [ :new, :create, :destroy ] 10 resources :detail 11 end 12end

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

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

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

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

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

guest

回答1

0

ベストアンサー

エラー(例外)メッセージを読む練習をしていきましょう。エラーメッセージが読めないと例外が発生する度に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 の意味を知りたい」あたりが適切だと思います。

投稿2016/10/11 00:44

編集2016/10/11 00:59
hana-da

総合スコア1728

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

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

退会済みユーザー

退会済みユーザー

2016/10/13 06:22

hana-da様のアドバイスの通り、 エラー箇所の app/views/co/top/index.html.erbを <%= link_to co_member.company_name, co_detail_path(co_member) %> として、無事解決できました。 本当に、ありがとうございました!!!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問