Nói rằng tôi có các tuyến đường sau đó bị hạn chế để các tên miền phụ cụ thể:Bao gồm tên miền phụ cho tuyến đường bó buộc trong Rails url helper
App::Application.routes.draw do
constraints :subdomain => "admin" do
scope :module => "backend", :as => "backend" do
resources :signups
root :to => "signups#index"
end
end
constraints :subdomain => "www" do
resources :main
root :to => "main#landing"
end
end
Vấn đề của tôi là root_url
và backend_root_url
cả trả về một url trên các tên miền phụ hiện tại: "http : // tên miền phụ hiện tại .lvh.me/"thay vào đó tên miền phụ cụ thể cho tài nguyên. Tôi muốn root_url
để trở về "http: // www .lvh.me /" và backend_root_url
để trở về "http: // quản trị .lvh.me /" (hành vi nên giống nhau cho tất cả các nguồn tài nguyên dưới tên miền phụ).
tôi đã cố gắng thực hiện điều này trong đường ray 3.2 bằng cách thiết lập các tùy chọn url ở những nơi khác nhau, một là url_options trong điều khiển ứng dụng:
class ApplicationController < ActionController::Base
def url_options
{host: "lvh.me", only_path: false}.merge(super)
end
end
Có lẽ tôi cần phải ghi đè lên những người giúp đỡ url cách thủ công? Làm thế nào tôi sẽ tiếp cận điều đó (truy cập vào các tuyến đường vv)?
Chỉnh sửa: Tôi có thể nhận kết quả chính xác bằng cách sử dụng root_url (: subdomain => "admin") trả về "http: // admin .lvh.me /" bất kể tên miền phụ hiện tại. Tuy nhiên, tôi không muốn phải chỉ định điều này trên tất cả các mã.
Điều này rất tuyệt! Một vấn đề mà tôi gặp phải là điều này chỉ hoạt động nếu tên miền cơ sở của bạn chưa bao gồm tên miền phụ. Nếu có, bạn cần phải bao gồm đó là: host. Hoặc bạn có thể thiết lập: host bằng cách định nghĩa ApplicationController # default_url_options để trả về một hash chứa: host. – mltsy
Tôi lấy lại, ngay cả điều đó cũng không giải quyết được vấn đề nếu bạn đã có tên miền phụ cho tên máy chủ chính của bạn. Tôi đã không tìm ra cách để làm điều đó mà không cần viết phương thức trợ giúp của riêng bạn. – mltsy