[前][次][番号順一覧][スレッド一覧]

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...         ]