Я просматривал это:
http://datamapper.org/docs/find
Но не смог осветить то, что я ищу, хотя знаю, что это довольно просто.
У меня есть две таблицы, сканы и станции с соответствующими полями:
STATIONS - id (primary key), name
SCANS - id (primary key), item_id, in_station, out_station
Где in_station
и out_station
- внешние ключи к полю id
в таблице stations
.
У меня есть Scan
объект
class Scan
include DataMapper::Resource
property :id, Integer, :key => true
property :item_id, Integer
property :in_station, Integer
property :out_station, Integer
end
Так что сейчас я могу сделать Scan.all(:item_id => @barcode)
, чтобы получить все сканы по конкретному предмету, и у меня есть in_station
id и out_station
id.Какой самый лучший способ получить имена вместо идентификаторов.Я предполагаю, что это должно быть проще, чем при каждом сканировании, вызывающем Station.get(:id=> scan.in_station)
.
Это достаточно просто с помощью SQL, но как я могу изменить Scan / Station, чтобы получить имя или иметь свойство, которое является объектом Station,поэтому я могу сделать что-то вроде scan.station.name?
РЕДАКТИРОВАТЬ:
У меня почти все работает.У меня есть класс Station:
class Station
include DataMapper::Resource
property :id, Integer, :key => true
property :name, String
end
, и я избавился от property :in_station
и property :out_station
в Scan
и заменил на:
belongs_to :in_station, :model => 'Station', :child_key => 'id'
belongs_to :out_station, :model => 'Station', :child_key => 'id'
Что я думаю / надеюсь этоговоря «есть поле с именем in_station, которое является внешним ключом в таблице Station, и поле с именем out_station, которое является тем же».Действительно, in_station и out_station теперь являются экземплярами Station, НО, они являются объектом.Хотя in_station и out_station - это разные значения, я получаю один и тот же объект для каждого сканирования.Что я делаю неправильно, как я могу указать, что in_station и out_station являются ссылками на Station, но, когда их идентификаторы разные, я ожидаю разные объекты.