2011-02-08 35 views
12

Tôi có một bộ điều khiển kiểm soát biểu mẫu liên hệ với chúng tôi trên trang liên hệ. Bên trong tệp routes.rb Tôi có dòng có nội dung là match '/contact', :to => 'feedback#new'. Bây giờ khi biểu mẫu được điền chính xác, mọi thứ đều hoạt động tốt; url là '/ contact'. Tuy nhiên, khi biểu mẫu không được điền chính xác, bộ điều khiển của tôi renders 'new' và thay đổi url từ '/contact' thành '/feedback'. Ai đó có thể cho tôi biết lý do điều này xảy ra và cách tôi có thể khắc phục để nếu xác thực được kích hoạt và trang được hiển thị, url sẽ là /contact vẫn còn và không /feedback? Cảm ơn!Đường ray: Tại sao thay đổi url tùy chỉnh khi `render 'new'` được gọi?

mã điều khiển của tôi: enter image description here

+1

Bạn có thể liệt kê các nội dung của file 'config/file routes.rb' của bạn? [Chỉnh sửa] Mã xem cũng sẽ giúp ích. Nếu bạn đang sử dụng 'form_for (@feedback)', khi biểu mẫu đăng bài, nó sẽ gửi một POST tới '/ feedback' vì Rails sử dụng các URL RESTful. Hãy nhớ rằng các URL được dựa trên các tuyến đường đến bộ điều khiển và hành động, KHÔNG phải là tên của chế độ xem bạn đang hiển thị. 'FeedbackController # create' có khả năng được ánh xạ tới'/feedback' (kiểm tra 'rake routes') –

+0

Bạn đang đúng' FeedbackController # create' được ánh xạ tới tuyến '/ feedback'. Vậy tôi nên làm gì để trả lời câu hỏi trên? – agentbanks217

+0

Bạn đã bao giờ tìm ra điều này chưa? Tôi đang đấu tranh với điều này. – skaz

Trả lời

9
match '/contact', :to => 'feedback#new' 

tuyến đường đó sẽ chỉ phù hợp với /contact-FeedbackController#new.

Bạn sẽ muốn thêm để phù hợp với "bài" một phần để FeedbackController#create

match '/contact', :to => 'feedback#create', :via => :post, :as => :post_contact 
# change :as => to whatever path for this you'd like to use, ex :as => :create_contact 

Biểu mẫu của bạn bây giờ sẽ chuyển sang

= form_for(@feedback), :url => post_contact_path do |f| 

Chỉ cần sử dụng mặc định form_for sẽ cố gắng để tạo ra các đường đi từ a resources trong số routes.rb của bạn. Và, tôi giả định rằng tuyến đường là resources :feedback, tất nhiên sẽ tạo các tuyến đường trông giống như /feedback.

+1

Chỉ cần thông tin, tôi đã phải thêm ': via =>: get' vào #new path trong Rails 3. – Sooie

Các vấn đề liên quan