2013-11-02 3 views
0

Я просто пытаюсь засеять эти координаты, однако она создает два точных дубликата каждой записи записи. Поэтому Post id 1 - 12 выглядит неплохо, но повторяет 13 - 24. Я не могу понять, почему. Я считаю, что код в порядке, но, возможно, я что-то пропускаю. Кто-нибудь видит ошибку или лучший способ сделать это.База данных результирующих деревьев приводит к тому, что одна и та же должность создается дважды

coordinates = { 
    Albany: [42.40, 73.45], 
    Albuquerque: [35.05, 106.39], 
    Amarillo: [35.11, 101.50], 
    Anchorage: [61.13, 149.54], 
    Atlanta: [33.45, 84.23], 
    Austin: [30.16, 97.44], 
    Baker: [44.47, 117.50], 
    Baltimore: [39.18, 76.38], 
    Bangor: [44.48, 68.47], 
    Birmingham: [33.30, 86.50], 
    Bismarck: [46.48, 100.47], 
    Boise: [43.36, 116.13] 
} 

image = #path to image 

coordinates.values.each do |coordinate| 
    Post.create(latitude: coordinate[0], longitude: coordinate[1], image: image) 
end 

И консоль

[1] pry(main)> Post.all 
    Post Load (1.4ms) SELECT "posts".* FROM "posts" 
