Mẫu phân giải được sử dụng để tra cứu chế độ xem chỉ có thể chứa các biến được đăng ký với lớp ActionView::LookupContext
. Bước đầu tiên do đó là đăng ký một biến mới (subdomain
) với lớp LookupContext
. Bạn nên làm điều này trong một initializer:
ActionView::LookupContext.register_detail(:subdomain) do
['default_subdomain']
end
Bây giờ LookupContext
biết về subdomain
, nó có thể được đưa vào mô hình giải quyết. Để cụ thể hơn về việc thay đổi mô hình giải quyết, xem ActionView::FileSystemResolver
documentation, nhưng về cơ bản bạn nên bao gồm những điều sau đây, cũng trong một initializer:
ActionController::Base.view_paths = ActionView::FileSystemResolver.new(
Rails.root.join('app', 'views'),
':prefix/:action{.:locale,}{.:subdomain,}{.:formats,}{.:handlers,}'
)
mô hình này được cuối cùng truyền cho Dir.glob
(sau khi :*
biến đã được thay thế). Mẫu toàn cầu {.:subdomain,}
có nghĩa là “.:subdomain
hoặc không có gì”, cung cấp dự phòng cho tệp xem không có tên miền phụ nếu không tìm thấy tệp có tên miền phụ.
Bước cuối cùng là để cập nhật ApplicationController
của bạn để vượt qua các tên miền phụ cho LookupContext
:.
class ApplicationController < ActionController::Base
def details_for_lookup
{:subdomain => [request.subdomain]}
end
end
(Câu trả lời này đã được chủ yếu là tìm ra bằng cách đọc mã nguồn, một số các tính năng này không được minh chứng Đó là thử nghiệm với Rails 3.2.5)
cảm ơn! đó là _exacly_ những gì tôi cần. – user1105595
Vui vì tôi có thể trợ giúp và chào mừng bạn đến với Stack Overflow. Nếu câu trả lời giải quyết được vấn đề của bạn, bạn nên đánh dấu nó là được chấp nhận, thông tin thêm về cách thức và lý do tại sao: http://meta.stackexchange.com/a/5235 – georgebrock