Ruby on Rails для наследования одной таблицы 5.2 - PullRequest
0 голосов
/ 09 июня 2018

У меня есть три модели: Пользовательская, Индивидуальная и Бизнес.Я также создал три таблицы, по одной для каждой.Моя личная и пользовательская таблица идентичны, поэтому я унаследовал от user.rb Моя проблема была, когда я пришел в business.rb, я смог получить доступ ко всем родительским атрибутам пользователя (пример: first_name), но не смог получить доступ к моделиконкретные атрибуты (например, company_name), которые находятся в таблице бизнесов.

class User < ApplicationRecord
  # This is the user model
  devise :database_authenticatable, :registerable,
         :recoverable, :rememberable, :trackable, :validatable,
         :confirmable, :lockable, :timeoutable
  enum status: {unverified: 0, verified: 1}
end


# This is the business model
class Business < User
end
individual.rb
# # This is the individual model
class Individual < User
end
schema.rb
 # This is the schema for all the models
ActiveRecord::Schema.define(version: 2018_06_09_091056) do
  create_table "businesses", force: :cascade do |t|
    t.string "company_address"
    t.string "company_name"
    t.string "company_phone_number"
    t.text "documents"
  end
  create_table "individuals", force: :cascade do |t|
  end
  create_table "users", force: :cascade do |t|
    t.string "first_name"
    t.string "last_name"
    t.integer "status", default: 0
    t.string "date_of_birth"
    t.text "passport"
    t.string "country"
    t.string "personal_address"
    t.text "recovery_photo"
    t.string "type"
    t.string "email", default: "", null: false
    # etc..
  end
end

1 Ответ

0 голосов
/ 09 июня 2018

Это называется Одиночная таблица Наследование по причине: Все данных хранятся в одной таблице.

При записи class Individual < User, вы храните данные этой модели в таблице users.

Единственная отличительная особенность этих записей заключается в том, что individual.type == 'Individual'.

Таблицы individuals и businessesв вашем текущем дизайне никогда не используется .

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

class User < ApplicationRecord
  # This is the user model
  devise :database_authenticatable, :registerable,
         :recoverable, :rememberable, :trackable, :validatable,
         :confirmable, :lockable, :timeoutable
  enum status: {unverified: 0, verified: 1}
end

# app/models/individual.rb
class Individual < User
end

# app/models/business.rb
class Business < User
  has_one :business_attributes
end

# app/models/business_attributes.rb
class BusinessAttributes < ApplicationRecord
  belongs_to :business
end

# db/schema.rb
ActiveRecord::Schema.define(version: 2018_06_09_091056) do
  create_table "business_attributes", force: :cascade do |t|
    t.string "company_address"
    t.string "company_name"
    t.string "company_phone_number"
    t.text "documents"
  end
  create_table "users", force: :cascade do |t|
    t.string "first_name"
    t.string "last_name"
    t.integer "status", default: 0
    t.string "date_of_birth"
    t.text "passport"
    t.string "country"
    t.string "personal_address"
    t.text "recovery_photo"
    t.string "type"
    t.string "email", default: "", null: false
    # etc..
  end
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...