2013-03-04 13 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 

yukarıdaki controller.How içinde gösteri yönteminden mantık küçük bir parça o machine_games JSON yanıtını tutun ve oyunlar erişmek için yöntemler sağlar ve böylece i sunucu taşıyın do sonraki/önceki sayfa bağlantıları (ve var olup olmadıkları). {sunum modelini kullanma alışkanlığı yok}kullanma Sunucular

cevap

14

Bir JSON yanıtını @games, @next_page ve @previous_page'a ayrıştırmak için bir sunucu oluşturalım.

# 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 

Şimdi denetleyicisi eylem bu gibi görünmelidir:

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

Ve siz görünümlerinde kullanabilirsiniz:

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

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

Ve Uygulamaları yüklemek için Rails anlatmak amacıyla/presenters/directory ile birlikte modeller /, kontrolörler /, görünümler /, vb. bu forma ekle/application.rb:

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

Bu gerçekten yardımcı oldu. Teşekkür ederim: D – kauschan

İlgili konular