2013-01-14 30 views
8

Tôi có một biểu mẫu cơ bản bằng cách sử dụng trình trợ giúp form_tag làm việc tốt, nhưng tôi muốn thêm nút hủy, cú pháp để thực hiện điều này là gì? Tôi muốn nút hủy xuất hiện dưới dạng nút chứ không phải liên kết, sau đó đưa người dùng đến một URL khác (cho biết họ không muốn gửi biểu mẫu).Ruby on Rails: cách thực hiện nút Hủy trong form_tag

TY, Fred

+0

bạn muốn làm điều gì? – hdgarrood

Trả lời

21

Nếu bạn muốn xóa/đặt lại các trường biểu mẫu, hãy làm những gì dchacke gợi ý.

Tuy nhiên, tôi thường mong đợi nút Hủy để không xóa biểu mẫu, nhưng để đưa tôi ra khỏi biểu mẫu, có nghĩa là tôi không định gửi nó.

Nếu bạn muốn sau này, tôi chỉ muốn tạo một liên kết (hoặc nút) đến trang mà bạn muốn đến khi hủy bỏ, chẳng hạn như:

=link_to 'Cancel', my_page_path 

Hoặc nếu bạn muốn có một nút:

= button_tag "Cancel", :type => 'button' 

Sau đó thêm video này vào điều khiển của bạn:

before_filter :check_for_cancel, :only => [:create, :update] 

def check_for_cancel 
    if params[:commit] == "Cancel" 
    redirect_to my_page_path 
    end 
end 
+0

Điều trên sẽ làm cho liên kết Hủy xuất hiện dưới dạng một nút? Đó là những gì tôi muốn. –

+0

Tôi đã cập nhật câu trả lời – 99miles

+0

Cảm ơn, có vẻ tốt, tôi nhận được lỗi "ActionView :: Template :: Error (phương thức undefined' button_tag 'cho # <# : 0xb2a2e4d4>): "tuy nhiên, trông giống như nó không thích phần tử button_tag? –

22

Nếu bạn có nghĩa là một nút reset, dán sau bên trong hình của bạn:

<%= button_tag "Reset", type: :reset %> 

Tested nó, nó hoạt động tốt và reset tất cả các trường trong biểu mẫu.

+0

Xin lỗi đã rõ ràng hơn, tôi không muốn đặt lại các trường, tôi hủy bỏ để hủy bỏ biểu mẫu và đi đến một url khác. –

2

Thay vì một thẻ gửi, tôi sẽ đề nghị một thẻ <button>, bởi vì tham số :commit có thể được bản địa hóa, do đó làm cho nó trở thành một nỗi đau để đánh giá trong bộ điều khiển.

A button_tag có thể có tên/giá trị như bất kỳ trường nào khác, vì vậy về cơ bản bạn có thể tạo một lá cờ với nó.

Các mã sau đây là những gì tôi sẽ sử dụng:

trong giao diện:

<%= button_tag t('buttons.cancel'), type: "submit", name: "cancel", value: true %> 

trong bộ điều khiển:

before_filter :redirect_cancel, only: [:create, :update] 

private 

def redirect_cancel 
    redirect_to my_page_path if params[:cancel] 
end 

nhiều bụi IMHO, bởi vì bạn dựa trên cờ thay vì giá trị hiển thị được bản địa hóa (có khả năng).

1

button_to có vẻ là một cách đơn giản để đạt được điều tương tự, nhưng nó phải được đặt bên ngoài biểu mẫu, nhưng điều đó có thể dễ dàng được sửa bằng css.

Ngoài ra, để giải quyết vấn đề này theo cách tổng quát hơn (cũng làm việc để chỉnh sửa tài nguyên lồng nhau trên tài nguyên chưa được duy trì), bạn có thể tạo biểu mẫu riêng cho hủy có chứa tất cả các giá trị gốc dưới dạng trường ẩn .