我已經安裝了下面的模型與特定的父母和孩子鍵:紅寶石DataMapper的一對許多協會將不保存使用:parent_key
province = Province.get('BC')
municipality = province.municipalities.new(
name: '100 mile house',
lat: 51.23131,
long: 121.65489,
current_population: 0)
:
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
我創建相關記錄
然後執行municipality.save
,由於它正試圖保存的記錄(請參見下文)試圖將整個Province對象用作關鍵字,而不僅僅是: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
通過向'Province'類添加'to_s'方法修復了一個錯誤(2個字符)後的帖子。 – 2013-02-23 22:53:27