Struct的Rails / Mongoid关系问题

jmo*_*n90 6 ruby ruby-on-rails mongoid mongoid5

我有一个正在构建的图书馆应用程序,它有3个课程。州,图书馆和书籍。该州有许多图书馆,而图书馆属于一个州。图书馆有很多书籍,而书籍则嵌入在图书馆中。但是,当我制作此auto_pick_job时,我们进入top_free_book并致电library.state。由于某种原因,library.state为nil。我希望能使状态恢复正常,但不会造成麻烦。.我调用和创建库的方式如下。因此,图书馆将始终属于现有状态。

state = Stats.find(x)
library = state.libaries.new(info)
library.save_optimistic!
Run Code Online (Sandbox Code Playgroud)

对于使用Struct的关系帮助,我也将不胜感激。

class State
  has_many: libraries
end

class Library
  belongs_to :state
end

class Book
  embedded_in :library

  def self.top_free_book(library_id)
    library = Library.find(library_id)    
    library.state
  end

  AutoPickJob = Struct.new(:library_id) do
    def perform     
      Book.top_free_book(library_id)
    end
  end

  def queue_auto_pick
    auto_pick_job = AutoPickJob.new(library_id)
    Delayed::Job.enqueue(auto_pick_job)
  end
end
Run Code Online (Sandbox Code Playgroud)

D. *_* SM 3

belongs_to通常会验证关系的存在,但如果您已经有一些在belongs_to添加关联之前创建的模型,则它们不一定会设置关联目标。

State另外,即使存在引用库,也可以销毁文档(关联的默认行为是无效)。如果您删除而不是销毁State文档,则不会运行回调,并且可能会留下引用已删除状态的库。

因此,请确保您的所有库都执行以下操作:

  1. state_id定。
  2. 让这些state_id参考现有的国家文件。