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上面是controller.How中show方法的一小段逻辑,我是否将其移动到展示者,以便它将持有machine_games JSON响应,并提供访问游戏和下一页/上一页链接(以及它们是否存在)的方法。{不太熟悉演示者模式}
发布于 2013-03-05 10:07:27
让我们创建一个用于将JSON响应解析为@games、@next_page和@previous_page的presenter。
# 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加载apps/presenters/目录以及model/、controller/、views/等,请将以下内容添加到config/application.rb:
config.after_initialize do |app|
app.config.paths.add 'app/presenters', :eager_load => true
endhttps://stackoverflow.com/questions/15212637
复制相似问题