Rails - 试图理解一段代码

时间:2012-05-14 23:02:57

标签: ruby-on-rails ruby

我正在使用我在网上找到的一些代码:

def person_path(options)
  # This is where the path of the query is constructed.

  path = "/people/"     # For this section of the LinkedIn API
  if id = options.delete(:id)
    path += "id=#{id}"
  elsif url = options.delete(:url)
    path += "url=#{CGI.escape(url)}"
  else
    path += "~"
  end
end 

我不完全确定它的作用。我想要做的是让它构建一个像这样的字符串:http://api.linkedin.com/v1/people/~:(current-status)我从这里的LinkedIn开发人员文档中得到:https://developer.linkedin.com/documents/profile-api

关于我应该通过这个功能以及它如何完成它的功能的任何想法?

谢谢!

2 个答案:

答案 0 :(得分:3)

虽然没有说明'选项'是什么,但是将选项传递给方法作为Ruby中的键值对的Hash是非常常见的,所以我会说选项就是这样(99%确定) 。这是理解其余代码的关键部分。

我相信正在使用散列上的#delete方法来拉出键值对并在一次移动中分配值,同时利用返回的对象的“真实性”。

http://www.ruby-doc.org/core-1.9.3/Hash.html#method-i-delete

通过“真实性”,我的意思是在Ruby中,除了'nil'和'false'之外,所有对象都评估为'true'。

其余的很简单if-else控制流逻辑,你会看到任何其他语言,所以我希望这是有道理的。

答案 1 :(得分:1)

如果在选项中找到id或url,则只创建“/ people / id = foo”或“/ people / url = foo_with _%_ escapes”形式的路径。作为副作用,它会从选项中删除它找到的那个。如果找不到任何一个,则给出“/ people /~”