2011-01-16 20 views
6

私はbutton_toレールヘルパーを使用しようとしています。私は、次のコードを書いた:Ruby on Railsの悪いルートのButton_to

<%= button_to 'Edit Item', edit_item_path(@item), :class => 'mark-button' %>

をし、次のエラーメッセージ

No route matches "/items/1/edit"

を得た。しかし、私はページを更新する際には、適切な行動に行きます。取得したページのURLは、正しいURLであるlocalhost:3000/items/1/editです。 button_toコマンドをlink_toに切り替えると、ページはエラーなしでロードされます。このコードを意味:

<%= link_to 'Edit Item', edit_item_path(@item), :class => 'mark-button' %>

負荷罰金。多分私は気づいていないのbutton_toのいくつかの機能がありますが、私は失われています。

答えて

5

あなたはボタンを誤って使用している可能性があります。私はいつもあなたが編集アクションにリンクしているなら、あなたはlink_toを使っているべきだと思っていました。ボタンは、フォームの更新やレコードの削除など、データをポストしたり置く必要があるアクションのようです。

更新:デフォルトでは

、button_toはGETの代わりにPOSTを使用しています。したがって、URL(つまりGET)にアクセスすると動作します。

+0

どのように私は、この機能を無効にすることができますか? – Nayish

+0

ボタンのように見せたいのであれば、link_toを使用し、リンクをボタンのように見せるCSSクラスを使用します。素晴らしい記事はこちら:http://www.smashingmagazine.com/2009/11/18/designing-css-buttons-techniques-and-resources/ – dontangg

+2

@nayish次のようなメソッドを設定できます: 'button_to 'edit'、edit_item_path (@ item)、:method =>:get' –

2

button_toのデフォルトはPOSTで、link_toのデフォルトはGETです。

button_toが本当に必要な場合は、編集やその他のリンクのデフォルトメソッドをGETに変更できます。 EX用

<%= button_to 'Edit', edit_user_path(@user), :method => :get %>