我有一些ActiveResource模型,像这样:
class Meeting
has_many :sections
end
class Section
has_many :items
end
class Items
has_many :items
end
当我在会议上查找时,我得到一个json响应,如:
{
id: 1, ...
sections: [
{
id: 1, ...
items: [
{id: 16, ...
items: [
{id: 534, ...
items: [
{id: 8976, ...},
{id: 8977, ...}
]}
]}
]
}
}
并运行以下(经过大量编辑的)例程:
@meeting = Meeting.find(@meeting_guid)
import_sections
private
def import_sections
@meeting.sections.each do |section|
new_section = Item.find_or_initialize_by(foreign_guid: section.guid)
new_section.update!(layout: :section)
import_items(section, new_section)
end
end
def import_items(item, parent)
item.items.each do |item|
position = mema_item.orderpreference.to_i + 1
sub_item = Item.find_or_initialize_by(foreign_guid: item.guid)
sub_item.update!(layout: :item, title: item.name, parent: parent)
import_items(item, sub_item)
end
end
当它到达项目8976和8977时,它向/items?item_id=8976
和/items?item_id=8977
发出请求。是否有一种方法可以防止它在到达最后一个子进程结束时发出这些请求?我认为我不会直接调用Items,所以我可以禁用对Item模型的请求吗?
我觉得没有抓住这一点很愚蠢,但是我能够很简单地解决这个问题,尽管不是通过ActiveResource特性。对于递归的import_items调用,我检查if item.attributes.key? 'items'
,本质上只是检查父对象的属性,而不进入关系并创建api调用。