2011-01-16 15 views
6

Próbuję użyć pomocnika szynowego button_to. I napisał następujący kod:Button_to w Ruby on Rails złe trasy

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

i mam następujący komunikat o błędzie

No route matches "/items/1/edit"

Ale kiedy odśwież stronę to idzie do właściwego działania. Adres URL strony, którą otrzymuję, to localhost:3000/items/1/edit, który jest prawidłowym adresem URL. Jeśli zmienię komendę button_to na link_to załadowaną stronę bez żadnych błędów. Co oznacza ten kod:

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

ładunki porządku. Może jest jakaś cecha z button_to Nie jestem tego świadomy, ale jestem zagubiony.

Odpowiedz

5

Myślę, że możesz niewłaściwie używać przycisku button_to. Zawsze uważałem, że jeśli łączysz się z działaniem edycji, powinieneś używać linku link_to. Wygląda na to, że przyciski przypominają działania, które wymagają umieszczenia/umieszczenia danych, takich jak aktualizacja formularza lub usunięcie rekordu.

Aktualizacja:

Domyślnie button_to używa POST zamiast GET. Stąd działa, gdy po prostu odwiedzasz URL (np. GET).

+0

Jak można zastąpić tę funkcję? – Nayish

+0

Jeśli chcesz, aby wyglądał jak przycisk, użyłbym odnośnika i użyję klasy CSS, która sprawi, że twój link będzie wyglądał jak przycisk. Świetny artykuł tutaj: http://www.smashingmagazine.com/2009/11/18/designing-css-buttons-techniques-and-resources/ – dontangg

+2

@nayish można ustawić metodę, aby uzyskać: 'button_to 'edit', edit_item_path (@item),: method =>: get' –

2

button_to domyślnie POST, a link_to domyślnie GET.

Jeśli naprawdę potrzebujesz button_to możesz zmienić domyślną metodę GET dla edycji i innych linków.

dla Ex:

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