inverse_of:nil是什么意思?

时间:2018-10-25 15:16:55

标签: ruby-on-rails ruby

我了解inverse_of的作用,但我不了解inverse_of的作用:无。 例如,

class Book
  include Mongoid::Document
  belongs_to :author, inverse_of: nil
end

class Author
  include Mongoid::Document
end

作者与书本之间没有关联。使用作者和书籍可能是一个不好的例子,但我希望您能理解。我看到inverse_of: nil用了很多。所以想了解它。

1 个答案:

答案 0 :(得分:2)

它涵盖了Mongoid的特定情况,其中没有定义相反的关系。

在您的示例中,您需要在inverse_of: nil中包含class Book如果 class Author不使用has_many :books

传统案例:

# app/models/book.rb
class Book
  field :title
  belongs_to :author
end

# app/models/author.rb
class Author
  field :name
  has_many :books
end

没有对立关系的情况:

class Book
  field :title
  belongs_to :author, inverse_of: nil
end

# here we use `get_books` instead of `has_many :books`
# so we need `inverse_of: nil` so Mongoid doesn't get confused
class Author
  field :name
  # has_many :books

  def get_books
    Book.in(author_id: self.id)
  end
end

进一步阅读:http://dmitrypol.github.io/mongo/2016/12/05/habtm-inverse-nil.html#traditional-has_and_belongs_to_many