2011-10-07 7 views
4

레일즈 3.0 애플리케이션의 모바일 버전을 만드는 방법에 대해 궁금합니다. 레일즈 3.0 모바일 사이트

는이 게시물보고 : Mobile version of views for Ruby on Rails

을하지만 난 respond_to 방법에 대한 혼란 스러워요. 이 메서드는 렌더링 할 형식을 어떻게 알 수 있습니까?

응용 프로그램 컨트롤러에 모바일 레이아웃을 렌더링하는 메서드를 만들고 각 뷰에 대해 respond_to 메서드를 사용합니까?

내가 개발 한 Rails Mobile

에서보세요,

브라이언

+0

을했다 "- // WAPFORUM // DTD XHTML 모바일 1.2 // EN" "HTTP : //www.openmobilealliance.org/tech/DTD/xhtml-mobile12.dtd "> 레이아웃 파일 –

답변

1

을 주셔서 감사합니다 그 뒤로 잠시 플러그인. 이 플러그인의 배경은 라우터 구성 파일을 통해 모바일 장치 기능을 기반으로 다른 컨트롤러 또는보기로 리디렉션 할 수 있다는 것입니다. routing.rb의 끝에서

다음 줄을 추가

MobileDispatch::Categories.add do 

def mobile_classifier(device) 
    "_mobile" 
end 
end 

이 라인은 rouging.rb 파일의 각 요청에 대해 $ 변수에 저장되는 모든 모바일 기기를위한 새로운 문자열을 정의합니다.

그런 식으로 라우팅 규칙을 적용 할 수 있습니다. 예를 들어 routing.rb에서이 라인 :

일치 '/ 사진/: 아이디'님 => "사진 # 인덱스 $": 분류 => : 일반 사용자를위한 mobile_classifier

해석된다 로 :

일치 '/ 사진/: ID': 분류 => : mobile_classifier로 모바일 사용자를위한

동안 '

경기/사진 => "사진 # 지수"에/: id ', : to => "photo # index_mobile", : 분류 자 ​​=> : mobile_classifier

여기의 힘은 장치 개체를 기반으로 다른 분류를 반환 할 수있는 mobile_classifier (장치) 메서드에 있습니다.

그래서 우리는 모든 아이폰 장치의 경우 "_iphone"모든 안드로이드 휴대폰을위한 "_android"를 반환하는 방법을 수정할 생각한 다음, 위의 라우팅 라인으로 해석됩니다 :

일치 '/ 사진/: ID ': 분류 => : mobile_classifier

경기 => "사진 #의 index_iphone"에'/ 사진/: ID ': 분류 => : mobile_classifier

=> "사진 #의 index_android"에

각 경로의 끝 부분에 $를 추가하면 (여기에서했던 것과 비슷 함) 각 장치 범주마다 다른 방법을 사용할 수 있습니다 각 메소드의 이름보기 (index_iphone.htm.erb 및 index_android.ht.erb) mobile_classifier 메소드에서 정의한 각 디바이스 카테고리에 대해 별도의보기/레이어가 있습니다.

+0

플러그인을 사용하면 앱에서 여전히 메소드를 호출하지만 요청이 휴대 기기에서 온 것이라면 모바일보기가 렌더링됩니까? 모바일 장치를 자동으로 감지합니까? 이 플러그인은 어떤 모바일 장치를 지원합니까? – Brian

+0

죄송합니다. 모바일 레이아웃도 어떨까요? 이 플러그인을 사용하여 모바일 레이아웃을 렌더링하는 방법이 있습니까, 아니면 그냥 응용 프로그램 컨트롤러에 메서드를 추가할까요? – Brian

+0

죄송합니다. 두 번째 질문을 보지 못했습니다. 내 업데이트 된 답변을 확인하십시오 – Reza

2

respond_to 메서드는 현재 요청의 MIME 유형에 따라 선택합니다.

일반 MIME 유형에서는 기본적으로 작동하지만 맞춤 애플리케이션에 대해서는 애플리케이션에 알려야합니다. 애플리케이션 컨트롤러에서 Rails의 요청에 대한 내부 표현 형식을 조정하는 메소드를 정의해야한다. 그런 다음 해당 메서드를 before 필터로 호출하십시오. 다음은 예입니다 :

class ApplicationController < ActionController::Base 
    before_filter :adjust_for_mobile 

    def adjust_for_mobile 
    request.format = :mobile if mobile_request 
    end 

    # You'll also need to define the mobile_request method 
    # using whatever strategy you want to tell if a request 
    # is from a mobile client or not 
    def mobile_request 
    true 
    end 
end 

했는지 확인 정의한 설정/초기화/mime_types.rb에서이 새로운 유형 :

Mime::Type.register "text/html", :mobile 

그런 다음 컨트롤러에서, 당신은을 사용 할 수 있습니다 '모바일'형식 :

class FoosController < ApplicationController 
    def index 
    @foos = Foo.all 

    respond_to do |format| 
     format.html # index.html.erb 
     format.mobile # index.mobile.erb 
    end 
    end 
end 

이 확실히 우아한 외모와 모든하지만 실제로, 나는 거의 모바일 사이트를 위해 그것을 사용하지 않는 것을 찾을 수 있습니다. 내가 해왔 던 모바일 사이트는 일반적으로 '완전한'사이트와 상당히 다릅니다. 이 경우에는 '모바일'네임 스페이스 아래에 다른 컨트롤러를 정의하는 것이 좋습니다. !

관련 문제