• 締切済み

【RoR】Restfulにdestroyアクションへのリンクを作成したい

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-and-paths を見ると、 link_to 'person_path', person_path(1) とするだけでdestroyアクションへのリンクが作成できるような感じで読み取れましたが、どうしてもその通りにするとshowアクションへのリンクになってしまいます。 (showアクションと曖昧なので、それだけではできるわけありませんが。。) で、質問ですが、どのようにすれば:methodオプション、CRUD形式、名前付きルーティングを使わずに(つまりRestfulに)destroyアクションを呼び出すリンクを作成できますか? 無理ぽいのであれば、そういった回答も頂けるとうれしいです。

  • ggaogg
  • お礼率86% (209/243)
  • Ruby
  • 回答数2
  • ありがとう数7

みんなの回答

  • lv4u
  • ベストアンサー率27% (1862/6715)
回答No.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対応になっていないコードもあるようです。ただ、サンプルのカテゴリ画面は、追加・変更・削除が問題なく動作しています。

ggaogg
質問者

補足

ありがとうございます。 現在少しずつ読んでいます・・。(他の作業の合間に) 具体的に解決した時(適切と思える記述が見つかるか、書かれていなかった場合は単に高望みしていただけとみなす。)に“お礼”欄に改めて記入致します。

  • lv4u
  • ベストアンサー率27% (1862/6715)
回答No.1

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 抜粋 --------------------- なにか参考になればいいのですが。

ggaogg
質問者

お礼

全く回答がなく、困っていましたので、回答頂けるだけでもありがたいです。(求めているのは明確な回答だけでなく、ヒントでもあればと思っています。) .rhtmlになっているのは、なんとなく.html.erbよりもrhtmlのほうがスッキリするという理由から無意識にしちゃってました。混乱させてスミマセン。(でも本当はXMLとHTMLを使い分けたいなら前者の記述が好ましいんですよね) Railsのバージョンによってルーティングの記述方法が異なるわけではなく、2.3.2では、適切にいくつかつのルーティング方法を使い分ける(この中の1つがRestful Routing)ので、あまりバージョンは気にする必要はないような気がしています。(ちなみにlv4uさんの抜粋だと、Regular Routesのようですが、その場合だと:method => :deleteの記述は必要ないですね。) サンプルプログラムが、オンライン上にあるのであれば、そのURLを教えて頂けないでしょうか。

