【发布时间】:2013-04-05 18:03:26
【问题描述】:
此技巧适用于“has_many”关系,但适用于“embeds_many”。有什么想法吗?
class Country
include Mongoid::Document
field :name, type: String
embeds_many :cities
end
class City
include Mongoid::Document
field :name, type: String
field :full_name, type: String, default: ->{ "#{name}, #{country.name}" }
embedded_in :country
end
1.9.3p392 :025 > c = Country.find_or_create_by(name: 'foo')
=> #<Country _id: foo, name: "foo">
1.9.3p392 :026 > c.cities.find_or_create_by(name: 'bar')
NoMethodError: undefined method `city' for nil:NilClass
因此,它在 "field :full_name, type: String, default: ->{ "#{name}, #{country.name}" }" 行失败,因为当时国家尚未定义
【问题讨论】:
-
错误消息“nil:NilClass 的未定义方法 `city'”不符合您对默认值的解释。如果删除默认值,是否通过?
-
是的,它通过了。 nil 的未定义方法 `city':NilClass 表示国家为 nil
标签: ruby-on-rails ruby activerecord mongoid