【问题标题】:Using Presenters in rails在 Rails 中使用 Presenter
【发布时间】:2013-03-04 22:47:12
【问题描述】:
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 响应并提供访问游戏和下一页/上一页链接的方法(以及无论它们是否存在)。 {不太熟悉使用演示者模式}

【问题讨论】:

    标签: ruby-on-rails ruby-on-rails-3 ruby-on-rails-3.2


    【解决方案1】:

    让我们创建一个演示器,用于将 JSON 响应解析为 @games@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 加载 apps/presenters/ 目录以及 models/、controllers/、views/ 等,请将其添加到 config/application.rb:

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

    【讨论】:

    • 这真的很有帮助。谢谢:D
    猜你喜欢
    • 2013-12-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-08
    • 2021-05-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多