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

Powyższy fragment to niewielka część logiki z metody show w kontrolerze. Jak przesłać ją do prezentera, aby zachować odpowiedź JSON maszyny-gry i podać metody dostępu do gier i następne/poprzednie linki do stron (i czy istnieją). {nieznajomy z użyciem wzorca prezentacji}Używanie prezenterów w szynach

Odpowiedz

14

Stwórzmy prezentera do analizy odpowiedzi JSON na @games, @next_page i @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 

Teraz twoja akcja kontroler powinien wyglądać mniej więcej tak:

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

I można go używać w swoich poglądów:

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

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

i aby powiedzieć Rails aby załadować aplikacje/prezenter/katalog wraz z modelami /, kontrolerami /, widokami/itp. dodaj to do config/application.rb:

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

To było naprawdę pomocne. Dziękuję: D – kauschan