2013-03-04 10 views
5
json = JSON.parse(response.body) 
    @games = json['machine-games'] 

    paging = json['paging'] 
    if paging 
     if paging['next'] 
     next_page_query = paging['next'].match(/\?.*/)[0] 
     @next_page = "/machine_games/search#{next_page_query}" 
    end 

    if paging['previous'] 
     previous_page_query = paging['previous'].match(/\?.*/)[0] 
     @previous_page = "/machine_games/search#{previous_page_query}" 
    end 
    end 

上記はコントローラのshowメソッドのロジックです。私はプレゼンターに移動して、machine_games JSONレスポンスを保持し、ゲームにアクセスする方法を提供します。次/前のページリンク(およびそれらが存在するかどうか)。 {プレゼンターパターンの使用に慣れていない方}プレゼンターをレールで使用する

答えて

14

JSONレスポンスを解析するプレゼンターを@games@next_page@previous_pageに作成しましょう。

# app/presenters/games_presenter.rb 

class GamesPresenter 

    attr_reader :games, :next_page, :previous_page 

    def initialize json 
    @games = json['machine-games'] 

    paging = json['paging'] 
    if paging && paging['next'] 
     next_page_query = paging['next'].match(/\?.*/)[0] 
     @next_page = "/machine_games/search#{next_page_query}" 
    end 

    if paging && paging['previous'] 
     previous_page_query = paging['previous'].match(/\?.*/)[0] 
     @previous_page = "/machine_games/search#{previous_page_query}" 
    end 
    end 

end 

今すぐあなたのコントローラのアクションは次のようになります。

def show 
    # ... 
    @presenter = GamesPresenter.new(json) 
end 

をそして、あなたはあなたのビューでそれを使用することができます。

<% @presenter.games.each do |game| %> 
    ... 
<% end %> 

<%= link_to "Previous", @presenter.previous_page %> 
<%= link_to "Next", @presenter.next_page %> 

やアプリケーションをロードするためのRailsを伝えるために、/presenters /ディレクトリをモデル/コントローラ/ビュー/などと一緒にconfig/application.rbに追加してください。

config.after_initialize do |app| 
    app.config.paths.add 'app/presenters', :eager_load => true 
end 
+1

本当に役に立ちました。ありがとう:D – kauschan

関連する問題