2010年9月13日月曜日

link_toでハマった



環境:2.3.8


今回、link_toを使って、独自のメソッドを実効し、処理が終わったらindexに戻るという所をやったのですが、なかなかうまくいかない。



<%= link_to( detail.name,

 ※最後の2行はパラメータです。


最初はこんな感じで作ったのですが、






ActiveRecord::RecordNotFound in AcceptsController#show


Couldn't find Accept with ID=check_on



ってエラーが返ってきました。





controllerには、もちろんそのメソッドを作ってあります。


あ、「AcceptsController#show」ってshowメソッド見に行ってる?


ルーティングの問題みたいですね。





調べてみると、routses.rbにルーティングを追加しないといけないようです。






map.connect "accepts/check_on", :controller => "accepts", :action => "check_on"


これでルーティングは解決。





しかし、ルーティングはうまくいきましたが、結果をみると、check_onメソッドの処理が空振りしている様子。


調べること1時間・・・






<a href="/accepts/check_on?accept_id=25&amp;item_id=1">test</a>


ぐはっ! "&"がHTML変換されてる><;





調べてみると、":escape => false"でHTML変換をOFFらないといけないようです。。。





調べたついでに見つけたのが、link_to_ifヘルパー。


リンクにするとき、「○○だったらリンク、そうでなければテキストのまま表示」としてくれるようです。


賢い。ちょうどいいので実装しよう!





条件の付け方に、若干詰まりましたが、なんとか以下のように実装できました。



<%= link_to_unless(detail.check_flg == "1",
detail.name,


なんとか出来た(^^;





ほんとうは、link_toだとURLの指定だけで処理が出来てしまうので、セキュリティ上は問題があります。


DB更新などがある場合は、submit_tagなどsubmitボタンを使った方がいいですね。





0 件のコメント:

コメントを投稿