Несколько образцов моделей рельсов на одной таблице - PullRequest
1 голос
/ 29 сентября 2010

Я довольно новичок в ruby ​​на рельсах, но я нахожу это фантастическим.

В любом случае, я сейчас, так сказать, строю свой набор моделей.У меня есть модель Места, сгенерированная так:

rails generate scaffold Place name:string description:text type:string

Теперь я хочу сделать модельный маршрут между двумя местами, держа расстояние.Как я могу это сделать, я только видел, как делать ссылки только на одну модель.

Спасибо за прослушивание ...

Ответы [ 2 ]

3 голосов
/ 29 сентября 2010

Необходимо создать модель с именем Route, которая должна выглядеть следующим образом:

Сначала создать с помощью скаффолда

rails g scaffold Route start_place_id:integer end_place_id:integer distance:decimal

выполнить миграцию

Затем необходимо настроитьотношения.Место может быть начальной или конечной точкой, потому что идентификация не является тривиальной по отношению, мы должны указать класс и внешний ключ, чтобы работать должным образом (в простом есть много ассоциаций, которые мы можем сделать has_many: маршруты,and own_to: место, но это не так) route.rb

class Route<ActiveRecord::Base
 belongs_to :start_place, :class_name=>"Place", :foreign_key=>"start_place_id"
 belongs_to :end_place, :class_name=>"Place", :foreign_key=>"end_place_id
end

В вашем place.rb вы должны добавить

class Place<ActiveRecord::Base
  has_many :routes_as_start, :class_name=>"Place", :foreign_key=>"start_place_id"
  has_many :routes_as_end, :class_name=>"Place", :foreign_key=>"end_place_id"
end

Чтобы построить отношение, вы можете сделать это следующим образом:

route = @place.routes_as_start.build
route.end_place = Place.create
route.save

Это также должно создать маршрут с конечным местом.

0 голосов
/ 29 сентября 2010

Для рельсовых ассоциаций я бы проверил:

http://guides.rubyonrails.org/association_basics.html

Кроме того, расстояние - это скорее атрибут места. Например, Place.find(1).location = (x,y) и Place.find(2).location = (x,y). И тогда в вашей модели place.rb вы можете написать метод для расстояний.

def distance(first_place, second_place)
  ...
end

Здесь есть сладкая жемчужина: http://geokit.rubyforge.org/api/geokit-gem/index.html

Для установки введите:

 sudo gem install geokit
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...