Ruby on Rails для наследования одной таблицы - PullRequest
2 голосов
/ 03 сентября 2010

Таким образом, в рельсах, используя активную запись, мы можем иметь несколько моделей, которые наследуют пользователя

Базовый класс - Подкласс пользователя - Сотрудник, Менеджер, Супервизор

Поэтому в рельсах мы используем толькоодна таблица, хотя, когда вы создаете нового Employee и когда вы пытаетесь получить доступ к Employee.salary, доступ к этим атрибутам должен иметь только менеджер и супервизор.Как вы защищаете их?Аттр методы?

Заранее спасибо.

1 Ответ

2 голосов
/ 03 сентября 2010

Я настроил STI в проекте очень давно.Я забыл подробности сейчас, но вот код из этого проекта, который может помочь.Это из Rails 2.3.4.Не уверен, как это будет выглядеть в Rails 3. По умолчанию Rails с предположением, что любой столбец с именем type существует для целей наследования одной таблицы.Если вам нужно указать, используйте «set_inheritance_column», как вы видите ниже.Я не припоминаю возможности защитить атрибуты одного подкласса от других подклассов.Как вы упомянули, все хранится в одной таблице.Я думаю, что пытался в то время и не мог, но я был очень плохо знаком с Rails в то время.Я думаю, что это может быть выполнено с attr_accessable или что-то на подклассе.Хотя я могу ошибаться, но попробуйте.

class User < ActiveRecord::Base
  set_inheritance_column :user_type
  attr_protected :user_type
end

class BusinessOwner < User
  has_many :businesses
end

class SiteUser < User
end

Из схемы:

create_table "users", :force => true do |t|
  t.string  "user_type"
  t.string  "username"
  t.string  "email"
  t.integer "location_id"
...
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...