2012-03-28 28 views
6

Tôi đang nâng cấp từ đường ray 3.1.3 lên 3.2.2, nhưng vì một lý do nào đó, url_for luôn trả về/nội dung nếu tuyến đường không tồn tại.Tại sao url_for trả về/nội dung cho các tuyến đường không xác định?

Ví dụ:

url_for({}) #=> "/assets" 
url_for({action: 'fake', controller: 'notreal'}) #=> /assets?action=fake&controller=notreal 

Nhưng tôi muốn nó để ném ActionController bình thường :: RoutingError như bình thường ...

+0

Lạ. Kiểm tra tất cả các cấu hình env của bạn. Bạn đã xác định lại 'url_for'? Bạn đã chạy 'rake rails: update' chưa? – Austin

+0

Bạn đã giải quyết vấn đề này chưa? Tôi đang gặp vấn đề tương tự ở đây. Đối với kịch bản đơn giản nhất, tức là. Không có tài nguyên, chỉ cần tạo một DemoController và sử dụng redirect_to: action => 'show' từ hành động index. và nó tạo ra loại URL đó:/assets? action = show & controller = demo Tôi mong đợi điều này sẽ hiển thị mẫu chương trình. Bạn có tìm hiểu chuyện gì đang diễn ra không? – jlstr

+0

@ user766388 vẫn còn là một bí ẩn:/ – bkempner

Trả lời

0

Tôi nghĩ rằng bạn có tài sản trước khi biên dịch trên và kể từ khi hình ảnh không tồn tại trong thư mục tài sản, tên tệp biên dịch là null nhưng đường dẫn trỏ tới thư mục gốc của thư mục asset. Bạn cũng có gặp lỗi khi không tìm thấy nội dung được biên dịch trước trong nhật ký không?

Hãy thử chạy mà không cần biên dịch trước tài sản trong môi trường phát triển để vượt qua điều này. Tôi sẽ không rehash chi tiết về tài sản biên dịch trước - bạn có thể kiểm tra http://guides.rubyonrails.org/asset_pipeline.html để biết chi tiết về đường ống tài sản. Nếu bạn thấy vấn đề này chỉ trong môi trường sản xuất, có thể là do nền tảng máy chủ đang biên dịch trước các tài sản cho bạn.

Tuy nhiên, nếu bạn mong đợi điều này xảy ra trong quá trình sản xuất, bạn có thể muốn kiểm tra sự hiện diện của hình ảnh thay vì tắt biên dịch trước.

1

Đường ray không kiểm tra sự tồn tại của tuyến đường nếu bạn xây dựng tuyến đường thông qua chỉ định tác vụ điều khiển. Và tự nhiên nó hiển thị/tài sản cho {} tuyến đường.

Bạn nên chỉ định rõ các tuyến đường có tên trong routes.rb và sau đó sử dụng chúng cho url_for. Giống như:

url_for add_user_path

Điều này đảm bảo bạn có sẽ thành công (đối với tuyến đường hiện hữu tên) hoặc nhận được một lỗi.

HTH

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