【发布时间】:2016-08-17 08:28:40
【问题描述】:
我有一个部分可以拉出某人在他们的 Steam 库中的游戏列表
<h1><%= header %></h1>
<% player = SteamWebApi::Player.new(steamId)
owned_games = player.owned_games(include_appinfo: true)%>
<% owned_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 %>
它的基本视图来自 current_user.player_steam_id - SQL 中的一个字段。 本来只显示你现在的游戏很好,但我想用它做一些事情。
A) 当您查看某人的个人资料时,您会看到他们的列表。 B) 您可以使用用户 ID 进行搜索,以提取查询结果。
我最初的问题是使用(XXXXXX 实际上是一个数字,所以我不对其进行字符串化(是吗?)
<%= render :partial => 'game_list', :locals => {:header => "Welcome to His Page!", :steamId => XXXXXXXXXX } %>
还有“欢迎来到他的页面!”正在通过,但我在渲染 :steamId 时遇到了很多问题。
在局部视图中,我尝试使用 <%= steamId %> <% steamId %> 和 :steamId 渲染它
current 和 :steamId 是仅有的两个不会破坏页面,但它不会呈现任何内容。我对此很陌生,所以想弄清楚,但我发现很多帖子说我做得对。
欢迎提出任何意见。
另外 - 由于我计划广泛使用它,我是否应该考虑将其设为控制器?或者部分就足够了? (P.S. 我通常是一个 Node 人,所以我尝试了很多 debug+console.log(steamId) 来查看它是如何渲染的,但是我没有在 console.log 中得到结果,并且 debug 没有做任何事情。如何你通常会在 RoR 中调试类似的东西吗?
感谢您的任何意见!
编辑:
附加信息:
这个问题部分是部分的。
<h1><%= header %></h1>
<% player = SteamWebApi::Player.new(steamId)
owned_games = player.owned_games(include_appinfo: true)%>
<% owned_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 %>
通过将其修改为owned_games 定义,并且玩家定义在不同的行,它成功解决了。这只是我没有审查我复制/粘贴的内容。
解决的代码:
<h1><%= header %></h1>
<% puts steamId %>
<% player = SteamWebApi::Player.new(steamId) %>
<% owned_games = player.owned_games(include_appinfo: true)%>
This is my steam ID <%= steamId %>
<% owned_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 %>
但是,如果它从数据库中提取 player_steam_id,我只能渲染它。
例如,如果我有
:steamId => 76561198017108025
它不会工作,但如果我有
:steamId => User.player_steam_id 确实有效。
(同样,“用户”在 SQL 中有一列存储他们的 player_steam_id)
我希望能够在搜索按钮的“提交”上调用它,这就是为什么我试图了解如何让渲染与特定数字一起使用。
为什么会这样?我尝试用视图记录 steamId,我看到它作为普通整数传递。我唯一合乎逻辑的假设是视图加载,使用“steamId”调用 API,然后呈现 steamId,但我只是在猜测?
更新 Trial-n-Error
所以我尝试使用类似的东西
<h1><%= header %></h1>
<% appCall = steamId %>
<% player = SteamWebApi::Player.new(appCall) %>
<% owned_games = player.owned_games(include_appinfo: true)%>
<%= appCall %>
<%= owned_games.success %>
<% owned_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 %>
我能够通过 puts 获得输出,并且还可以使用 API 的“player.success”函数。它返回“True”,并将 steamId 和 app 都渲染出 ID。
我还测试了在“for”之前打印出整个数组,并注意到它给了我所有的数据。
true #<OpenStruct count=31, games=[{"appid"=>300, "name"=>"Day of Defeat: Source", "playtime_forever"=>48,
所以问题在于部分的“for”部分,我在想。我是否需要在主文档中运行 for,并从部分提供数据?好像……
【问题讨论】:
-
这个问题源自this thread的后续问题
-
XXXXXX is actually a number, so I don't stringify it(Do I?)- 作为数字传递应该很好。 -
<%= steamId %>这应该是正确的 - 只要steamId不为空。虽然 Rails 的标准命名实践是使用snake_case而不是CamelCase(即你通常称它为steam_id):) 注意:要仔细检查你有什么东西,你可以使用inspect- 这将输出nil如果变量中实际上没有任何内容,例如:<h1><%= steam_id.inspect %></h1>(当我仔细检查值时,我经常使用 h1 标签,这样它就不会在页面中丢失) -
<% puts steamId %>将不起作用...它将仅将值输出到您的服务器日志中(而不是页面上),并确保您在<%=标记中具有等号否则同样不会输出到页面 -
感谢@TarynEast 的澄清。我不确定为什么 有效 - 我不知道是不是因为 for 循环打破了它。
标签: ruby-on-rails partial-views