如何“合并”“复制”活动记录对象?

时间:2013-12-05 23:43:03

标签: ruby-on-rails ruby activerecord google-maps-api-3

所以,我正在制作一张地图,我放置了引脚(谷歌地图)。

我有一个查询给我我的针脚的位置,但是我可以有多个针脚具有完全相同的位置但描述不同。

由于某种原因我无法获得有效的解决方案,因此我今天早上一直在桌子上敲头,

这是我到目前为止所做的:

building_permits = BuildingPermit.select('latitude, longitude, street, city, state, permit_number, description, type, id').where(:contractor_id => params[:nid])
@bp = Array.new
building_permits.each do |bp|
  @bp.push({"lat" => bp.latitude, "lng" => bp.longitude, "desc" => "<p><b>#{bp.street} #{bp.city}, #{bp.state}</b></p><p><b>Description:</b>#{bp.description}</p><p><b>Permit #{bp.permit_number}</b></p><p><b>#{bp.type}</b></p>", "id" => bp.id})
end
nb_rm = 0
building_permits.each_with_index do |bp, index|
  index1 = index
  building_permits.each_with_index do |bp2, index|
    if bp.longitude == bp2.longitude && bp.latitude == bp2.latitude && bp.id != bp2.id
      #debugger
      if @bp[index1].present?
        @bp[index1]["desc"] << "<br /><br /><b>Description:</b>#{bp2.description}</p><p><b>Permit #{bp2.permit_number}</b></p><p><b>#{bp2.type}</b></p>"
        @bp.delete_at(index-nb_rm)
        nb_rm += 1
      end
    end
  end
end

我确信有一些非常愚蠢的东西会搞砸整个事情,但找不到它。

2 个答案:

答案 0 :(得分:1)

尝试复制您的引脚位置:

# rails < 3.1
new_record = old_record.clone
#rails >= 3.1
new_record = old_record.dup
#and then
new_record.save

然后更改了引脚的描述。

答案 1 :(得分:1)

我遇到了类似的问题并想发布我的解决方案 - 我有重复的作者,想要找到名称属性相同的任何作者,并将相关对象(书籍和推荐)移到每个重复组的第一个,然后删除其他人。

Author.all.each do |a|
@name = a.name
if Author.where(:name => @name).count > 1
    first = Author.where(:name => @name).first
    a.books.each{|b| b.update_attributes(author_id: first.id)}
    a.recommendations.each{|r| r.update_attributes(author_id: first.id)}
end
end

Author.all.each do |a|
if a.books.count == 0 && a.recommendations.count == 0
    a.delete
end
end

希望这对某人有帮助!