2012-04-29 15 views
8

Z tego co rozumiem, link_to jest używany do uzyskania metod, a button_to jest używany do metod post.Haml: link_to vs button_to

Z drugiej strony powiedziano mi, że z semantyką HTML5, <button> jest używany do każdego klikalnego przycisku ... no, przycisku. W przypadku, gdy mam klikalny przycisk, który wysyła użytkownika do formularza do wypełnienia, czy powinienem utworzyć button_to lub link_to?

Odpowiedz

15

To jest prostsze, niż myślisz. Te metody są pomocnikami Railsów i nie mają nic wspólnego z haml. Tak, jedna metoda jest dla get i inna dla metod post. Jeśli chcesz wysłać jakiekolwiek dane do kontrolera, użyj button_to (na przykład podczas usuwania rekordu). W przeciwnym razie wystarczy link_to.

Ponadto, można dokonać link_to publikowania danych za pomocą :method parametr:

= link_to "Something", some_path, :method => :post 

Odpowiadając na twoje pytanie, użyj link_to.

+0

to dodaje 'method: 'post'', a nie' data-method:' post'' do linku –

2

Jeśli chcesz po prostu wysłać użytkownika gdzieś, jest to żądanie pobierania. Dlatego w tym przypadku powinieneś użyć łącza link_to. Przy okazji możesz użyć łącza do postów i innych żądań (np. Button_to), jeśli wybierzesz: method. Na przykład: =link_to "some path", some_path, :method => :get

3

Użytkownik powinien użyć linków, aby skierować użytkownika do zasobu, takiego jak artykuł.

Musisz jednak użyć przycisków, aby wskazać akcję (np. "Utwórz"/"Wyślij" na stronie edycji). Jeśli to nie zgadza się z twoim interfejsem - utwórz je jak link.

Oto dlaczego: nie możesz skierować użytkownika do żadnej akcji innej niż GET przez link_to, jeśli nie ma obsługi JavaScript. Tak więc przyciski są jedynymi opcjami, które powodują, że akcja wysyłania/niszczenia jest uruchamiana w tym przypadku.

Możesz używać obydwu metod podając , jeśli twoje łącze wskazuje stronę, która ostatecznie prowadzi do modyfikacji zasobu (link/przycisk do strony edycji/tworzenia, która pokazuje formularz), tak jak w twoim przypadku.

0

Zasada Główną różnicą pomiędzy #link_to i #button_to jest to, że #link_to właśnie tworzy znaki łącza A i sprawia, że ​​prosty żądania AJAX bez dodatkowych danych, natomiast #button_to tworzy FORM z danych niestandardowych, więc forma może być używany do tworzenia rozszerzonego żądania AJAX na serwer WWW. Dane formularza zawierają wbudowany token CSRF, który służy do uwierzytelniania żądania. W przypadku #link_to token CSRF musi zostać nadpisany i wysłać w zdarzeniu on_click.