togatttiのエンジニアメモ

過度な期待はしないでください.

Railsでスマートフォン用ページへの振り分け

Railsで作成したWebサイトをスマートフォンから閲覧してみたら、
ひどくスタイルが崩れていたので、スマートフォン用のページを
別途作ることにした。

その際に必要なことは外部からのアクセスがPCからなのか、スマート
フォンなのかという振り分け。

スマートフォンからのアクセスであれば、スマフォ用のページへ誘導する。

流れ的には

  • スマフォ用のページのコントローラを作成
  • コントローラとビューを設定
  • ルートを設定
  • メインのコントローラに振り分けメソッドを追加

以上。

今回はmobilesというコントローラを作成した。

rails generate controller mobiles

create app/controllers/mobiles_controller.rb
invoke erb
create app/views/mobiles
invoke rspec
create spec/controllers/mobiles_controller_spec.rb
invoke helper
create app/helpers/mobiles_helper.rb
invoke rspec
create spec/helpers/mobiles_helper_spec.rb
invoke assets
invoke coffee
create app/assets/javascripts/mobiles.js.coffee
invoke scss
create app/assets/stylesheets/mobiles.css.scss

各ファイルに追記。

  • controllers/mobiles_controller

class MobilesController < ApplicationController
def index
end
end

  • views/mobiles/index.html.erb

Sorry. This application is not applied to mobile devices.

Operating environment is on PC.

今回は推奨環境はPCですという通知を掲載した。

−routes.rb

resoures mobiles

mobilesというルーティングを設定。

  • アクセスを受け付けるコントローラ。

before_filterにより、コントローラが呼び出される際に、
一度アクセスの振り分けを行う設定。

request.env["HTTP_USER_AGENT"]でアクセス元がどの
機器からのアクセスなのかを取得できる。

MobileとAndroidと文字列が含まれていれば、それを
モバイルとして判断し、ビューを振り分ける。

Ruby1.9.3 ,Rails3.2.13だが、今後汎用的に使う機会がありそう。