我目前将一系列推文存储为mongodb中的文档,其模式直接映射到流API返回的json。
架构非常详细,有很多嵌套的嵌入式文档,例如
{
"_id": ObjectId("4f547c17e948fb6e2e00197d"),
"key: value",
"...",
"...",
"entities": {
"urls": [
{
"indices": [
58,
78
],
"display_url": "bit.ly\/yJwQsm",
"url": "http:\/\/t.co\/x5ccL6So",
"expanded_url": "http:\/\/bit.ly\/yJwQsm"
}
],
}
"other parent key pair values here"
}
有时,嵌入的网址将为空,而有时它将包含多个值(在另一个数组中,如嵌套[0],[1] [n])
我想从这个json文档中提取链接值。
我有一个简单的Sinatra应用程序,我已经定义了Tweets模型并使用mongoid的动态属性,我能够快速输出文档中的值,如下所示:
<% @tweets.each do |tweet| %>
<li><%= tweet._id %></li>
<li><%= tweet.user.screen_name %></li>
<li><%= tweet.entities %></li>
当我尝试输出类似
的值时<li><%= tweet.entities.urls %></li>
我开始看到该方法不存在的错误。它自己的“tweet.entities”调用将返回嵌套嵌入的内容。有没有人对如何检查嵌入子的存在有任何想法,所以我可以进入它?我想用mongoid做什么呢?我的查询目前只返回完整的文档。
答案 0 :(得分:1)
如果没有entites
密钥,那么您的情况下最好覆盖Entity
方法以返回空的entities
模型。或者你可以创建一个新的方法entities_url
来检查ifg是否有url和or,如果有url则返回值
class Tweet
def entities
super || Entity.new
end
def entities_url
entities.respond_to?(:url) ? entities.url : ''
end
end