Rails 通过与 has_many 和 belongs_to 的关系
Rails through relation with has_many and belongs_to
我需要定义 Packages 和 Delivers 之间的关系:
1 个送货罐有很多包裹。
但是包裹不能有交付。包裹只能属于 Delivers。
投递 has_many 包裹,但包裹只能 belongs_to 投递(或分派,我不知道)。
我应该有作业 table,存储 deliver_id 和 package_id。当我分配要交付的包裹时 - 它应该创建新的分配记录
看来,我需要使用:
through: :package_assignments
但是我不明白packages, deliveries, assignments 之间的关系
现在我定义package.rb:
class Package < ApplicationRecord
belongs_to :assignments
deliver.rb:
class Deliver < ApplicationRecord
has_many :assignments
has_many :packages, through: :assignments
assignment.rb:
class Assignment < ApplicationRecord
belongs_to :deliver
has_many :packages
结果,我意识到 many_to_many Package 和 Deliver through Assignment 之间的关系。它允许分配,例如,要交付的包裹,它会自动创建带有 package_id 和 deliver_id 的分配记录。
交付模型:
class Deliver < ApplicationRecord
has_many :assignments, dependent: :destroy
has_many :packages, through: :assignments
end
封装型号:
class Package < ApplicationRecord
has_many :assignments, dependent: :destroy
has_many :delivers, through: :assignments
end
分配模型:
class Assignment < ApplicationRecord
belongs_to :deliver
belongs_to :package
end
我需要定义 Packages 和 Delivers 之间的关系: 1 个送货罐有很多包裹。 但是包裹不能有交付。包裹只能属于 Delivers。
投递 has_many 包裹,但包裹只能 belongs_to 投递(或分派,我不知道)。
我应该有作业 table,存储 deliver_id 和 package_id。当我分配要交付的包裹时 - 它应该创建新的分配记录
看来,我需要使用:
through: :package_assignments
但是我不明白packages, deliveries, assignments 之间的关系
现在我定义package.rb:
class Package < ApplicationRecord
belongs_to :assignments
deliver.rb:
class Deliver < ApplicationRecord
has_many :assignments
has_many :packages, through: :assignments
assignment.rb:
class Assignment < ApplicationRecord
belongs_to :deliver
has_many :packages
结果,我意识到 many_to_many Package 和 Deliver through Assignment 之间的关系。它允许分配,例如,要交付的包裹,它会自动创建带有 package_id 和 deliver_id 的分配记录。
交付模型:
class Deliver < ApplicationRecord
has_many :assignments, dependent: :destroy
has_many :packages, through: :assignments
end
封装型号:
class Package < ApplicationRecord
has_many :assignments, dependent: :destroy
has_many :delivers, through: :assignments
end
分配模型:
class Assignment < ApplicationRecord
belongs_to :deliver
belongs_to :package
end