自分でカスタマイズして、view ファイル名の読み込みを振り分けることができます。
例えば、ケータイ(DoCoMo, au, softbank)ごとに view のファイルを変えたいわよ、なんて時は、以下のようにすると吉でしょう!
今回はコントローラの名前の例として「Mobiles」を使いますが、これは何の名前でもよかよ!
config/initializers/mime_types.rb に以下を書き加える。
Mime::Type.register_alias "text/html", :docomo
Mime::Type.register_alias "text/html", :au
Mime::Type.register_alias "text/html", :softbank
app/controllers/application.rb に以下を書き加える。
before_filter :mobi_filter
def mobi_filter
if /\ADoCoMo/ =~ request.env["HTTP_USER_AGENT"]
request.format = :docomo
elsif /\AKDDI|\AUP.Browser/ =~ request.env["HTTP_USER_AGENT"]
request.format = :au
elsif /\ASoftBank|\AMOT|\AVodafone|\AJ-PHONE/ =~ request.env["HTTP_USER_AGENT"]
request.format = :softbank
else
request.format = :docomo # どれにも当てはまらないときは、とりあえず DoCoMo 扱いにする
end
end
※ \A という正規表現は、改行もひっくるめて文字列全体を扱った場合の本当の先頭、みたいた意味だそうですよ。
app/controllers/mobiles_controller.rb
class MobilesController < ApplicationController
def index
respond_to do |format|
format.docomo
format.au
format.softbank
end
end
end
そして、
app/views/mobiles/index.docomo.erb
app/views/mobiles/index.au.erb
app/views/mobiles/index.softbank.erb
ファイルにそれぞれのキャリアの HTML を書けば良いというわけです。
うーん、結構簡単に携帯サイトに取りかかれそうですね。すごいなあ。
[追記 08/02/08]
でもよく考えてみたら、全てのコントローラに、この respond_to ~ end を書くのは、面倒ですね。
私の知恵を絞って考えたのが以下のアイディアです。もう脳みそがありませんのでマルコメ味噌を補充必須。
もっといい方法があるかもしれませんので、是非賢者のアドバイスをお願いします。
まず、respond_to ~ end を共通ルーチンとして外のファイルに押しやります。
app/helpers/mobile_switch_controller_helper.rb
module MobileSwitchControllerHelper
def mobile_switch
respond_to do |format|
format.docomo
format.au
format.softbank
end
end
end
次に、このヘルパを全てのコントローラで使えるように以下の行を app/controllers/application.rb に追加します。
include MobileSwitchControllerHelper
そいでもって、この mobile_switch メソッドを、各コントローラのメソッドの最後で呼んであげます。
app/controllers/mobiles_controller.rb
class MobiController < ApplicationController
def index
・
・
(なんかの処理)
・
・
mobile_switch
end
def delete
・
・
(なんかの処理)
・
・
mobile_switch
end
end
みたいな?(by 滝沢美和子魂)
【広告】
スゴイ情報量のブログで、いろいろ見せてもらっています。
Railsとかは、仕事で使ってるのでしょうか。
ブログもはじめて間もないですが、よかったら
情報交換させてください。よろしくお願いします。