【问题标题】:Rails/Mongoid relationship question with StructRails/Mongoid 与 Struct 的关系问题
【发布时间】:2019-08-01 03:12:56
【问题描述】:

我正在构建这个库应用程序,它有 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

【问题讨论】:

    标签: ruby-on-rails ruby mongoid mongoid5


    【解决方案1】:

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

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

    因此,请确保您的所有库都这样做:

    1. 设置state_id
    2. 让这些state_ids 参考现有的州文件。

    【讨论】:

    • 你建议我在哪里设置state_id?我知道 State 存在,因为当我从控制台尝试 State.find('state_id') 时,它会返回。即使我打电话给@library.state,它也会在控制台中返回。当我发出 http 请求时,它根本不会返回。
    • 我已更新我的问题以包含我如何创建库。它总是与一个状态相关联,所以我不知道它为什么不匹配。
    • 如果模型是通过关联创建的,则 state_id 应由 Mongoid 填写。通过查看库的属性来验证它是否已设置(Library.find(id)Library.find(id).state_id)。
    猜你喜欢
    • 1970-01-01
    • 2013-03-11
    • 1970-01-01
    • 2012-03-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多