Как мне работать с полями массивов в Mongoid & Rails? - PullRequest
2 голосов
/ 10 января 2012

У меня есть модель места, у которой есть два поля:

class Place
  include Mongoid::Document

  field :name, :type => String
  field :loc, :type => Array

  index([[:loc, Mongo::GEO2D]], :background => true)

  validates_presence_of :name
end

Я могу легко вывести широты и долготы в моих видах с помощью:

@place.loc['lat']

Запись в MongoDB, которая представляет каждыйместо выглядит так:

{ "_id" : ObjectId( "0293uhjf2hfio2h3" ),
  "name" : "Starbucks",
  "loc" : {
    "lat" : 44.106667,
    "lon" : -73.935833
  }
}

Мой вопрос: как мне создать форму, которая позволит мне редактировать или создавать новые поля местоположения (широта / долгота)?

1 Ответ

1 голос
/ 10 января 2012

Я нашел решение.Вместо того, чтобы устанавливать поле в модели места, я создал другую модель с именем «loc» и добавил «embeds_one: loc» на месте.Итак, модель места теперь выглядит следующим образом:

class Place
  include Mongoid::Document
  field :name

  index([[:loc, Mongo::GEO2D]], :background => true)

  embeds_one :loc
  validates_presence_of :name
end

И модель loc выглядит сейчас так:

class Loc
  include Mongoid::Document

  field :lat, :type => Integer
  field :lon, :type => Integer

  embedded_in :place
end

Итак, теперь у меня могут быть поля ввода в форме для местоположения:

<input type="text" name="place[loc][lat]" id="place_loc_lat">
...