两者之间的关联STI/Polymorphic
Association between two STI/Polymorphic
目前我有一个包含相同属性的 Group 和 GroupPeriod
create_table "groups", force: :cascade do |t|
t.bigint "company_id"
t.string "name"
t.date "cutoff_date"
t.date "processing_date"
t.integer "working_days"
t.integer "working_hours"
t.integer "status"
t.float "basic_pay"
t.string "type"
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
t.index ["company_id"], name: "index_groups_on_company_id"
end
create_table "group_periods", force: :cascade do |t|
t.bigint "company_id"
t.date "start_date"
t.date "end_date"
t.string "type"
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
t.bigint "group_id"
t.index ["company_id"], name: "index_group_periods_on_company_id"
t.index ["group_id"], name: "index_group_periods_on_group_id"
end
逻辑是 Group 有很多 GroupPeriods。但是后来我有不同的小组;账单和支付。所以我正在为 BillGroup 和 PayGroup 创建一个 STI:
class Group < ApplicationRecord
has_many :group_periods
end
class BillGroup < Group
#=> has_many :bill_periods??
end
class PayGroup < Group
#=> has_many :pay_periods??
end
我遇到的问题是每个组都有很多 PayPeriod 或 BillPeriod。所以我创建了一个 GroupPeriod 到 link
class GroupPeriod < ApplicationRecord
belongs_to :group
end
class BillPeriod < GroupPeriod
#=> belongs_to :bill_group??
end
class PayPeriod < GroupPeriod
#=> belongs_to :pay_group??
end
我的问题是,如何通过继承来保证,我可以灵活一点
- BillGroup有很多个BillPeriods;
- PayGroup 有很多 PayPeriods;
彼此没有重叠(BillGroup 不会看到 PayPeriod,反之亦然)?同时,我应该为每个 BillGroup 和 PayGroup 将它们分成 2 个不同的表,这是一种不好的做法吗?
class Group < ApplicationRecord
has_many :group_periods
end
class Period < ApplicationRecord
belongs_to :group
belongs_to :group_periods, polymorphic: true
end
class BillPeriod < GroupPeriod
has_many :periods, as: :group_periods, dependent: :destroy
end
class PayPeriod < GroupPeriod
has_many :periods, as: :group_periods, dependent: :destroy
end
你的模型看起来是这样的,剩下的就看你的联想了。
目前我有一个包含相同属性的 Group 和 GroupPeriod
create_table "groups", force: :cascade do |t|
t.bigint "company_id"
t.string "name"
t.date "cutoff_date"
t.date "processing_date"
t.integer "working_days"
t.integer "working_hours"
t.integer "status"
t.float "basic_pay"
t.string "type"
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
t.index ["company_id"], name: "index_groups_on_company_id"
end
create_table "group_periods", force: :cascade do |t|
t.bigint "company_id"
t.date "start_date"
t.date "end_date"
t.string "type"
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
t.bigint "group_id"
t.index ["company_id"], name: "index_group_periods_on_company_id"
t.index ["group_id"], name: "index_group_periods_on_group_id"
end
逻辑是 Group 有很多 GroupPeriods。但是后来我有不同的小组;账单和支付。所以我正在为 BillGroup 和 PayGroup 创建一个 STI:
class Group < ApplicationRecord
has_many :group_periods
end
class BillGroup < Group
#=> has_many :bill_periods??
end
class PayGroup < Group
#=> has_many :pay_periods??
end
我遇到的问题是每个组都有很多 PayPeriod 或 BillPeriod。所以我创建了一个 GroupPeriod 到 link
class GroupPeriod < ApplicationRecord
belongs_to :group
end
class BillPeriod < GroupPeriod
#=> belongs_to :bill_group??
end
class PayPeriod < GroupPeriod
#=> belongs_to :pay_group??
end
我的问题是,如何通过继承来保证,我可以灵活一点
- BillGroup有很多个BillPeriods;
- PayGroup 有很多 PayPeriods;
彼此没有重叠(BillGroup 不会看到 PayPeriod,反之亦然)?同时,我应该为每个 BillGroup 和 PayGroup 将它们分成 2 个不同的表,这是一种不好的做法吗?
class Group < ApplicationRecord
has_many :group_periods
end
class Period < ApplicationRecord
belongs_to :group
belongs_to :group_periods, polymorphic: true
end
class BillPeriod < GroupPeriod
has_many :periods, as: :group_periods, dependent: :destroy
end
class PayPeriod < GroupPeriod
has_many :periods, as: :group_periods, dependent: :destroy
end
你的模型看起来是这样的,剩下的就看你的联想了。