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 応答を保持し、ゲームと次/前のページ リンクにアクセスするメソッドを提供する方法 (およびそれらは存在します)。{プレゼンター パターンの使用に慣れていない}

4

1 に答える 1

14

@gamesJSON応答をと@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にmodels /、controllers /、views/などと一緒にapps/ presenters /ディレクトリをロードするように指示するには、これをconfig/application.rbに追加します。

config.after_initialize do |app|
  app.config.paths.add 'app/presenters', :eager_load => true
end
于 2013-03-05T02:07:26.797 に答える