Rails 怎麼切割 mobile computer view 技巧 - lustan3216/BlogArticle GitHub Wiki
最下面的網站推薦的作法不錯,實作如何切割手機版的頁面,沒有RWD的時候可以用(像FB網頁比較複雜 就無法RWD 所以做成電腦版和手機版 m.開頭的網站)
但是沒解決我想要切割Web view與 Native Web view(app 混成)的做法
可以拿到瀏覽器的資訊,可以用這個來判斷是不是手機
request.user_agent =~ /Mobile|webOS|Android) && (request.user_agent !~ /iPad/
#=> "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36"
以下做法是上面這篇文章的建議
def check_for_mobile
session[:mobile_override] = params[:mobile] if params[:mobile]
end
#此方法可以強迫變更是不是手機版,特殊情況可以用
def mobile_device?
if session[:mobile_override]
session[:mobile_override] == "1"
else
# Season this regexp to taste. I prefer to treat iPad as non-mobile.
(request.user_agent =~ /Mobile|webOS) && (request.user_agent !~ /iPad/)
end
end
#此方法可以自動用request裡面的瀏覽器資訊 自動辨認是不是手機版
helper_method :mobile_device?
#寫了在這行 controller 裡面的 mobile_device? 也可以用在 helper也就是view裡面
#以下是把方法寫好包成最後一個 check_for_mobile 這樣就可以在任何一個你想要變成手機頁面的controller下
`before_filter :check_for_mobile, :only => [:new, :edit]`
這樣你可以指定你要的頁面會不會自動變成手機版頁面
判定如果是手機的話他會去 app/mobile_view 下去找頁面
class ApplicationController < ActionController::Base
def check_for_mobile
session[:mobile_override] = params[:mobile] if params[:mobile]
prepare_for_mobile if mobile_device?
end
def prepare_for_mobile
prepend_view_path Rails.root + 'app' + 'views_mobile'
end
def mobile_device?
if session[:mobile_override]
session[:mobile_override] == "1"
else
# Season this regexp to taste. I prefer to treat iPad as non-mobile.
(request.user_agent =~ /Mobile|webOS) && (request.user_agent !~ /iPad/)
end
end
helper_method :mobile_device?
end
# app/controllers/posts_controller.rb
class PostsController < ApplicationController
# Render mobile or desktop depending on User-Agent for these actions.
before_filter :check_for_mobile, :only => [:new, :edit]
# Always render mobile versions for these, regardless of User-Agent.
before_filter :prepare_for_mobile, :only => :show
end