6

我正在构建这个库应用程序,它有 3 个类。州、图书馆和书籍。该州有许多图书馆,图书馆属于一个州。图书馆有很多书,书被嵌入图书馆。但是,当我做这个 auto_pick_job 并且我们到达top_free_book并调用library.state. library.state 出于某种原因为零。我希望恢复状态,但没有骰子。我调用和创建库的方式如下。所以图书馆将永远属于一个现有的国家。

state = Stats.find(x)
library = state.libaries.new(info)
library.save_optimistic!

我也将感谢使用 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
4

1 回答 1

3

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

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

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

  1. state_id定。
  2. 让这些state_id参考现有的国家文件。
于 2019-08-05T17:47:26.523 回答