首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在rails中使用Presenter

在rails中使用Presenter
EN

Stack Overflow用户
提问于 2013-03-05 06:47:13
回答 1查看 4K关注 0票数 5
代码语言:javascript
复制
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响应,并提供访问游戏和下一页/上一页链接(以及它们是否存在)的方法。{不太熟悉演示者模式}

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-03-05 10:07:27

让我们创建一个用于将JSON响应解析为@games@next_page@previous_page的presenter。

代码语言:javascript
复制
# 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

现在,您的控制器操作应该如下所示:

代码语言:javascript
复制
def show
  # ...
  @presenter = GamesPresenter.new(json)
end

你可以在你的视图中使用它:

代码语言:javascript
复制
<% @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:

代码语言:javascript
复制
config.after_initialize do |app|
  app.config.paths.add 'app/presenters', :eager_load => true
end
票数 14
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15212637

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档