gpt4 book ai didi

ruby-on-rails - 在 Rails 中使用演示者

转载 作者:行者123 更新时间:2023-12-04 16:46:49 28 4
gpt4 key购买 nike

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 中 show 方法的一小段逻辑。我如何将它移动到演示者,以便它保存 machine_games JSON 响应并提供访问游戏和下一页/上一页链接的方法(以及是否它们存在)。 {不太熟悉使用演示者模式}

最佳答案

让我们创建一个 Presenter 来将 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

现在你的 Controller Action 应该是这样的:
def show
# ...
@presenter = GamesPresenter.new(json)
end

您可以在 View 中使用它:
<% @presenter.games.each do |game| %>
...
<% end %>

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

为了告诉 Rails 加载 apps/presenters/目录以及模型/、 Controller /、 View /等,将其添加到 config/application.rb:
config.after_initialize do |app|
app.config.paths.add 'app/presenters', :eager_load => true
end

关于ruby-on-rails - 在 Rails 中使用演示者,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15212637/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com