2013-04-05 1 views
0

Я создал приложение простой адресной книги в своем классе Ruby on Rails с отдельными моделями для адресов улиц (Адрес), адресов электронной почты (электронная почта) и веб-адресов (Web) с использованием вложенных форм с использованием одного контроллера (Entry) , Я бы хотел изменить две последние модели (Email и Web), чтобы использовать однонаправленное наследование таблицы из базовой таблицы Url. Это предпочтительнее (или даже возможно) по сравнению с перестройкой приложения с нуля с правильными отношениями наследования?Ruby on Rails: Возможно/предпочтительнее реализовать однонаправленное наследование после создания отдельных моделей?

Я включил свои существующие модели ниже:

class Entry < ActiveRecord::Base 
    attr_accessible :first_name, :last_name, :addresses_attributes, :webs_attributes, :emails_attributes 
    has_many :addresses, dependent: :destroy 
    has_many :emails, dependent: :destroy 
    has_many :webs, dependent: :destroy 
    accepts_nested_attributes_for :addresses, :emails, :webs, allow_destroy: true, reject_if: :all_blank 
end 

class Address < ActiveRecord::Base 
    belongs_to :entry 
    belongs_to :address_type 
    attr_accessible :address_type_id, :city, :state, :street, :zip 
end 

class Email < ActiveRecord::Base 
    belongs_to :entry 
    belongs_to :address_type 
    attr_accessible :address_type_id, :email, :entry_id 
    validates_email_format_of :email 
end 

class Web < ActiveRecord::Base 
    belongs_to :entry 
    belongs_to :address_type 
    attr_accessible :address_type_id, :web, :entry_id 
end 

Как меняется

class Email < ActiveRecord::Base 

и

class Web < ActiveRecord::Base 

к

class Email < Url 

и

class Web < Url 

влияет на мое существующее приложение?

Заранее благодарим за помощь и совет.

ответ

0

можно произвести миграцию, которая устанавливает единую таблицу наследования, но я, к сожалению, не в состоянии сделать это успешно, не нарушая другие вещи в моем приложении. Я пошел вперед и перезапустил новую версию с новым приложением и правильно выполнил правильное наследование. Это было в интересах времени и практики создания приложения с нуля. В реальной среде я уверен, что стоит потратить время на создание надлежащей миграции и изменений в различных зависимостях.

Спасибо Zippie за ваш совет. Я ценю это.

1

Обязательно добавьте класс Url, который наследует класс ActiveRecord::Base.

class Url < ActiveRecord::Base 
    belongs_to :entry 
    belongs_to :address_type 
    attr_accessible :address_type_id :entry_id 
end 

class Email < Url 
    attr_accessible :email 
    validates_email_format_of :email 
end 

class Web < Url 
    attr_accessible :web 
end 

также добавить дополнительную строку в entry.rb:

has_many :urls, dependent: :destroy 
Смежные вопросы