【问题标题】:API Search on Rails Search InputRails 搜索输入上的 API 搜索
【发布时间】:2016-12-21 06:16:53
【问题描述】:

可能是措辞不佳的主题,我最近正在学习 Rails 并试图对一个旧项目进行一些改进。

我正在使用处理 Steam 驱动的 API 调用的 gem - https://github.com/Olgagr/steam-web-api

我正在渲染它

<% if current_user %>
     <% player = SteamWebApi::Player.new(current_user.player_steam_id) %>
     <% data = player.owned_games(include_appinfo: true) %>
     <% game = data.games %>
         <% game.each do |f| %>
         <%= f['playtime_2weeks'] %>
            <% if f['img_icon_url'].empty? %>
                <img src='http://www.readyicons.com/IconSets/Sky_Light_(Basic)/32x32-no.png'>
            <% else %>
                <img src='http://media.steampowered.com/steamcommunity/public/images/apps/<%=    f['appid'] %>/<%= f['img_icon_url'] %>.jpg'>
            <% end %>
        <%= f['name'] %><br>
     <% end %>
 <% end %>

我在 Active Directory 记录中添加并修改了它,以便它使用数据自动填充用户类别中的字段。

基本上我正在尝试在它旁边做同样的事情,但是通过搜索。 “current_user.player_steam_id”将替换为特定的查询返回。

马上开始,即使我可以让它工作(我正在使用 JS Swaps,它有效,但不是我认为它应该工作的方式)我实际上会有两个相同的代码块彼此相邻。

我相信此时我会使用 form_helper 并将其放置在表单中并渲染它...但是如何动态渲染它?我已经阅读了很多 Active:Directory:RoR 教程,并使用它来创建我的字段,但我不确定如何将它用于动态部分。

举个小例子。

之前:

|    Section 1    |     Section 2    | Section 3|
|CurrentUsersGames|Steam# To Search? |    TBD   |
|CurrentUsersGames|  [Input Field]   |    TBD   |
|CurrentUsersGames|                  |    TBD   |
|CurrentUsersGames|                  |    TBD   |
|CurrentUsersGames|                  |    TBD   |
|CurrentUsersGames|                  |    TBD   |
|CurrentUsersGames|                  |    TBD   |

搜索后:

|    Section 1    |     Section 2    | Section 3|
|CurrentUsersGames|SearchedUsersGames|    TBD   |
|CurrentUsersGames|SearchedUsersGames|    TBD   |
|CurrentUsersGames|SearchedUsersGames|    TBD   |
|CurrentUsersGames|SearchedUsersGames|    TBD   |
|CurrentUsersGames|SearchedUsersGames|    TBD   |
|CurrentUsersGames|SearchedUsersGames|    TBD   |
|CurrentUsersGames|SearchedUsersGames|    TBD   |

如果有任何建议,我们将不胜感激。谢谢。 (如果他们没有登录, 会阻止它中断)

编辑:添加了“之前”和“之后”的说明。本质上,我试图让中间 div 从搜索字段转到 API 响应的结果。

【问题讨论】:

  • I would use a form_helper and place this in a form, and render it... but how do I render it dynamically? 你能告诉我们这个尝试会是什么样子吗?我发现很难弄清楚你真正想要什么......所以尝试这样做会帮助我理解你真正需要什么......尤其是“我如何动态渲染它”是什么意思? - 所有代码都是动态的,在这种情况下这个词是模棱两可的……哪一部分不是动态的?你能告诉我们如果它是静态的会是什么样子,然后告诉我们你希望它在动态时做什么?
  • 感谢@TarynEast 的洞察力-我之前添加了一个。事后看来,我猜我的图表令人困惑。我的图表是我“试图”获得的最终产品。我可以通过在搜索中的“SteamID”中进行硬编码来实现它,但是再次 - 然后我实际上有 2 个完全相同的代码块,为了一小部分差异将其渲染两次。
  • 如果您所做的只是减少视图中的代码重复,那么这就是 partials 的用途。使部分接受任何动态变量,并将它们作为本地变量传递...然后调用部分两次(一次使用current_user.player_steam_id,一次使用搜索结果)?
  • 感谢@TarynEast - 我会更多地研究 Partials。那一定是我需要的。我的搜索不断带回 form::helpers ,这看起来不太像我需要的。我会做类似This?
  • 酷。是的,我很熟悉那些你只是不知道你需要问什么的时候:) 我会写一个简短的部分例子作为你的答案:)

标签: ruby-on-rails ruby api


【解决方案1】:

如果您主要是在视图中对代码进行重复数据删除之后,那么您可能想要的是部分模板。

以下是原始模板中的示例:

<% if user_logged_in? %>
  <% player = SteamWebApi::Player.new(current_user.player_steam_id)
     owned_games = player.owned_games(include_appinfo: true).game
     search_games = player.your_game_search_here %>

 <%= render :partial => 'game_list', :locals => {:games => owned_games, :header => "Games owned by #{player.name}"} %>
 <%= render :partial => 'game_list', :locals => {:games => search_games, :header => "Filtered Game search list title here"} %>

<% end %>

这就是你的部分内容(在本例中你将其命名为 _game_list.html.erb

<h1><%= header %></h1>
<% games.each do |game| %>
  <%= game['playtime_2weeks'] %>
  <% if game['img_icon_url'].blank? %>
    <%= image_tag 'http://www.readyicons.com/IconSets/Sky_Light_(Basic)/32x32-no.png' %>
  <% else %>
    <%= image_tag "http://media.steampowered.com/steamcommunity/public/images/apps/#{game['appid']}/#{game['img_icon_url']}.jpg" %>
  <% end %>
  <%= game['name'] %><br>
<% end %>

【讨论】:

  • 哇,这真的很酷。我为我的原始用户视图做了类似的事情,我只是无法确定部分是否是在单独的文件中创建的(我看到它是)。非常感谢您的帮助!非常感谢它。随机添加:这是一个好方法吗?比如“最佳实践”?我不确定何时使用 Helpers vs Partials vs Forms 等...
  • 是的,我一直在使用局部视图来删除我的视图 - 这是最好的 :)
  • 所以我对其进行了一些更改-您的部分内容在理解我需要什么方面非常有用(我可能解释错了。我试图为别人的游戏创建一个搜索字段。所以你放了一个字段在他们的 SteamID 中然后搜索。)但是,我认为我可以通过更改很少的代码来实现它,但是我有一个问题。 &lt;% player = SteamWebApi::Player.new(:steamId) owned_games = player.owned_games(include_appinfo: true)%&gt; 我按照你的结构做了:steamId =&gt; ######## 但是它没有渲染它。我看过很多文章显示它是如何完成的,但没有bueno?
  • 是的,我认为它会有所不同——这个例子只是一个粗略的指南,让你改变你需要的方式:)听起来你应该为那个新错误创建一个新问题:)写的时候在cmets中加个链接,我看看。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-05-24
  • 1970-01-01
  • 2016-04-15
  • 2022-01-24
  • 1970-01-01
相关资源
最近更新 更多