Я изучаю RoR из многих лет c # и MSSQL.
Я выбрал проект для создания веб-сайта для моего брата, который является менеджером по аренде недвижимости.Я подумал, что это должно быть довольно легко, так как модели должны быть прямыми, но мне кажется, что я переборщил со всем или у меня возникли проблемы с отказом от «старого» пути.В любом случае здесь проблема.Я начинаю только с двух моделей (Пользователь и Собственность).Модель собственности проста, пользователя не так много.Я понял, что у нас есть три типа пользователей в системе.Арендаторы, Владельцы и Менеджеры (мой брат будет единственным менеджером, но я решил, что планирую его развивать). Он управляет объектами недвижимости для нескольких владельцев, каждый из которых может владеть многими объектами.Каждое свойство будет иметь одного владельца, одного арендатора и одного управляющего.
Арендаторы смогут войти в систему и просто просмотреть арендуемое им имущество, чтобы, возможно, заполнить запрос на техническое обслуживание или что-то в этом роде… (никаких реальных требований вэтот пункт даже дает арендатору логин в систему, но я подумал, что это будет хорошее упражнение)
То же самое касается владельцев, никому из них не нужен доступ к системе (они нанимают моего брата, чтобы онине должен быть вовлечен), но я подумал, что это может быть хорошим и снова хорошим упражнением.
Я использовал Nifty_generator для генерации пользователя, который просто дает электронную почту, пароль и т. д. Я расширил его следующим образом…
class AddProfileDataToUsers < ActiveRecord::Migration
def self.up
add_column :users, :first_name, :string
add_column :users, :last_name, :string
add_column :users, :address1, :string
add_column :users, :address2, :string
add_column :users, :city,:string
add_column :users, :state, :string
add_column :users, :zip, :string
add_column :users, :phone, :string
add_column :users, :email, :string
add_column :users, :user_type, integer
end
def self.down
remove_column :users, :first_name
remove_column :users, :last_name
remove_column :users, :address1
remove_column :users, :address2
remove_column :users, :city
remove_column :users, :state
remove_column :users, :zip
remove_column :users, :phone
remove_column :users, :email
remove_column :users, :user_type
end
end
Вот код для создания таблицы свойств
class CreateProperties < ActiveRecord::Migration
def self.up
create_table :properties do |t|
t.string :address
t.string :city
t.string :type
t.integer :beds
t.float :baths
t.float :price
t.float :deposit
t.string :terms
t.string :laundry
t.datetime :date_available
t.integer :sqft
t.integer :owner_id
t.integer :manager_id
t.integer :tenant_id
t.timestamps
end
end
def self.down
drop_table :properties
end
end
Я добавил следующее в модель пользователя, сгенерированную генератором nifty_authentication
class User < ActiveRecord::Base
#other stuff in the user model up here......
validates_length_of :password, :minimum => 4, :allow_blank => true
#this is the stuff that I have added to the user model
has_many :managed_properties, :class_name => "Property", :foreign_key => "manager_id"
has_many :owned_properties, :class_name => "Property", :foreign_key => "owner_id"
has_one :rented_property, :class_name => "Property", :foreign_key => "tenant_id"
Затем я добавил это в модель свойств ....
class Property < ActiveRecord::Base
belongs_to :manager, :class_name => "User" #picked up by the manager_id
belongs_to :owner, :class_name => "User" #picked up by the owner_id
belongs_to :tenant, :class_name => "User" #picked up by the tenant_id
end
Мой вопрос: выглядит ли это приемлемым способом моделирования ситуации?n Я описал?
Должен ли я использовать наследование одной таблицы и создать модель арендатора;модель менеджера;а владелец модели?Проблема, с которой я столкнулся, заключалась в том, что один пользователь мог быть и менеджером, и владельцем.Эту проблему можно решить, имея таблицы ролей для пользователя, где у пользователя много ролей, а у роли много пользователей.Я также просмотрел таблицу профилей с однозначным соответствием с пользовательской таблицей и сделал ее полиморфной, но я не думал, что эта ситуация действительно требует этого, и это не решило проблему, когда пользователь может быть владельцеми менеджер .....
Это когда я начал думать, что, может быть, я переборщил с проблемой и придумал, что вы видите здесь.
Я приветствую любые ваши конструктивные комментарии.Пожалуйста, имейте в виду, что я никогда ничего не создавал в Rails, и это все первая попытка, неделю назад я даже не устанавливал rails на свой компьютер.
Я не знаю, имеет ли это значение, но яполагал, что администратор / менеджер будет отвечать за создание пользователей.Это не будет самоподписывающийся тип сайта.Менеджер добавит новых владельцев, когда он зарегистрирует нового владельца, и то же самое пойдет на арендаторов.Это облегчит определение типа создаваемого им пользователя.
Спасибо за понимание, которое у вас есть.