rails:3153
From: Andy Matsubara <andymatsubara@g...>
Date: Tue, 11 Aug 2009 20:41:55 +0900
Subject: [rails:3153] Re: rails 2.3.2 の URLの作り方は 1.x と違うようですが
まず,基本的なこととして,どのコントローラ,メソッドを呼び出すのかを決めるのは コントローラ自身ではなく,routes.rb内の記述です。そこに書かれていないURLは 呼び出すことができません。 今回の場合,おそらくscaffoldでモデルやコントローラやルーティングを生成している のではないかと思いますが,routes.rbを見ると map.resources .... といった記述が できており,これが/doc/newaction というURLを拾ってしまうため,Rails1.xからある :controller/:method というルーティング定義にたどり着いていないのでしょう。 一方,そうならないコントローラはmap.resourcesが作られていないものだと思います。 RESTのリソースとして記述されているコントローラで新しいメソッドを作る場合は, それがそのリソース全体にかかるものならcollection,特定のリソースにかかる場合は memberとして追加定義してあげます。 具体的には今回の場合は map.resources(:doc) となっているところを map.resources(:doc, :collection=>{:newaction=>:get}) とすれば doc/newaction がnewactionメソッドで拾えるようになると 思います。 詳しくは http://rails-recipebook.g.hatena.ne.jp/rrbk/20071026/1193375640 あたりを見てください。 Andy 2009/8/11 しん <dezawa@a...>: > 出沢です > > Rails 2.3.2 で controller にあらたな method(例えば newaction)をつくり > /controller/newaction を呼ぶと show method が呼ばれ、newaction という > ID がない というエラ−となります(ならない controllerもある) > newactionが呼ばれるようにするには、どうしたら良いでしょうか。 > > > 世にでている Rails 1.x ベ−スの本やWebの情報を見ますと、 > たとえば > <%= link_to "編集", :controller => "doc", :action=>"edit", :id=>@topic.id %> > と書くと /doc/edit/1 という URLが出来るようです。 > ということは /doc/edit/1 をアクセスすると doc_controller の edit method が > 実行されるのだと思います。 > > Rails 2.3.2 ですと、URL の順が変って、/doc/1/edit とか /doc/1 とかになっています。 > これは オブジェクト指向的な表現で面白いと思うのですが、困ったことが有ります。 > > doc_controlleに新たに def newaction を作ってこれを呼ぶために > /doc/newaction を呼ぶと show method が呼ばれ、newaction というID はない、という > エラ−となります。 > :controller => "doc", :action=>"newaction" を指定した場合も URLは/doc/newactionとなり > 同じエラ−となります。 > > 期待どおりに動く controller もあるので、よくわからなくなっています。 > どう作ったか記憶を掘り起こすと、もしかすると、scaffold で MVC(とT)を作ったものが > こういう動作かなという感触があります。 > > 宣しくおねがいします。 > > > -- > ML: rails@r... > 使い方: http://QuickML.com/ > -- ML: rails@r... 使い方: http://QuickML.com/
3152 2009-08-11 12:28 [dezawa@a... ] rails 2.3.2 の URLの作り方は 1.x と違うようですが -> 3153 2009-08-11 13:41 ┗[andymatsubara@g... ] 3154 2009-08-11 16:51 ┗[dezawa@a... ]