Tôi đang sử dụng mã này (lấy từ here) trong ApplicationController để phát hiện iPhone, iPod Touch và iPad yêu cầu:Loại mime di động có thể quay lại "html" trong Rails không?
before_filter :detect_mobile_request, :detect_tablet_request
protected
def detect_mobile_request
request.format = :mobile if mobile_request?
end
def mobile_request?
#request.subdomains.first == 'm'
request.user_agent =~ /iPhone/ || request.user_agent =~ /iPod/
end
def detect_tablet_request
request.format = :tablet if tablet_request?
end
def tablet_request?
#request.subdomains.first == 't'
request.user_agent =~ /iPad/
end
này cho phép tôi để có mẫu như show.html.erb, show.mobile.erb và show.tablet.erb, điều này thật tuyệt, nhưng có vấn đề: Có vẻ như tôi phải định nghĩa mọi mẫu cho mỗi loại mime. Ví dụ: yêu cầu hành động "hiển thị" từ iPhone mà không xác định show.mobile.erb sẽ ném một lỗi ngay cả khi show.html.erb được xác định. Nếu thiếu mẫu thiết bị di động hoặc máy tính bảng, tôi chỉ muốn quay lại mẫu html. Nó không có vẻ quá xa vời vì "điện thoại di động" được định nghĩa là một bí danh để "văn bản/html" trong mime_types.rb.
Vì vậy, một số câu hỏi:
- Tôi có làm sai điều này? Hoặc là có một cách tốt hơn để làm điều này?
- Nếu không, tôi có thể nhận loại điện thoại di động và máy tính bảng để quay lại trên html nếu tệp trên điện thoại di động hoặc máy tính bảng không có mặt không?
Nếu có vấn đề, tôi đang sử dụng Rails 3.0.1. Cảm ơn trước cho bất kỳ con trỏ.
EDIT: Điều tôi quên đề cập: Cuối cùng tôi sẽ chuyển sang các tên miền phụ riêng biệt (như bạn có thể thấy nhận xét trong ví dụ của tôi) để tải mẫu thực sự cần tự động bất kể before_filter
có chạy.
Đây là một cuộc thảo luận tại đường ray để tham khảo: https://github.com/rails/rails/issues/3855 –