2012-05-01 20 views
9

Tôi có một hình thức:Rails & Haml: không thể có được một hình thức để làm việc

%form{:action:method => "post"} 
    %fieldset 
     %label{:for => "title"} Title: 
     %input{:name => "title", :type => "text", :value => ""}/ 
     %label{:for => "notes"} Notes: 
     %input{:name => "notes", :type => "text", :value => ""}/ 
    %a.finish{:href => "/rotas", :method => "post"} Finish! 

Tuy nhiên, liên kết dường như không muốn làm việc - có lẽ tôi đang thiếu cái gì cơ bản trong Haml, hoặc trong Rails.

Tôi có: rotas tài nguyên trong routes.rb và bộ điều khiển của tôi có phương thức tạo lỗi.

Mọi trợ giúp đều được đánh giá cao! Cảm ơn!

btw. Tôi tạo ra bằng cách sử dụng giàn giáo - và có vẻ như là cùng một hình thức được sử dụng để chỉnh sửa một mô hình và cho một sáng tạo. Làm cách nào để biết liệu có thực hiện POST hay PUT không?

+0

Lưu ý: Tôi cập nhật câu trả lời của tôi, tôi nghĩ vấn đề là đơn giản lúc đầu sau đó nhận ra bạn đã có vấn đề hơn xảy ra. – Andrew

Trả lời

10

1) Bạn muốn đặt mục tiêu của mẫu trong hành động:

%form{ :action => "/rotas", :method => "post" } 

2) Bạn muốn có một nút gửi, không phải là một liên kết. Hãy thử điều này:

%input{ :type => "submit" } Finish! 

Ngoài ra, tôi không chắc chắn lý do tại sao bạn đang đặt một / sau khi đầu vào của bạn, điều đó không cần thiết cho bất cứ điều gì. Tôi không nghĩ rằng nó đau, nhưng tôi không thấy lý do gì để đưa nó vào.

3) Cuối cùng, Rails ước không phải là để sử dụng các yếu tố Haml mà là hình thành những người giúp đỡ, mà sẽ trông như thế này:

= form_tag '/rotas' do 
    = field_set_tag do 
    = label_tag :title, 'Title:' 
    = text_field_tag :title 
    = label_tag :notes, 'Notes:' 
    = text_field_tag :notes 
    = submit_tag 'Save Changes' 

Một lý do cho điều này là Rails sẽ bao gồm một ẩn Authenticity Token trường trong biểu mẫu cho bạn và các trình điều khiển Rails bình thường sẽ không chấp nhận các biểu mẫu được gửi mà không có giá trị mã thông báo xác thực này. Điều này là để ngăn chặn Cross-Site Request Forgery.

Hãy thử điều này và xem những gì bạn nhận được.

Xem FormTagHelper API để tham khảo.

+0

mà không làm điều đó - tuy nhiên, tôi đã nhận nó làm việc theo cách khác ... kiểm tra câu trả lời của tôi – Karan

+0

ah, chỉ cần nhìn thấy sửa đổi của bạn ... – Karan

+0

tôi chỉ có nó hoạt động - tôi đã đăng nó như là một câu trả lời - bạn làm gì tính? – Karan

0

tôi nhận nó làm việc bằng cách sử dụng đoạn mã sau:

= form_tag rotas_path do 
    = label :rota, :name, 'Name' 
    = text_field :rota, 'name' 
    = submit_tag 'Save Changes' 
Các vấn đề liên quan