関連するQ&A

  • railsのscaffoldにて作成したプロジェクトの

    railsのscaffoldにて作成したプロジェクトの ViewsのEditのlink_toの第二引数の値がどこで設定されているかわかりません。 例えば、モデル名を"student"にてscaffoldを実行すると、 index.html.erbのEditはこのようになります。 <td><%= link_to 'Edit', edit_student_path(student) %></td> この"edit_student_path"というのが、何者なのかよくわかりません。 どこかで定義されているわけでもなく、動的に生成されているようですが、 仕組みが全くわかりません。 出力されたhtmlの該当部分はこのようになってます。 <a href="/students/1/edit">Edit</a> 現在、scaffoldにて生成したコントローラとビューを一階層掘り下げようとしている所で、出くわした問題です。 controllers/students_controller.rb views/students/index.html.erb ↓ controllers/hoge/students_controller.rb views/hoge/students/index.html.erb どなたかご教授いただけますでしょうか? ちなみにrailsのバージョンは2.3.5です。

    • ベストアンサー
    • Ruby
  • IE6のページ内リンクについて

    IE6のページ内リンクなのですが、うまく作動する時と、しない時があります。 すんなり行く時は、行くのですが、読み込みが遅い場合など、アンカー先ではなく一番上を表示してしまします。 読み込むタイミングによって、効いたり効かなかったりするものなのでしょうか? それとも記述がまちがっているのでしょうか? アンカーは、いくつものリンクでひとつのアンカーを使用しています。 リンクごとにそれぞれアンカーを作ってみましたが、変化なしでした。 <br /> <a name="a01"></a> <?php use_helper('detail') ?> <div class="main_righ02"> <ul class="tab"> <li class="tab_01"> <?php echo $action['action'] == 'company' ? link_to($action['name'], '@companydata?companyname='.$company->getCompanyName().'#a01', array('class' => 'point_01')) : link_to('会社データ', '@companydata?companyname='.$company->getCompanyName().'#a01') ?> </li> <li class="tab_02"> <?php echo $action['action'] == 'fresh' ? link_to($action['name'], '@companydata?companyname='.$company->getCompanyName().'&type=fresh'.'#a01', array('class' => 'point_02')) : link_to('新卒採用', '@companydata?companyname='.$company->getCompanyName().'&type=fresh'.'#a01') ?> </li> <li class="tab_03"> <?php echo $action['action'] == 'career' ? link_to($action['name'], '@companydata?companyname='.$company->getCompanyName().'&type=career'.'#a01', array('class' => 'point_03')) : link_to('キャリア/教育', '@companydata?companyname='.$company->getCompanyName().'&type=career'.'#a01') ?> </li> <li class="tab_04"> <?php echo $action['action'] == 'welfare' ? link_to($action['name'], '@companydata?companyname='.$company->getCompanyName().'&type=welfare'.'#a01', array('class' => 'point_04')) : link_to('ワークスタイル', '@companydata?companyname='.$company->getCompanyName().'&type=welfare'.'#a01') ?> </li> </ul> </div> みてのとおり、URLもPHPで呼び出したりかなり複雑なページになっています。 ページも1ページのHTML内でリンクさせるよりも容量も半端なく重いと思います。 IE6以外のwindowsでは、IE7、Firefox3、Opera9、Safari3 MACだとSafari3、Opera9、Firefox3では正常にリンクされています。 だれか、分かる方教えてください。 よろしくお願いします。

    • ベストアンサー
    • HTML
  • rails3初心者 画像にリンクを貼りたい

    ご教授いただければ幸いです。 ==================================== carts/index → carts/deliveryへリンクしたい =================================== button_toを使うとちゃんと動きますが <%= button_to "購入する" , :controller => 'carts', :action => 'delivery' %> 画像に替えると上手く動きません。 <%= link_to (image_tag ("/images/cart_next.png"),:size=>"180x40")),'/delivery',{:method => :post}) %> link_toやbutton_toを使用して画像にリンクを貼る方法はございますでしょうか? =================================== carts/controller.rb =================================== def index @cart = find_cart end# def find_cart session[:cart] ||= Cart.new end def delivery @cart = find_cart @addressee = Addressee.new() end

    • ベストアンサー
    • Ruby
  • プルダウンメニューのselected部分のリンクをとる方法

    以前こちらで教えていただいたプルダウンメニューなのですが、 selected部分にもリンクがされてしまっているので、 これをリンクさせないようにしたいのですが、やり方がわかりません。 どなたか教えていただけますでしょうか? 宜しくお願いいたします。 ソース <form name="b" method="post" target="_blank" action="https://○○○○/reservationtop.asp"> <select name="***************" onChange="document.b.submit()"> <option selected>予約する</option> <option value="1">リンク3</option> <option value="2">リンク2</option> <option value="3">リンク3</option> </select>

  • フォームボタンをテキストに変更したい

    通常はCGI01のようにボタンなり画像なりをクリックするとcgiを叩けますが そのボタン部分をテキスト(リンクを張りユーザーにはわからないように)に変更したいのです。 つまり アクションとしては通常のリンクをクリックすると~index.html?link=1(value=1)を得たいのです。 のようなイメージです。 CGI02として予想を書きました。 うまく表現できないのですが、ご存知でしたらご教授お願いいたします。 CGI01 <form action="index.cgi" method="GET"> <input type="submit" name="link" value=1> <a href="">link</a> CGI02 <form action="index.cgi" method="GET"> <input type="hidden" name="link" value=1> <a href="">link</a>???

    • ベストアンサー
    • Perl
  • Flashからリンクする際のconfirmの記述

    こんにちは。 非常に初歩的な質問かと思いますが、教えてください。 いろんなサイト様を探してみたのたですが、なかなか上手くいかず・・・ 使用ソフトは、suzukaです。 簡単なムービークリップは作るのですが、アクションスクリプトはあまり使用したことがありません。 Flashバナーから外部ページへリンクする際、「confirm」を使用して、外部リンクということを表示させたく思っています。 イメージとしては、Flashバナーをクリックすると【外部ページを開きます】とダイアログが表示されます。 そのダイアログの、【OK】をクリックすると別ウィンドウで外部ページが開き、キャンセルをクリックするとダイアログだけが消えます。 【OK】と【キャンセル】、いずれの場合もFlashバナーが貼ってあるページは残ります。 フレームアクションには下記のように記述していますが、イメージ通りになりません。 ***************************************************************** // 空のムービークリップ link_mc を深度 0 に作成 this.createEmptyMovieClip("link_mc", 0); // link_mc にステージの大きさの透明な塗りを作図 link_mc.beginFill(0x000000, 0); link_mc.moveTo(0, 0); link_mc.lineTo(Stage.width, 0); link_mc.lineTo(Stage.width, Stage.height); link_mc.lineTo(0, Stage.height); link_mc.lineTo(0, 0); link_mc.endFill(); // link_mc をクリックしたときの動作を定義 link_mc.onRelease = function() { // リンク先 を 別窓で開く getURL("javascript:window.confirm('外部ページを開きます') ? window.open('リンク先のアドレス','target') "); ***************************************************************** ダイアログは表示されるのですが、【OK】をクリックしても【キャンセル】をクリックしても、別ウィンドウで外部ページが開いてしまいます。 しかも、Flashバナーが貼ってあるページには、真っ白な画面で[object]と表示されてしまいます。 イメージ通りにすることは可能でしょうか? 誠に恐れ入りますが、どうぞ宜しくお願いいたします。

    • ベストアンサー
    • Flash
  • WP タクソノミー前後の記事リンクについて

    お客様の声:タクソンミー名(voice) ようにarchive-voice.phpを作りました。 記事の中身表示はsingle.phpはつくらず、ブログ用のindex.phpと共通にしました。 ブログ用のindex.phpには ↓↓↓↓ <!--内容の出力--> <?php if(is_home() || is_category() || is_archive()): ?> <div class="kiji"> <?php if(have_posts()): while(have_posts()): the_post(); ?> <div class="kiji-box"> <p class="catch-taitle"><span class="styledeco"><?php the_category(','); ?></span></p> <!-- アイキャッチ画像設置 --> <?php if (has_post_thumbnail()): ?> <?php the_post_thumbnail('medium'); ?> <?php else: ?> <?php echo '<img src="'.get_template_directory_uri().'/img/noimage.gif" alt="noimage" />'; ?> <?php endif; ?> <h2><a class="linktitle" href="<?php the_permalink(); ?>"><?php the_title(); ?></a></h2> <p><?php echo mb_substr(get_the_excerpt(), 0, 120); ?><a class="linkleft" href="<?php the_permalink(); ?>">続きを読む</a>]</p> <div class="postinfo"><?php echo get_the_date(); ?>(<?php the_time(); ?>)<?php edit_post_link(' Edit',' |',''); ?></div> </div> <?php endwhile; endif; ?> </div> <?php else: ?> <!--フロントページ、アーカイブ、カテゴリ--> <!--単独ページ--> <?php if(have_posts()): while(have_posts()): the_post(); ?> <h2 class="blog-title"><?php the_title(); ?></h2> <div class="postinfo"><?php echo get_the_date(); ?>(<?php the_time(); ?>) | カテゴリー:<?php the_category(','); ?><?php edit_post_link(' Edit',' |',''); ?></div> <div class="blog_img"><?php if (has_post_thumbnail()): ?> <?php the_post_thumbnail('full'); ?> <?php endif; ?></div> <?php the_content(); ?> <?php endwhile; endif; ?> <?php endif; ?> <!--内容の出力ここまで--> <!--ページ送り--> <?php if (function_exists("pagination")) {pagination($additional_loop->max_num_pages); } ?> <!--個別の記事のページ送り--> <div id="pagelink"> <?php if(is_single()): ?> <p class="cell1"><?php previous_post_link('←%link', '%title', true, ''); ?></p> <p class="cell2"><?php next_post_link('%link→', '%title', true, ''); ?></p> <?php endif; ?> これだと、お客様の声のページに 記事の前後のリンクが表示されません。 <?php previous_post_link('« %link', '前の記事', TRUE, '', 'voice'); ?> <?php next_post_link('%link »', '次の記事', TRUE, '', 'voice'); ?> としてみたのですが、やはり表示されませんでした。 お客様の声とブログを共通にしているから表示されないのでしょうか・・・?

    • 締切済み
    • PHP
  • HTMLで別のフォルダのファイルにリンクする。

    HTMLとasp.netで開発をしています。 開発初心者です。 あるHTMLファイルから、別のフォルダのHTMLファイルへリンクし、 特定の位置に部分に移動したいのですが、うまくできません。 リンク元 <a href="../aa/bbb.aspx#test">test</a> リンク先 <th class="m"><a name="test">ここに飛んで!</a></th> リンク先のはじめに、 <form id="form1" name="form1" method="post" action="aaa.aspx">が 書かれているのですが、関係ありますか? リンク先を id や name で設定してみたりと、いろいろ試したのですが、うまくいきません(泣) ↓参考にしたURLです↓ http://www.tagindex.com/html_tag/link/a_url_id.html 宜しくお願いします。

    • ベストアンサー
    • HTML
  • html:linkでリンククリック時に画面入力値を取得してアクションへ渡す方法

    Strutsを使用したログイン画面を作成しています。ID・パスワードを入力して、html:linkをクリックしてログインするという処理を行いたいです。 そこで、リンクをクリックした際にJSPに記述しているhtml:textとhtml:passwordの値を取得して、Actionへ渡し、その情報を元にDBへの問い合わせを行いたいのですが、html:linkで複数パラメータを渡す方法が分からないので教えていただきたいです。 過去質も参考にしてみましたが、今回の質問に的を得た内容がなかったので質問させていただきました。 参考にした方法 (1)JavaScriptのonclickイベントでサブミットさせる ⇒例えばdocument.form.submit();と書けそうだが,html:formにはname属性がないため、formの指定ができない?! (2)Mapを利用してパラメータを渡す ⇒JSP内にMap設定のロジックを書く。Map(name,value)の形式で、value部分(画面入力値)はどうやって取得するのか分からない。 【struts-config】 <action-mappings> <action path="/login_Anken" type="action.Login_Anken_Action" name="login_Anken_Form" validate="true" input="/pages/Login_Anken.jsp" scope="request"> <forward name="success" path="/pages/MainMenu.jsp"/> <forward name="fail" path="/pages/Login_Anken.jsp"/> </action> 【Login_Anken.jsp】 <html:form action="/login_Anken" > <table border="0" width="100%" > <tr> <td class="pname" colspan="4" > ****システム </td> </tr> <tr> <td colspan="4"> <hr size="5" width="100%" noshade> </td> </tr> <tr> <td class="gname" colspan="4" > ログイン </td> </tr> <tr> <td colspan="4" > <hr size="5" width="100%" noshade> </td> </tr> <tr> <td width="25%" >&nbsp; </td> <td class="login"> ユーザID </td> <td width="20%""> <html:text property="userId"/> </td> <td width="20%">&nbsp; </td> </tr> <tr> <td width="25%" >&nbsp; </td> <td class="login"> パスワード </td> <td width="20%""> <html:password property="password" /> </td> <td width="20%">&nbsp; </td> </tr> <tr> <td width="10%" align="center" colspan="4" > <html:link action="/login_Anken" name="map">ログイン </html:link> </td> </tr> </table> </html:form> 【Login_Anken_Action.java】 public class Login_Anken_Action extends Action { public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception { ActionMessages errors = new ActionMessages(); //画面入力値を取得 Login_Anken_Form loginAnkenForm = (Login_Anken_Form) form; boolean isSuccess = false; Login_Anken_Business business = new Login_Anken_Business(); String userName = null; userName = business.getLoginUserName (loginAnkenForm.getUserId(), loginAnkenForm.getPassword()); //ユーザが存在すればログインOK isSuccess = (userName != null); if (isSuccess) { //TODO HttpSession session = request.getSession(); session.setAttribute("name", userName); return mapping.findForward("success"); } else { errors.add(ActionMessages.GLOBAL_MESSAGE, new ActionMessage("errors.login")); saveErrors(request, errors); return mapping.findForward("fail"); } } }

    • ベストアンサー
    • Java
  • ランダムリンクでリンク先を別ウィンドウに表示したい

    <form action="http://mkt.fem.jp/randomlink.cgi" method="get"> <input type="hidden" name="mode" value="link"> <input type="hidden" name="x" value="http://www.yahoo.co.jp/"> <input type="hidden" name="x" value="http://www.odn.ne.jp/"> <input type="hidden" name="x" value="http://www.bbiq.jp/"> <input type="hidden" name="x" value="http://www.ntt-west.co.jp/"> <input type="hidden" name="x" value="http://www.nttdocomo.co.jp/"> <input type="submit" value="タイトル~ランダムリンクだよ"></form> わかりやすい様にリンク先URLに差し支えのないものを入れました。 <input type="hidden" name="x" value="リンク先URL"> これを追加するだけでランダムリンク先は増えていきます。 質問ですが、これを表示させればリンク先は別ウィンドウにはなりません。今回は、リンク先を別ウィンドウに表示したいのです。 HTMLのどこを変えればいいのか、貼っていただけないでしょうか?