【问题标题】:Pushing a Locale Variable to Partial in Rails 4.2在 Rails 4.2 中将语言环境变量推送到部分
【发布时间】: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 时遇到了很多问题。

在局部视图中,我尝试使用 &lt;%= steamId %&gt; &lt;% steamId %&gt;: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 =&gt; 76561198017108025

它不会工作,但如果我有

:steamId =&gt; 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 #&lt;OpenStruct count=31, games=[{"appid"=&gt;300, "name"=&gt;"Day of Defeat: Source", "playtime_forever"=&gt;48,

所以问题在于部分的“for”部分,我在想。我是否需要在主文档中运行 for,并从部分提供数据?好像……

【问题讨论】:

  • 这个问题源自this thread的后续问题
  • XXXXXX is actually a number, so I don't stringify it(Do I?) - 作为数字传递应该很好。
  • &lt;%= steamId %&gt; 这应该是正确的 - 只要steamId 不为空。虽然 Rails 的标准命名实践是使用 snake_case 而不是 CamelCase(即你通常称它为 steam_id):) 注意:要仔细检查你有什么东西,你可以使用 inspect - 这将输出nil 如果变量中实际上没有任何内容,例如:&lt;h1&gt;&lt;%= steam_id.inspect %&gt;&lt;/h1&gt;(当我仔细检查值时,我经常使用 h1 标签,这样它就不会在页面中丢失)
  • &lt;% puts steamId %&gt; 将不起作用...它将仅将值输出到您的服务器日志中(而不是页面上),并确保您在 &lt;%= 标记中具有等号否则同样不会输出到页面
  • 感谢@TarynEast 的澄清。我不确定为什么 有效 - 我不知道是不是因为 for 循环打破了它。

标签: ruby-on-rails partial-views


【解决方案1】:

game_list 是部分视图还是常规视图?部分将以下划线开头作为文件名。 _game_list.html.erb

试试这个

<%= render 'game_list', :header => "Welcome to His Page!", :steamId => XXXXXXXXXX %>

然后您可以在部分内部呈现像这样&lt;%= steamId %&gt; 的 Steam ID。

编辑:

如果您没有在直接输出区域中引用 steamId,则不需要将其包装在 尝试SteamWebApi::Player.‌​new(steamId) 而不是 SteamWebApi::Player.‌​new()

另一个编辑

试试这个

<h1><%= header %></h1>
<% 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 %>

我加了

This is my steam ID <%= steamId %>

【讨论】:

  • _game_list.html.erb - 这是部分内容。
  • syntax error, unexpected '&lt;', expecting ')' ...yer = SteamWebApi::Player.new(&lt;%= steamId} ;@output_buffer.s... ... ^ 也是我从这里得到的回复。我的电话有点不同,因为它是&lt;%= render :partial =&gt; 'game_list', :locals =&gt; {:header =&gt; "Welcome to His Page!", :steamId =&gt; "XXXXXXXXXXXXX" } %&gt;
  • 感谢您的快速回复 - 这是它不会出错的方式之一,但它也不会呈现(什么都没有)。是否有一个 ERB 版本的“console.log”我可以用来查看加载页面后它假定 steamId 是什么?
  • 啊,那行得通。那么为什么 API 不会像通常那样返回结果呢? This is my steam ID 123456 是否在发布号码之前尝试运行 API?
【解决方案2】:

问题最终是我用作模板的部分。它从未将“游戏”数组修改为“游戏”,因此当它迭代“每个”游戏时,它从未返回任何结果。

我的最终部分按预期工作。

<h1><%= header %></h1>
<% player = SteamWebApi::Player.new(steamId) %>
<% owned_games = player.owned_games(include_appinfo: true)%>
<% game = owned_games.games %>
<% 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 %>

一旦我添加了额外的修饰符,它就能够成功渲染列表。

【讨论】:

    猜你喜欢
    • 2020-02-09
    • 2011-12-18
    • 2015-03-29
    • 1970-01-01
    • 1970-01-01
    • 2020-02-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多