【问题标题】:Access to parent from embedded document on creation (Mongoid)在创建时从嵌入式文档访问父级(Mongoid)
【发布时间】: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


【解决方案1】:

你需要先检查country,然后它会返回country.name

field :full_name, type: String, default: -&gt;{ "#{name}, " &lt;&lt; country.name if country }

我无法让它与字符串插值一起使用,但追加工作(将 country.name 连接到 str)

【讨论】:

    猜你喜欢
    • 2013-11-14
    • 1970-01-01
    • 2011-05-22
    • 1970-01-01
    • 2016-02-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多