如何在检索具有has_one关系的记录之前检查当前模型

时间:2019-05-14 03:26:25

标签: ruby-on-rails ruby-on-rails-5 polymorphic-associations

给出以下多态关系:

class Note < ApplicationRecord
  belongs_to :noteable, polymorphic: true

  has_one :garden, foreign_key: :id, primary_key: :noteable_id
end

class Garden < ApplicationRecord
  has_many :notes, as: :noteable
end

我想验证noteable_typeGarden来防止不匹配。

什么是解决此问题的好方法?

1 个答案:

答案 0 :(得分:1)

您可以使用build_in is_a?方法来检查相关记录是什么。所以基本上您可以通过以下操作来检查它是否是花园:

Note.find(1).garden.is_a? Garden

如果这是真的,那么您可以确定它确实是一个花园。

一个提示:我将更改has_one的名称,因为它已经假定它是一个花园,而它可以是多态关系中的其他东西。