=> [#<Post id: 1, latitude: #<BigDecimal:7fc80e901360,'0.424E2',18(45)>, longitude: #<BigDecimal:7fc80e900e10,'0.7345E2',18(45)>, created_at: "2013-11-02 21:19:37", updated_at: "2013-11-02 21:19:37", image: "apple_icon.png">, 
#<Post id: 2, latitude: #<BigDecimal:7fc80e9127f0,'0.3505E2',18(45)>, longitude: #<BigDecimal:7fc80e911c88,'0.10639E3',18(45)>, created_at: "2013-11-02 21:19:37", updated_at: "2013-11-02 21:19:37", image: "apple_icon.png">, 
#<Post id: 3, latitude: #<BigDecimal:7fc80e91bf30,'0.3511E2',18(45)>, longitude: #<BigDecimal:7fc80e91bcd8,'0.1015E3',18(45)>, created_at: "2013-11-02 21:19:37", updated_at: "2013-11-02 21:19:37", image: "apple_icon.png">, 
#<Post id: 4, latitude: #<BigDecimal:7fc80e91a748,'0.6113E2',18(45)>, longitude: #<BigDecimal:7fc80e91a4f0,'0.14954E3',18(45)>, created_at: "2013-11-02 21:19:37", updated_at: " 
#<Post id: 5, latitude: #<BigDecimal:7fc80e919398,'0.3345E2',18(45)>, longitude: #<BigDecimal:7fc80e919140,'0.8423E2',18(45)>, created_at: "2013-11-02 21:19:37", updated_at: "2013-11-02 21:19:37", image: "apple_icon.png">, 
#<Post id: 6, latitude: #<BigDecimal:7fc80e923c30,'0.3016E2',18(45)>, longitude: #<BigDecimal:7fc80e9239d8,'0.9744E2',18(45)>, created_at: "2013-11-02 21:19:37", updated_at: "2013-11-02 21:19:37", image: "apple_icon.png">, 
#<Post id: 7, latitude: #<BigDecimal:7fc80e922420,'0.4447E2',18(45)>, longitude: #<BigDecimal:7fc80e9220d8,'0.1175E3',18(45)>, created_at: "2013-11-02 21:19:37", updated_at: "2013-11-02 21:19:37", image: "apple_icon.png">, 
#<Post id: 8, latitude: #<BigDecimal:7fc80e9207d8,'0.3918E2',18(45)>, longitude: #<BigDecimal:7fc80e920490,'0.7638E2',18(45)>, created_at: "2013-11-02 21:19:37", updated_at: "2013-11-02 21:19:37", image: "apple_icon.png">, 
#<Post id: 9, latitude: #<BigDecimal:7fc80e92aff8,'0.4448E2',18(45)>, longitude: #<BigDecimal:7fc80e92ad78,'0.6847E2',18(45)>, created_at: "2013-11-02 21:19:37", updated_at: "2013-11-02 21:19:37", image: "apple_icon.png">, 
#<Post id: 10, latitude: #<BigDecimal:7fc80e929b80,'0.333E2',18(45)>, longitude: #<BigDecimal:7fc80e929950,'0.865E2',18(45)>, created_at: "2013-11-02 21:19:37", updated_at: "2013-11-02 21:19:37", image: "apple_icon.png">, 
#<Post id: 11, latitude: #<BigDecimal:7fc80e928758,'0.4648E2',18(45)>, longitude: #<BigDecimal:7fc80e9284d8,'0.10047E3',18(45)>, created_at: "2013-11-02 21:19:37", updated_at: "2013-11-02 21:19:37", image: "apple_icon.png">, 
#<Post id: 12, latitude: #<BigDecimal:7fc80e9331f8,'0.4336E2',18(45)>, longitude: #<BigDecimal:7fc80e932f78,'0.11613E3',18(45)>, created_at: "2013-11-02 21:19:37", updated_at: "2013-11-02 21:19:37", image: "apple_icon.png">, 

#### starts repeating at 13 

#<Post id: 13, latitude: #<BigDecimal:7fc80e931d58,'0.424E2',18(45)>, longitude: #<BigDecimal:7fc80e931b28,'0.7345E2',18(45)>, created_at: "2013-11-02 21:19:44", updated_at: "2013-11-02 21:19:44", image: "apple_icon.png">, 
#<Post id: 14, latitude: #<BigDecimal:7fc80e93bda8,'0.3505E2',18(45)>, longitude: #<BigDecimal:7fc80e93b9c0,'0.10639E3',18(45)>, created_at: "2013-11-02 21:19:44", updated_at: "2013-11-02 21:19:44", image: "apple_icon.png">, 
#<Post id: 15, latitude: #<BigDecimal:7fc80e9382c0,'0.3511E2',18(45)>, longitude: #<BigDecimal:7fc80e943c60,'0.1015E3',18(45)>, created_at: "2013-11-02 21:19:44", updated_at: "2013-11-02 21:19:44", image: "apple_icon.png">, 
#<Post id: 16, latitude: #<BigDecimal:7fc80e9429c8,'0.6113E2',18(45)>, longitude: #<BigDecimal:7fc80e9426f8,'0.14954E3',18(45)>, created_at: "2013-11-02 21:19:44", updated_at: "2013-11-02 21:19:44", image: "apple_icon.png">, 
#<Post id: 17, latitude: #<BigDecimal:7fc80e940790,'0.3345E2',18(45)>, longitude: #<BigDecimal:7fc80e940268,'0.8423E2',18(45)>, created_at: "2013-11-02 21:19:44", updated_at: "2013-11-02 21:19:44", image: "apple_icon.png">, 
#<Post id: 18, latitude: #<BigDecimal:7fc80e94a2b8,'0.3016E2',18(45)>, longitude: #<BigDecimal:7fc80e949e30,'0.9744E2',18(45)>, created_at: "2013-11-02 21:19:44", updated_at: "2013-11-02 21:19:44", image: "apple_icon.png">, 
#<Post id: 19, latitude: #<BigDecimal:7fc80e953c00,'0.4447E2',18(45)>, longitude: #<BigDecimal:7fc80e9539d0,'0.1175E3',18(45)>, created_at: "2013-11-02 21:19:44", updated_at: "2013-11-02 21:19:44", image: "apple_icon.png">, 
#<Post id: 20, latitude: #<BigDecimal:7fc80e952238,'0.3918E2',18(45)>, longitude: #<BigDecimal:7fc80e951a90,'0.7638E2',18(45)>, created_at: "2013-11-02 21:19:44", updated_at: "2013-11-02 21:19:44", image: "apple_icon.png">, 
#<Post id: 21, latitude: #<BigDecimal:7fc80e95b6a8,'0.4448E2',18(45)>, longitude: #<BigDecimal:7fc80e95b388,'0.6847E2',18(45)>, created_at: "2013-11-02 21:19:44", updated_at: "2013-11-02 21:19:44", image: "apple_icon.png">, 
#<Post id: 22, latitude: #<BigDecimal:7fc80e95a140,'0.333E2',18(45)>, longitude: #<BigDecimal:7fc80e959ee8,'0.865E2',18(45)>, created_at: "2013-11-02 21:19:44", updated_at: "2013-11-02 21:19:44", image: "apple_icon.png">, 
#<Post id: 23, latitude: #<BigDecimal:7fc80e958cf0,'0.4648E2',18(45)>, longitude: #<BigDecimal:7fc80e958a70,'0.10047E3',18(45)>, created_at: "2013-11-02 21:19:44", updated_at: "2013-11-02 21:19:44", image: "apple_icon.png">, 
#<Post id: 24, latitude: #<BigDecimal:7fc80e963740,'0.4336E2',18(45)>, longitude: #<BigDecimal:7fc80e9634c0,'0.11613E3',18(45)>, created_at: "2013-11-02 21:19:44", updated_at: "2013-11-02 21:19:44", image: "apple_icon.png">] 

Любая помощь приветствуется. Заранее спасибо

ответ

2

Вы сделали два раза rake db: seed?

Если да, то два раза создают одинаковые элементы.

При запуске семена не удаляет записи, если вы хотите сделать это ставило

Post.destroy_all 

выше координат.

Отвечая на ваш вопрос?

+0

wow это интересно. Обычно я создаю задачу rake для семени db вместо использования 'db/seeds.rb'. Я использовал «Rake db: reset», чтобы удалить данные, как обычно, и не понимал, что это не работает для 'seeds.rb'. Спасибо – fontno

+0

Добро пожаловать :) Вы должны использовать файл db/seeds.rb и rake db: seed для загрузки. Вам не нужен какой-либо пользовательский rake :) – mike90

2

Вы можете поставить вызов создать в состоянии:

coordinates.values.each do |coordinate| 
    if Post.where(latitude: coordinate[0], longitude: coordinate[1]).empty? 
    Post.create(latitude: coordinate[0], longitude: coordinate[1], image: image) 
    end 
end 

Таким образом, вы можете запустить грабли БД: семена и не получить повторы.

Отъезд find_or_create_by

Смежные вопросы