Ruby on rails 创建时从嵌入文档访问父级(Mongoid)

Ruby on rails 创建时从嵌入文档访问父级(Mongoid),ruby-on-rails,ruby,activerecord,mongoid,Ruby On Rails,Ruby,Activerecord,Mongoid,此技巧适用于“has\u many”关系,但不适用于“embedded\u 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,

此技巧适用于“has\u many”关系,但不适用于“embedded\u 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
国家级
include Mongoid::Document
字段:名称,类型:字符串
嵌入许多:城市
结束
阶级城市
include Mongoid::Document
字段:名称,类型:字符串
字段:全名,类型:字符串,默认值:->{“{name},{country.name}”
嵌入在:国家
结束
1.9.3p392:025>c=国家。查找或创建(名称:“foo”)
=> # 
1.9.3p392:026>c.城市。查找或创建(名称:“酒吧”)
NoMethodError:nil:NilClass的未定义方法“city”

因此,它在一行“field:full_name,type:String,default:->{“{name},{country.name}”上失败,因为此时未定义country

您需要先检查
country
,然后返回
country.name


field:full_name,type:String,default:->{“#{name}”,错误消息“nil:NilClass的未定义方法'city'与您对默认值的解释不符。如果删除默认值,它是否通过?是它的通过。nil:NilClass的未定义方法'city'表示国家为零