这似乎是一个重复的问题,但我无法找到有关此问题的任何信息。我想显示远程获取的json数组的结果,通过将它们与本地表进行比较来排除某些结果。我有一个画廊模型:
t.integer :smugmug_id
t.string :smugmug_key
t.integer :category_id
t.string :category_name
t.string :description
t.integer :highlight_id
t.string :highlight_key
t.string :highlight_type
t.string :keywords
t.string :nicename
t.integer :subcategory_id
t.string :subcategory_name
t.string :title
t.string :url
此模型的数据由连接到smugmug api(json)的rake任务填充,并在本地存储数据。我试图创建一个显示所有未在本地存储的smugmug画廊的视图。
这是我迄今为止尝试过的内容,但它并没有像我想象的那样排除本地存储的画廊。
def self.not_stored
smugmug_list = Smug::Client.new.albums(heavy = true)
gallery_list = Gallery.select(:smugmug_id)
smugmug_list.each do |smugmug|
smugmug unless gallery_list.include? smugmug.id
end
end
希望这是有道理的。我正在获取一个json数组的库,我想显示该数组,不包括相册id与我本地存储的任何记录的smugmug_id匹配的结果。
快速修改:我使用this gem的改编连接到smugmug api。
答案 0 :(得分:3)
只需使用difference operator。
一般例子:
ruby-1.9.2-p136 :001 > [3,2,1] - [2,1]
=> [3]
所以你会:
smugmug_list.collect{|e| e.id} - gallery_list
Enumerable#collect会将smugmug_list转换为id列表。从那里,你可以做差异运算符,它将返回所有未在本地存储的smugmug画廊的所有id。
维护图库列表的另一个选项:
smugmug_list.select{|e|!gallery_list.include?(e.id)}