创造一种可忽略的多态关系

时间:2018-01-05 21:59:49

标签: ruby-on-rails ruby activerecord polymorphism

我希望创建一个名为ignorables的表ignorable_typeignorable_id,我可以在UI中存储我想忽略的不同类型对象的ID。

如何利用ActiveRecord的多态关联来实现这一目标?

1 个答案:

答案 0 :(得分:1)

我不得不说我不会100%得到你的问题,但这将是我的看法

1)您需要创建表格。我相信你知道怎么做,但这就是

rails g migration CreateIgnores

#db/migrate/20180106072916_create_ignorables.rb
class CreateIgnors < ActiveRecord::Migration[5.0]
  def change
    create_table :ignors do |t|
      t.integer :ignorable_id
      t.string  :ignorable_type
      ...
    end
    add_index :ignors, [:ignorable_type, :ignorable_id]
  end
end

2)现在您可以创建模型

class Ignore < ApplicationRecord
  belongs_to :ignorable, polymorphic: true
end

3)什么属于可忽略的

class Other < ApplicationRecord
  has_many :ignored, as: :ignorable
end

4)现在最后但不是列表你想做点什么

class Other < ApplicationRecord
  has_many :ignored, as: :ignorable
  validate :belongs_to_ignored
  ...
  private
  def belongs_to_ignored
    if ignored
      false
    end
  end
end

我希望这可以引导你朝着正确的方向前进