【问题标题】:Embedded mongoid document not marked as dirty / not updating嵌入式 mongoid 文档未标记为脏/未更新
【发布时间】:2012-09-07 05:42:51
【问题描述】:

我有一个数据模型如下

  • 出价与出价的User 相关联
  • 出价可以是 offer 或单个 Product 上的 listing
  • Product 可能有多个用户发布的多个优惠和列表(单独)
  • 用户可以在多个Products 上放置优惠和列表

产品 用户

给定来自Product 模型的现有p,像p.offers << bid 这样的操作,其中bidBid 类的一个新实例,不会将p 标记为“脏”,并且不会保留更改到数据库

产品类别

class Product
  include Mongoid::Document
  ...
  embeds_many :offers, class_name: 'Bid'
  embeds_many :listings, class_name: 'Bid'
end

投标等级

class Bid
  include Mongoid::Document
  belongs_to :user
  belongs_to :product

  field :amount, type: Money  
  field :timestamp, type: DateTime, default: ->{ Time.now }
end

此外,调用bid.save! 或创建新数组p.offers = Array.new [bid] 似乎也不起作用

【问题讨论】:

    标签: ruby-on-rails ruby-on-rails-3 activerecord mongoid activemodel


    【解决方案1】:

    更新:

    你的模型结构应该是

    class Product
       include Mongoid::Document
       ...
       has_many :offers, class_name: 'Bid', :inverse_of => :offers_bid
       has_many :listings, class_name: 'Bid', :inverse_of => :listings_bid
    end
    
    class Bid
       include Mongoid::Document
       belongs_to :offers_bid, :class_name => 'Product', :inverse_of => :offers
       belongs_to :listings_bid, :class_name => 'Product', :inverse_of => :listings
       belongs_to :user
    
       field :amount, type: Money  
       field :timestamp, type: DateTime, default: ->{ Time.now }
    end
    

    【讨论】:

    • 因此,如果出价由用户“拥有”,我应该只使用 has_one(on bid) 和 has_many(on the user) 关系吗?
    • 更新了答案...抱歉最后一个不完整的答案。试试现在更新的
    • 嘿!我认为这工作得更好。唯一的问题是您可以将出价添加为要约和列表(有什么办法可以防止这种情况发生吗?)否则,工作得很好!
    猜你喜欢
    • 2014-03-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多