Наследование в Ruby on Rails: установка типа базового класса - PullRequest
2 голосов
/ 16 июня 2010

Я реализую наследование одной таблицы внутри Rails.Вот соответствующая миграция:

class CreateA < ActiveRecord::Migration
  def self.up
    create_table :a do |t|
      t.string :type
  end
end

Класс B наследуется от A:

class B < A
end

Теперь легко получить все экземпляры класса B:

B.find(:all)

или

A.find_all_by_type("B")

Но как мне найти все экземпляры класса A (те, которые не относятся к типу B)?Это плохая организация?

Я пробовал это:

A.find_all_by_type("A")

Но экземпляры класса A имеют тип nil.Я мог бы сделать

A.find_all_by_type(nil)

, но это как-то не правильно.В частности, он перестал бы работать, если бы я решил сделать наследование A от другого класса.

Было бы более целесообразно определить значение по умолчанию для: type в миграции?Что-то вроде:

t.string :type, :default => "A"

Я что-то здесь не так делаю?

1 Ответ

2 голосов
/ 16 июня 2010

Поле типа является в большей степени подтипом, поэтому класс предка имеет тип nil.

На самом деле вы можете установить тип записи класса А на «А», и он все равно будет вести себя должным образом с ощущением теплой нечеткости. :)

class A
  before_create :set_default_type

  def set_default_type
    self.type = self.class.name if type.blank?
  end
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...