2011年11月10日木曜日

railsのscaffoldで作成したcontrollerが余計のお世話をする

railsのscaffoldを作成したら、controllerでactionを追加したら、actionをidとして探してしまうという余計のお世話は、実はscaffoldの仕業
rorr(ruby on rails rookie)の私にyuoさんがいろいろ教えてくれてありがとうございました。

$ rails anydesign -d mysql #まずはプロジェクト作成(データベースはmysql)
$ cd anydesign
$ rake db:create #DB作成
$ ruby script/generate scaffold report title:string header:text body:text footer:text #scaffoldで簡単なreport機能を作成
$ rake db:migrate #DBを更新
$ ruby script/server #サーバを立ててみる

ブラウザーでhttp://localhost:3000/を叩いたら、タイムアウト…
調べたら、iptables(firewall)がオンになってる

$ sudo service iptables status #状態を調査する
$ sudo service iptables stop #やっぱりオンになってるから、止める

もう一回ブラウザーでhttp://localhost:3000/を叩いたら、出ました。on rail...
先作ったscaffoldで作ったreportを見てみるhttp://localhost:3000/report
あ!ちゃんと空の一覧が出来ました、便利。
一覧、新規、変更、削除一応全部できる。取り敢えず
title, header, body, footerを入れて、一レコードを作りました。
そして、controllerで新しいaction、「test」を追加しました、空のaction
in reports_controller.rb

def test
end

http://localhost:3000/report/testを叩いたら、[ActiveRecord::RecordNotFound (Couldn't find Report with ID=test):]という
エラーが出来ました、なぜaction名がidに無理やりも当てるの?railsの大きなお世話だね、yuoさんが教えてくれた
scaffoldで作成するとき、config/routes.rbで

map.resources :reports

を追加してくれたので、こうなった、一番簡単なのはこの一文を削除すればいいですが、config/routes.rbで

map.resources :reports, :only => ['create','show'] #適応actionを絞る
あるいは
map.resources :reports, :except=> ['test'] #action testを除外する

でもいいらしい。

0 件のコメント:

コメントを投稿