最速怪談選手権

RoRバージョン:2.3.2
Rubyバージョン:1.8.5

config/routes.rbで次のように設定して、
---------------------
map.resources :person
---------------------

app/views/persons/show.rhtmlに、次のように記述したファイルを作成しました。
---------------------------------------------------------
<p>ここはshowアクション</p>
<p><%= link_to 'edit_person_path', edit_person_path(1) %>
<p><%= link_to 'person_path', person_path(1) %></p>
<p><%= link_to 'person_path', person_path(1), :method => 'delete' %></p>
----------------------------------------------------------
それぞれ作成されるリンクは、editアクション、showアクション、destroyアクションへのものとなりますが、最後のリンクだけは:methodオプションを指定して作成する必要があります。

http://guides.rubyonrails.org/routing.html#urls- …
を見ると、
link_to 'person_path', person_path(1)
とするだけでdestroyアクションへのリンクが作成できるような感じで読み取れましたが、どうしてもその通りにするとshowアクションへのリンクになってしまいます。
(showアクションと曖昧なので、それだけではできるわけありませんが。。)

で、質問ですが、どのようにすれば:methodオプション、CRUD形式、名前付きルーティングを使わずに(つまりRestfulに)destroyアクションを呼び出すリンクを作成できますか?

無理ぽいのであれば、そういった回答も頂けるとうれしいです。

A 回答 (2件)

>>(ちなみにlv4uさんの抜粋だと、Regular Routesのようですが、その場合だと:method => :deleteの記述は必要ないですね。



ちょっと試してみました。その部分を削除すると、エラーは出ませんが、削除処理が実行されませんので必要なようです。

>>サンプルプログラムが、オンライン上にあるのであれば、そのURLを教えて頂けないでしょうか。

以下のブログにあるPDFです。ちょっと前に話題になった「Four Days on Rails」を、日本の方がRails 2.0に対応されたものです。

http://rails.to/pages/4daysonrails2

これは、元が英文の「Four Days on Rails」を日本語訳にされ、さらにRails 2.0対応になおされたドキュメントです。このドキュメントは、Railsが自動生成した、ありがちな機能のRailsソースをブラッシュアップして、使えるWebのアプリに仕上げるまでが記述されているので、まとまったソースコードにはなっていません。PDFのドキュメント内にソースが分散して載っています。

ブログには
---------------------------------------------------------
Rails 2.0で導入されたRESTfulな部分を損なわないようにしたつもりですが、RESTクライアントでの検証はまだ行っていません。
---------------------------------------------------------
と書かれていますように、一部にちゃんと2.0対応になっていないコードもあるようです。ただ、サンプルのカテゴリ画面は、追加・変更・削除が問題なく動作しています。

この回答への補足

ありがとうございます。
現在少しずつ読んでいます・・。(他の作業の合間に)

具体的に解決した時(適切と思える記述が見つかるか、書かれていなかった場合は単に高望みしていただけとみなす。)に“お礼”欄に改めて記入致します。

補足日時:2009/06/15 08:05
    • good
    • 0

RoRバージョン:2.3.2の場合、show.rhtmlではなく、show.html.erbにファイル名がなると思うのですが。

そして、同様に、質問者さんの削除のリンクの書き方も、RoRバージョン2の書き方ではないように思えます。
なので、状況がよく判らない面があるのですが、・・・。

私の場合、練習で打ち込んだサンプルプログラムの削除部分は、以下のようになっていました。

RoRバージョン:2.3.2
Rubyバージョン:1.8.6

<<------------------ indes.html.erb 抜粋 ---------------------
<%= link_to(image_tag('delete.png'), { :action => 'destroy', :id => category.id },:confirm =>'Are you sure you want to delete this category?', :method => :delete) %>
>>------------------ indes.html.erb 抜粋 ---------------------

なにか参考になればいいのですが。
    • good
    • 0
この回答へのお礼

全く回答がなく、困っていましたので、回答頂けるだけでもありがたいです。(求めているのは明確な回答だけでなく、ヒントでもあればと思っています。)

.rhtmlになっているのは、なんとなく.html.erbよりもrhtmlのほうがスッキリするという理由から無意識にしちゃってました。混乱させてスミマセン。(でも本当はXMLとHTMLを使い分けたいなら前者の記述が好ましいんですよね)

Railsのバージョンによってルーティングの記述方法が異なるわけではなく、2.3.2では、適切にいくつかつのルーティング方法を使い分ける(この中の1つがRestful Routing)ので、あまりバージョンは気にする必要はないような気がしています。(ちなみにlv4uさんの抜粋だと、Regular Routesのようですが、その場合だと:method => :deleteの記述は必要ないですね。)

サンプルプログラムが、オンライン上にあるのであれば、そのURLを教えて頂けないでしょうか。

お礼日時:2009/05/06 11:52

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!