如何解决Rails 6:将两个多对多对象与中间表中的属性相关联
因此,我正在开发项目软件,并且具有模型Project和Type,它们之间的关系是很多对很多。
class Project < ApplicationRecord
has_many :project_types
has_many :types,through: :project_types
end
class Type < ApplicationRecord
has_many :project_types
has_many :projects,through: :project_types
end
class ProjectType < ApplicationRecord
belongs_to :project
belongs_to :type
end
我发现的信息说,我可以使用此代码将这两个对象关联起来。
project = Project.new(...)
type = Type.new(...)
project.types << type
project.save
但是,我的项目和类型之间的中间表project_types有一个日期,所以问题是:如何在代码中添加该日期?所以我可以跳过这种方式
ProjectType.new(project_id: project.id,type_id: type.id,date: Date.new(...) )
[EDIT]我要添加的数据,是从具有旧项目,类型和日期的excel中获取的,因此该数据用于date attr
我的母语是西班牙语,很抱歉,如果我的英语不是最好的...谢谢您的帮助
解决方法
project_types保留什么日期?
根据数据,您可能有两种选择。
如果创建日期为@at,则始终可以将created_at
作为时间戳添加到ProjectType
模型中。这应该会自动更新,您将可以轻松地从时间戳中提取日期。
如果从“项目/类型”模型中选择日期,则可以在ProjecType模型中使用回调来填充日期属性。
class ProjectType < ApplicationRecord
belongs_to :project
belongs_to :type
before_save :update_date
private
def update_date
self.date = project.date # similarly you can pick it from `type` model
end
end
或者您也可以像以前一样创建保存它,但是保存project_type而不是在project
中输入类型,并接受nested_attributes作为项目类型中的类型
class ProjectType < ApplicationRecord
belongs_to :type
accepts_nested_attributes_for :type
end
project = Project.new(...)
type_attributes = params[:type] # lets say you're sending type attributes inside `type`
project.project_types << ProjectType.new(type_attributes: type_attributes,date: Date.new(...))
project.save
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。