gpt4 book ai didi

mysql - 多对多连接表未在 Active admin 中更新

转载 作者:行者123 更新时间:2023-11-28 23:17:22 26 4
gpt4 key购买 nike

我有两个模型 Destination 和 Package。一个包可能有多个目的地,而目的地可能包含多个包。为了保持这种关系,我有一个名为 packages_in_destinations 的表。当我尝试在事件管理中从包表单插入目的地时,它没有显示任何错误,但 packages_in_destinations 表没有更新。我正在使用 MySQL 作为数据库。

# app/admin/package.rb
ActiveAdmin.register Package do
permit_params :package_id, :package_title, :description, :featured_image, :duration, :meta_description, :meta_keywords, :published, :package_categories_id, :destinations_id

form do |f|
f.semantic_errors *f.object.errors.keys
f.inputs "Package Details" do
f.input :destination_id, :as => :check_boxes, :collection => Destination.all.collect {|destination| [destination.destination_title, destination.id]}
end
f.actions
end
end

# app/models/package.rb file
class Package < ApplicationRecord
validates_uniqueness_of :package_title, scope: :package_title
validates :package_title, :description, :package_categories_id, :presence => true
belongs_to :package_category
has_and_belongs_to_many :packages_in_destinations
has_many :destinations, through: :packages_in_destinations
end

# app/models/destination.rb file
class Destination < ApplicationRecord
validates_uniqueness_of :destination_title, scope: :destination_title
validates :destination_title, :description, :altitude, :geolocation, :presence=>true
has_and_belongs_to_many :packages_in_destinations
has_many :packages, through: :packages_in_destinations
end

# app/models/packages_in_destination.rb
class PackagesInDestination < ApplicationRecord
has_and_belongs_to_many :destinations, foreign_key: :destination_id, class_name: 'Destination'
has_and_belongs_to_many :packages, foreign_key: :package_id, class_name: 'Package'
end

两个表之间的关系已经从迁移文件中创建

class CreatePackagesInDestinations < ActiveRecord::Migration[5.0]
def up
create_join_table :packages, :destinations, table_name: :packages_in_destinations do |t|
t.index :package_id
t.index :destination_id
t.timestamps
end

def down
drop_table :packages_in_destinations
end
end

创建另一个迁移文件以将主键添加到表中

class AddingPrimaryInPackaesInDestination < ActiveRecord::Migration[5.0]
def change
add_column :packages_in_destinations, :id, :primary_key
end
end

所以从所有这些事情来看,没有显示任何错误,但是包保存在包表中,但没有在 packages_in_destinations 表中插入关系。请有人建议缺少什么以及这些有什么问题?

最佳答案

您需要使用 has_and_belongs_to_manyhas_many :through。不要同时使用两者。

1) has_and_belongs_to_many 示例。在这种情况下,您可以删除 PackagesInDestination 模型:

# app/models/package.rb file
class Package < ApplicationRecord
# ...
has_and_belongs_to_many :destinations, join_table: :packages_in_destinations
end

# app/models/destination.rb file
class Destination < ApplicationRecord
# ...
has_and_belongs_to_many :packages, join_table: :packages_in_destinations
end

# app/models/packages_in_destination.rb
# removed

2) has_many :through 示例:

# app/models/package.rb file
class Package < ApplicationRecord
# ...
has_many :packages_in_destinations
has_many :destinations, through: :packages_in_destinations
end

# app/models/destination.rb file
class Destination < ApplicationRecord
# ...
has_many :packages_in_destinations
has_many :packages, through: :packages_in_destinations
end

# app/models/packages_in_destination.rb
class PackagesInDestination < ApplicationRecord
belongs_to :destination
belongs_to :package
end

关于mysql - 多对多连接表未在 Active admin 中更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43295621/

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