保护父母与孩子的关系

时间:2013-12-11 20:56:32

标签: ruby-on-rails model parent

我有以下关系。我想要一个帖子来has_one current_wrent但也有很多wrents来记录wrent对象。我认为这个问题可能与铁路混淆了我认为的关系。

当我引用post.current_wrent时,这是正确返回而没有错误。

Class Post

include Mongoid::Document
include Mongoid::Timestamps
  ...
has_one :current_wrent, :class_name => "Wrent", :inverse_of => :current_wrent, :autosave => true, :dependent => :destroy
has_many :wrents, :inverse_of => :post, :dependent => :destroy
end

Class Wrent
..
belongs_to :post, :autosave => true
..
end

当我做某事......   (在Wrent.rb中)

def accept!
  update_attributes!(:status => 1, :accepted => true) 
  post.current_wrent = self
  post.available = false
  post.save!
  notify_user
end

我得到一个“当前的Wrent”是无效的错误,有人能指出我在这里做错了吗?

编辑:这似乎工作正常。 在wrent.rb

Class Wrent
  ..
  belongs_to :post, :inverse_of => :wrent, :autosave => true
  belongs_to :post, :inverse_of => :current_wrent

在post.rb中     班级职位       ......

  has_one :current_wrent, :class_name => "Wrent", :inverse_of => :post
  belongs_to :current_wrent, :class_name => "Wrent", :inverse_of => :post
  has_many :wrents, :inverse_of => :post, :dependent => :destroy

我仍然不确定问题是什么,但现在我可以通过belongs_to current_wrent_id列访问post.current_wrent,问题似乎消失了。

1 个答案:

答案 0 :(得分:1)

你的Wrent模型可能有一个post_id字段,其中存储了它所属的帖子的id。但Post中没有字段来存储current_wrent。 Mongoid允许你嵌入对象,所以你可以做的是embeds_one而不是has_one。

Class Post

  include Mongoid::Document
  include Mongoid::Timestamps
  ...
  embeds_one :current_wrent, :class_name => "Wrent", :inverse_of => :current_wrent
  has_many :wrents, :inverse_of => :post, :dependent => :destroy
end