gpt4 book ai didi

ruby-on-rails - Rails has_and_belongs_to_many 总是插入数据库

转载 作者:搜寻专家 更新时间:2023-10-30 23:19:24 24 4
gpt4 key购买 nike

这是我的问题:

class Facility < ActiveRecord::Base
...
has_and_belongs_to_many :languages, :autosave => false, :join_table => 'facilities_languages'
...
end

当我做这样的事情时:

facility = Facility.find(1)
language = Language.find(1)
facility.languages << language

Rails 始终执行 SQL 请求:

"INSERT INTO `facilities_languages` (`language_id`,`facility_id`) VALUES (1, 1)"

有没有办法避免数据库请求,除非我调用“facility.save”?

显然,这里的 :autosave 选项还有其他作用。

最佳答案

您的问题是您使用的 has_and_belongs_to_many 不是基于 Model 的,因此您无法将其作为对象访问。您可以创建一个执行关联的 Model,然后您可以创建该关联模型的新对象。例如:

rails g scaffold JoinClass faculty_id:integer language_id:integer

在模型中

class JoinClass < ActiveRecord::Base
belongs_to :faculty
belongs_to :language
end

在其他模型中:

教师

class Faculty < ActiveRecord::Base
has_many :join_classes
has_many :languages, :though => :join_classes
end

语言

class Language < ActiveRecord::Base
has_many :join_classes
has_many :faculties, :through => :join_classes
end

然后您就可以通过创建不会自动保存的关联对象来添加关联。例如,您有一个包含 id 的 String,其中包含应该关联的语言对象的 id,在 FacultyController 中称为 language_ids:

language_ids.split(",").each do |language_id|
JoinClass.create(:faculty_id => @faculty.id, :language_id => language_id)
end

当然,这段代码应该在教师保存后进行调整和定位。

关于ruby-on-rails - Rails has_and_belongs_to_many 总是插入数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8503669/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com