Head First Rails 8章 『アクション「news」を作成する』 のルートについて
2010年03月02日
O’Reilly の Head First Rails の8章 『アクション「news」を作成する』 (p345) で記述されているルートを設定して news.xml を表示させると、ActiveRecord::RecordNotFound in IncidentsController#show
という風に show
メソッドを実行しようとしてエラーとなってしまう。
調べてみると、このようなフォーラム "Error with chapter 8 files – O’Reilly Forums" があった。
config/routes.rb の最初の方にある map.resources :incidents
を追加したルートの後に記述するといいらしい。
ActionController::Routing::Routes.draw do |map| # この設定を、追加するルートの後に記述するよう修正する # map.resources :incidents #...省略...# # 追加するルート map.connect '/incidents/news', :action=>'news', :controller=>'incidents', :format=>'xml' # ここに記述する map.resources :incidents map.connect ':controller/:action/:id' map.connect ':controller/:action/:id.:format' end
ところが、この設定にしても show
メソッドを実行しようとしてしまう。
さらに調べてみると、このような記事が、"www.gnnk.net – [Rails][本]Head First Rails"。
そこで、ルート設定のパスに .xml の拡張子を含む形で記述してみる。
ActionController::Routing::Routes.draw do |map| # この設定を、追加するルートの後に記述するよう修正する # map.resources :incidents #...省略...# # 追加するルート(news.xmlとする) map.connect '/incidents/news.xml', :action=>'news', :controller=>'incidents', :format=>'xml' # ここに記述する map.resources :incidents map.connect ':controller/:action/:id' map.connect ':controller/:action/:id.:format' end
すると、この2つの修正で news.xml が表示されるようになった。
使用している ruby, rails, gem のバージョンは以下のとおり。
$ ruby -v ruby 1.8.7 (2009-06-12 patchlevel 174) [i686-darwin10] $ rails -v Rails 2.3.5 $ gem -v 1.3.4
それにしても、フォーラムでもコメントされてるけど、どうして flight
の場合は問題なく動作して incident
の場合はダメなんだろう…
追記:p353 の auto_discovery_link_tag
ヘルパーによる RSS フィードの追加にも修正が必要だった。本文のコードではフィードの URI に .xml の拡張子が付かないので、以下のように :format
を指定するコードを追加した。
<%= auto_discovery_link_tag(:rss, {:action=>'news', :format=>'xml'}) %>
Head First Rails ―頭とからだで覚えるRailsの基本
posted with amazlet at 10.02.25
David Griffiths
オライリージャパン
売り上げランキング: 45786
オライリージャパン
売り上げランキング: 45786