2012-04-29 34 views
8

Từ những gì tôi hiểu, link_to được sử dụng để lấy các phương thức và button_to được sử dụng cho phương thức đăng.Haml: link_to vs button_to

Mặt khác, tôi được thông báo rằng với ngữ nghĩa HTML5, <button> được sử dụng cho bất kỳ loại nút bấm ... tốt, có thể nhấp nào. Trong trường hợp tôi có nút có thể nhấp gửi người dùng đến biểu mẫu để điền vào, tôi có nên tạo một số button_to hoặc link_to không?

Trả lời

15

Nó đơn giản hơn bạn nghĩ. Các phương pháp đó là những người giúp đỡ Rails và không liên quan gì đến haml. Có, một phương pháp là để lấy và một phương pháp khác cho phương thức đăng bài. Nếu bạn cần đăng bất kỳ dữ liệu nào lên bộ điều khiển, hãy sử dụng button_to (ví dụ: khi xóa bản ghi). Nếu không, link_to là đủ.

Hơn nữa, bạn có thể làm link_to dữ liệu đăng tải sử dụng :method tham số:

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

Trả lời câu hỏi của bạn, sử dụng link_to.

+0

điều này sẽ thêm 'phương thức: 'post'' không phải' phương thức dữ liệu:' bài đăng 'vào liên kết –

2

Nếu bạn chỉ muốn gửi người dùng đến một nơi nào đó, đó là yêu cầu. Vì vậy, bạn nên sử dụng link_to trong trường hợp này. Bằng cách này, bạn có thể sử dụng link_to cho các yêu cầu bài viết và các yêu cầu khác (như button_to) nếu bạn sẽ chỉ định: phương thức. Ví dụ: =link_to "some path", some_path, :method => :get

3

Bạn nên sử dụng liên kết để trỏ người dùng đến tài nguyên, như bài viết.

Nhưng bạn phải sử dụng các nút để trỏ đến một hành động (như "Tạo"/"Gửi" trên trang chỉnh sửa của bạn). Nếu điều này không đồng ý với giao diện của bạn - hãy tạo kiểu cho chúng như một liên kết.

Đây là lý do: bạn không thể trỏ người dùng của bạn đến bất kỳ hành động nào không được thực hiện qua link_to nếu anh ấy thiếu hỗ trợ javascript. Vì vậy, các nút là các tùy chọn duy nhất để làm cho hành động gửi/hủy của bạn được kích hoạt trong trường hợp này.

Hãy sử dụng cả hai cách tiếp cận nếu liên kết trỏ đến trang cuối cùng dẫn đến sửa đổi tài nguyên (liên kết/nút thành trang chỉnh sửa/tạo biểu mẫu), như trong trường hợp của bạn.

0

Sự khác biệt về nguyên tắc chính giữa #link_to, và #button_to#link_to chỉ tạo ra một thẻ liên kết A, và làm theo yêu cầu AJAX đơn giản mà không có một dữ liệu bổ sung, trong khi #button_to tạo ra một FORM với một dữ liệu tùy chỉnh, vì vậy các hình thức có thể được sử dụng để thực hiện yêu cầu AJAX mở rộng tới máy chủ web. Dữ liệu biểu mẫu bao gồm CSRF-token được nhúng, được sử dụng để xác thực yêu cầu. Trong trường hợp #link_to CSRF-token phải được serualized và gửi trong sự kiện on_click.