У меня есть установка следующая модель с конкретными материнскими и дочерними ключами:Рубин DataMapper Один-ко-многим ассоциации не будет экономить с помощью: parent_key
class Province
include DataMapper::Resource
property :name_short, String, key: true, length: 2, unique: true
property :name_long, String, length: 1..50
has n, :municipalities, 'Municipality',
parent_key: [:name_short],
child_key: [:province]
end
class Municipality
include DataMapper::Resource
property :province, String, key: true, length: 2
property :name, String, key: true, length: 1..40
property :lat, Float
property :long, Float
property :current_population, Integer
belongs_to :province, 'Province',
parent_key: [:name_short],
child_key: [:province]
end
создать связанные записи с:
province = Province.get('BC')
municipality = province.municipalities.new(
name: '100 mile house',
lat: 51.23131,
long: 121.65489,
current_population: 0)
Затем выполните municipality.save
, что не получается, потому что запись, которую он пытается сохранить (см. Ниже), пытается использовать весь объект провинции как ключ, а не только поле: name_short.
#<Municipality @province=#<Province @name_short="BC" @name_long="British Columbia"> @name="100 mile house" @lat=51.64300975 @long=121.295022 @current_population=0>
Что я делаю неправильно?
Обнаружена ошибка save
ошибка типа проверки:
["Province must be at most 2 characters long", "Province must be of type String"]
Хммм. Еще раз взглянув на это, мне интересно, может ли DataMapper не применять ссылочную целостность (путем вставки родительского ключа в новый ребенок) и что я, вероятно, должен сделать это, установив поле провинции в муниципалитете самостоятельно? Я дам вам попробовать немного ... нет, это не исправить.
UPDATE: Странно, но, добавив следующий to_s
метод в Province
классе, я избавилась от ошибки "Province must be at most 2 characters long"
- но все еще получаю ошибку Струнный:
def to_s
@short_name
end
Обновлено сообщение с исправлением одной из ошибок (2 символа), добавив метод 'to_s' в класс« Провинция ». –