【发布时间】:2014-06-17 20:02:30
【问题描述】:
我正在向 Facebook API 发出请求,但其中一些响应为空/nil,我想知道如何删除这些响应,以便在将它们保存到我的模型时没有任何 nil 条目。
def formatted_data
for record in results['data'] do
attrs = {
message: record['message'],
picture: record['picture'],
link: record['link'],
object_id: record['object_id'],
description: record['description'],
created_time: record['created_time']
}
attrs.delete_if { |x| x.nil? }
Post.where(attrs).first_or_create! do |post|
post.attributes = attrs
end
end
如您所见,我正在尝试使用 delete_if 方法,但它不起作用。
这是我想删除的回复示例:
id: 45
message:
picture:
link:
object_id:
large_image_url:
description:
created_time: 2014-04-12 11:38:02.000000000 Z
created_at: 2014-05-01 10:27:00.000000000 Z
updated_at: 2014-05-01 10:27:00.000000000 Z
这种记录对我没有好处,因为它没有消息,所以也许我可以让查询指定 if message.nil ?然后删除
编辑
一直在阅读 delete_if 文档并在 iceman 的评论之后,我认为这会起作用,但它不起作用,尽管它似乎更接近我想要的:
attrs = attrs.delete_if {|key, value| key = 'message', value = nil }
返回了大约 25 条记录,其中 5 条应该被删除,但是在运行上述之后,我得到一个结果留在模型中:
[#<Post id: 81, message: nil, picture: nil, link: nil, object_id: nil, large_image_url: nil, description: nil, created_time: nil, created_at: "2014-05-01 11:22:40", updated_at: "2014-05-01 11:22:40">]
为什么其余的都被删除了,可能是我访问密钥的语法不正确?
【问题讨论】:
-
所以你必须删除字段:``消息:图片:链接:object_id:large_image_url:描述:`?
-
是,如果 message = nil 则删除整条记录
标签: ruby-on-rails ruby facebook-graph-api methods