【问题标题】:Using API in partial and passing values?在部分和传递值中使用 API?
【发布时间】:2013-12-15 14:11:00
【问题描述】:

我正在尝试显示来自 API 的一些信息。

我有这个代码:

<% recco = Model.find_by_id(activity.trackable.id %>

现在,渲染以下行将输出我想要的 ID:

<%= recco.item_id %>

但是,当我想链接到这个项目并且我需要 API 中的名称时,有些代码会失败,有些则不会。这是我的行:

<%= link_to @client.author(recco.item_id).name, book_path(recco.item_id) %>

book_path 工作并显示指向带有 ID 的正确 URL 的链接。尝试从 API 获取名称的客户端返回未找到。

但是,如果我尝试删除 recco.item_id 并将其硬编码为:

<%= link_to @client.author("7").name, book_path(recco.item_id) %>

它可以工作并显示作者姓名。 API请求是否有特殊原因无法理解recco.item_id是一个数字? book_path 可以很好地显示链接。

【问题讨论】:

  • @client代表什么,作者方法的定义是什么
  • @client 用于 goodreads api:@client = Goodreads.new(Goodreads.configuration)
  • 你在使用这里的 gem,github.com/sosedoff/goodreads。它使用地下的 RestClient 来执行 http 请求,所以我认为传入的 id 是字符串还是数字都不会影响这个问题。也许您查询的作者不存在。有没有输出recco.item_id的值,看看goodreads上是否真的存在。
  • 是的,通过传递值“7”,正如我提到的那样,会返回 goodreads api 中预期的作者姓名。但是当传递 recco.item_id (在这种情况下是 7 )只返回 Goodreads::NotFound

标签: ruby-on-rails ruby api parameter-passing partials


【解决方案1】:

看起来author 方法需要一个字符串而不是整数。您只需将to_s 添加到 item_id 即可:

<%= link_to @client.author(recco.item_id.to_s).name, book_path(recco.item_id) %>

API 不理解您传递给它的整数的原因可能是因为他们在该方法中没有逻辑将传递的参数转换为字符串。理想情况下,公众会尝试将传递给它的任何参数转换为它期望的值类型。我们对您的方法所做的to_s 理想情况下会在 API 中,但由于您可能无法控制 API 代码,因此您必须自己解决这个问题,无论如何都不会花费太多精力。 :)

【讨论】:

  • 那行不通。这是 public_activity (_create.html.erb) 的一部分。带有 recco.item_id 的代码在普通视图中工作,但由于某种原因不在此处。
  • 我也尝试过@client.author(#{recco.item_id}).name 以及aut = recco.item_id.to_s@client.author(aut).name 的组合。没有一个有效,但是一旦我在代码中手动输入一个数字(例如:7),它们都会
  • 当它通过提供数字作为参数来工作时,您提供的数字是字符串还是整数?部分操作与视图工作的操作相同吗?
  • 整数。在作者展示页面的视图中,我使用 params[:id] 而不是 recco.item_id。但其余的都是一样的。
  • 那么params[:id]和recco.item_id的输出是什么?如果 recco.item_id 返回一个字符串,那么这可能是你的问题,你可以尝试做recco.item_id.to_i
猜你喜欢
  • 2013-08-10
  • 2023-03-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多