【问题标题】:Mongoid fields issueMongoid 字段问题
【发布时间】:2011-07-13 19:04:10
【问题描述】:

我正在研究动态表单生成器。而且我注意到了奇怪的行为

class Model
  include Mongoid::Document
  field :name, :type => String
end

model = Model.new
model.name = "My Name"
model.surname = "My Surname"
#=> NoMethodError: undefined method `surname='

但是

model = Model.new( :name => "My Name", :surname => "My Surname" )
#=> ok
model.surname
#=> "My Surname"
model.surname = "New Surname"
#=> "New Surname"

有人能解释一下为什么我可以通过批量赋值创建新字段而不能通过属性添加字段吗?

【问题讨论】:

    标签: ruby-on-rails ruby mongodb mongoid


    【解决方案1】:

    根据 Mongoid 文档,getter/setter 方法(例如 .surname)仅在文档中存在该字段时才有效(这就是为什么当您使用该字段创建新的 Model 时,它才有效)。

    您仍然可以像这样设置/读取字段:

    model[:surname]
    model.read_attribute(:surname)
    model[:surname] = "My Surname"
    model.write_attribute(:surname, "My Surname")
    

    http://mongoid.org/docs/documents/dynamic.html

    【讨论】:

    • 谢谢你,@Dylan!就是这样
    • 这是相同的功能:model[:surname] = "My Surname"model.write_attribute(:surname, "My Surname")。有什么不同?我刚刚测试过 - 看起来非常相似,但该文档文章中没有 cmets
    • 源码有alias :[] :read_attribute,所以完全一样([]=write_attribute一样)。只需使用您喜欢的那个。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-15
    • 2012-07-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多