Paradigm Shift Design

ISHITOYA Kentaro's blog.

iphone/ipod touch用ビューへ振り分け

jpmobileというのを見つけて、これでiphone用に振り分けができるかな?とも思ったのだけれど、trunkをみても無かったので、jpmobileに組み込んでみようとするも・・・


正直言って、右も左もわからないのに機能追加できません。ので、jpmobileActionViewを参考に、iphoneのときだけ、new_iphone.html.erbを探すようにしてみた。


Ruby on Rails と Eclipse による iPhone アプリケーション開発: 第 1 回 iPhone 向けコンテンツを提供するあたりに詳しい情報があるけれど、iphoneのUserAgentは

Mozilla/5.0 (iPhone; U; CPU like Mac OS X; en) AppleWebKit/420+ (KHTML,
    like Gecko) Version/3.0 Mobile/1A543 Safari/419.3

な感じ。touchはというと、

Mozilla/5.0 (iPod; U; CPU like Mac OS X; ja-jp) AppleWebKit/420.1 (KHTML,
    like Gecko) Version/3.0 Mobile/4A102 Safari/419.3

みたいで、iphoneとtouchを同時に検出するなら、上記資料にもあるとおり、MobileなSafariであることをチェックすればいいと思う。

# = viewの自動切り替え

class ActionView::Base 
  alias render_file_without_iphone render_file
  alias render_partial_without_iphone render_partial

  def render_file(template_path, use_full_path = true, local_assigns = {})
    iphone_path = iphone_template_path(template_path)
    #return render_file_without_iphone(template_path, use_full_path, local_assigns) 
    return iphone_path.nil? ? render_file_without_iphone(template_path, use_full_path, local_assigns) :
                              render_file_without_iphone(iphone_path, use_full_path, local_assigns)
  end

  def render_partial(partial_path, object_assigns = nil, local_assigns = {})
     return render_partial_without_iphone(partial_path, object_assigns, local_assigns)
  end

  def iphone_template_path(template_path, partial=false)
    if controller.is_a?(ActionController::Base)
      ua = controller.request.env["HTTP_USER_AGENT"]
      if /Mobile.+?Safari/i.match(ua)
        iphone_path = "#{template_path}_iphone"
        if finder.file_exists?(iphone_path)
          return iphone_path
        end
      end
    end
    return nil
  end
end

こうやってひとつずつ自分で実装してみないと、わからないなぁ。
そもそもクラス/メソッドの定義

クラスが既に定義されているとき、さらに同じクラス名でクラス定義を書くとクラスの定義の追加になります。ただし、元のクラスと異なるスーパークラスを明示的に指定して定義すると、元のクラスとは異なる新たなクラスを同名で定義することになります(このとき、クラス名の定数を上書きすることになるので警告メッセージが出ます)。

って、知らなかったから、意味わからなかったし・・・。


ちなみに、なるに教えてもらった

Railsレシピブック 183の技

Railsレシピブック 183の技


をフロンテで買ってきた。
しかし、俺の行動圏にある本屋で一番品揃えがいいのは、夢屋かフロンテだなんてッ!