Tôi đang phát triển một trang web Rails 2.3.1. Trong toàn bộ trang web, tôi cần phải có một mẫu để tạo Bài đăng trên các trang khác nhau (Trang chủ, Tạo trang Bài đăng, Trang danh sách bài đăng, trang Danh sách nhận xét, v.v. - đủ để nói rằng biểu mẫu này cần phải có trên nhiều trang được phân phối bởi một loạt các bộ điều khiển). Mỗi trang này hiển thị nhiều thông tin khác được truy xuất trong bộ điều khiển/hành động tương ứng. Ví dụ: trang chủ liệt kê 10 bài đăng mới nhất, nội dung được lấy từ DB, v.v.Thực hành tốt nhất cho Rails để có cùng một biểu mẫu trên nhiều trang
Vì vậy, tôi đã chuyển biểu mẫu Bài đăng thành một phần riêng và bao gồm phần này trên tất cả các trang cần thiết. Lưu ý rằng các hình thức trong một phần POST đến/câu hỏi (mà các tuyến đường để PostsController :: tạo - đây là hành vi ray mặc định).
Sự cố tôi đang gặp phải là khi biểu mẫu Bài đăng không được hoàn thành chính xác, theo mặc định là PostsController :: create method render's questions/new.html.erb, ngay cả khi biểu mẫu được gửi từ trang chủ (/ home/index.html.erb).
Tôi đã thử thay đổi biểu mẫu một phần để gửi "submitted_controller" và "submitted_action" và trong PostsController :: create, khi @ post.save? == false, tôi render action => "../submitting_controller/submitting_action" (Đó là hơi hacky, nhưng cho phép bạn render các hành động từ non-PostsController's).
Điều này dường như hoạt động OK trên bề mặt. Biểu mẫu không đầy đủ được hiển thị trong khung nhìn đã gửi nó với tất cả thông báo @ post.errors chính xác, v.v. Vấn đề là TẤT CẢ dữ liệu khác trên các trang không hiển thị, bởi vì các phương thức submit_controller/submitted_action thực tế không được gọi, chỉ chế độ xem được liên kết. (Remeber, tôi đã làm một render mà bảo tồn các đối tượng instance, chứ không phải là một redirect_to mà không bảo vệ đối tượng instance @post có tất cả các thông báo lỗi và các giá trị đã gửi.)
Theo như tôi thấy tôi có hai lựa chọn :
1) Tôi có thể lưu trữ đối tượng @post trong phiên khi @ post.save? không thành công trong PostsController :: create, redirect_to submitted_controller/submit_action, tại thời điểm đó tôi kéo đối tượng @post ra khỏi phiên và sử dụng nó để điền lại các thông báo biểu mẫu/lỗi. (Theo như tôi hiểu, lưu trữ các đối tượng trong phiên là thực hành BAD trong đường ray)
2) Tôi có thể di chuyển tất cả các logic được sử dụng để kéo dữ liệu biểu mẫu tạo không đăng bài từ các submit_controller/submit_action khác nhau, đặt nó vào ApplicationController, tạo ra một tuyên bố chuyển đổi khổng lồ trong PostsController :: tạo cho submit_controller/submitted_action và gọi các phương thức trong ApplicationController để lấy tất cả các dữ liệu bổ sung cần thiết cho mỗi lần render trang của trình đệ trình.
Suy nghĩ về cách tốt nhất để thực hiện việc này trong Rails?
Emfi, Điểm hay về các thuộc tính lồng nhau. Điều đó đã không xảy ra với tôi. Ngoài ra điểm bạn thực hiện về việc mặc định là không phải JS tôi nghĩ là quan trọng. Cảm giác tôi đã nhận được mặc dù là người hỏi (vì thiếu một xử lý tốt hơn :) sẽ kết thúc làm tổn thương hiệu suất ứng dụng thông qua số lượng hành động DB anh/cô ấy sẽ cần phải thực hiện reconstituting tất cả các đối tượng. – robertpostill
Về điều này, chúng tôi đã đồng ý. Tuy nhiên, sự khác biệt giữa non-javascript và AJAX thường là một cuộc gọi link_to_remote, một RJS làm cho một khuôn mẫu, và có thể là một logic điều khiển nhỏ để tránh các cuộc gọi cơ sở dữ liệu mà bạn thường làm theo cách khác. – EmFi
EmFi, Thật không may là mô hình Post và các mô hình của những người điều khiển bạn sẽ sử dụng để hiển thị biểu mẫu có thể không liên quan. (HomeController thậm chí không có mô hình sao lưu). Tôi làm một số kiểm tra trên một cơ chế captcha trong PostController :: tạo (trường captcha không phải là một phần của mô hình bài viết, mà là mô-đun riêng của nó). Tôi nghĩ cả bạn và Robertpostill đều đúng trong AJAX là cách để giải quyết vấn đề này.Tôi chỉ cần tìm ra cách để làm điều đó với jQuery (tôi chọn không sử dụng Prototype, pref cá nhân) và không muck lên bất cứ điều gì trong Rails. – empire29