Sự khác biệt giữa form_for và form_tag là gì? Có gì khác nhau cho form_remote_for và form_remote_tag không?
Câu trả lời:
Bạn sẽ sử dụng form_for cho một mô hình cụ thể,
<% form_for @person do |f| %> # you can use f here
First name: <%= f.text_field :first_name %>
Last name : <%= f.text_field :last_name %>
<% end %>
Form_tag tạo biểu mẫu cơ bản,
<%= form_tag '/person' do -%>
<%= text_field_tag "person", "first_name" %>
<% end -%>
form_for
như lập luận đầu tiên của nó, thích một đối tượng ghi âm hoạt động; nó cho phép dễ dàng tạo hoặc chỉnh sửa biểu mẫu (để sử dụng nó trong chế độ xem "mới", bạn nên tạo một phiên bản trống trong bộ điều khiển, như:
def new
@foo = Foo.new
end
Nó cũng chuyển một biến biểu mẫu cho khối, để bạn không phải lặp lại tên mô hình trong chính biểu mẫu. đó là cách ưa thích để viết một biểu mẫu liên quan đến mô hình.
form_tag
chỉ cần tạo một thẻ biểu mẫu (và tất nhiên là âm thầm chuẩn bị một trường ẩn chống giả mạo, như form_for
); nó tốt nhất được sử dụng cho các biểu mẫu không phải mô hình (tôi thực sự chỉ sử dụng nó cho các biểu mẫu tìm kiếm đơn giản hoặc tương tự).
Tương tự, form_remote_for
và form_remote_tag
phù hợp với các biểu mẫu liên quan đến mô hình chứ không phải các biểu mẫu liên quan đến mô hình tương ứng, nhưng thay vì kết thúc bằng phương thức http chuẩn (GET, POST ...), chúng gọi phương thức ajax.
Tất cả điều này và hơn thế nữa đều có sẵn để bạn thưởng thức trong FormHelper và PrototypeHelper các trang tham khảo.
CHỈNH SỬA 2012-07-13
Prototype
đã bị xóa từ rails
lâu và các hình thức từ xa đã hoàn toàn thay đổi. Vui lòng tham khảo liên kết đầu tiên, với reguard cho :remote
tùy chọn của cả hai form_for
và form_tag
.
form_for
"thích" một đối tượng ActiveRecord?
Chúng phải tương tự:
<% form_for @person do |f| %>
<%= f.text_field :name %>
<% end %>
và:
<%= form_tag '/person' do %>
<%= text_field_tag "person[name]" %>
<% end %>
Nếu bạn muốn gửi cùng một tham số cho bộ điều khiển, bạn sẽ phải xác định điều này một cách rõ ràng.