Tôi có hai không gian tên, mỗi bộ điều khiển và người dẫn chương trình của riêng lớp của nó: Member::DocumentsController
Member::DocumentPresenter
Guest::DocumentsController
Guest::DocumentPresenter
Rails lớp bốc bỏ qua namespaced lớp khi một lớp cùng tên trong không gian tên gốc được nạp
Cả hai thuyết trình kế thừa từ ::DocumentPresenter
.
điều khiển truy cập thuyết trình của mình mà không gian tên cụ thể, ví dụ .:
class Guest::DocumentsController < ActionController::Base
def show
DocumentPresenter.new(find_document)
end
end
này thường gọi là người dẫn chương trình trong cùng một không gian tên. Tuy nhiên đôi khi trong môi trường phát triển tôi thấy cơ sở :: DocumentPresenter đang được sử dụng.
Tôi nghi ngờ nguyên nhân là cơ sở đó :: DocumentPresenter đã được tải, do đó việc tự động tải lớp Rails không bận tâm để xem xét thêm. Đây có phải là trường hợp? Nó có thể xảy ra trong môi trường sản xuất không?
tôi có thể nghĩ ra hai giải pháp:
- đổi tên lớp cơ sở để DocumentPresenterBase
- đòi hỏi một cách rõ ràng các file người dẫn chương trình thích hợp trong các tập tin điều khiển
Có một giải pháp tốt hơn?
Nếu bạn đang 'show' phương thức bên trong' Guest :: DocumentsController' sẽ chỉ làm việc với 'Guest :: DocumentPresenter' nó sẽ được đơn giản nhất để xác định không gian tên khi gọi nó là' mới' phương pháp. – deefour
@ Deefour haha yes Tôi quên mất điều hiển nhiên nhất - cảm ơn. Tôi sẽ đợi một lúc để có một giải pháp hoàn hảo, điều này sẽ không khiến tôi thêm các ký tự trên tất cả các tệp nguồn của mình. –
Chỉ AFAIK Rails preloads Mô hình trong 'production' vì vậy điều này cũng xảy ra trong quá trình sản xuất (nhưng tôi không thể tìm thấy tài liệu thực tế trên máy ATM này). – Laas