Mysql 活动管理中未更新多对多联接表

Mysql 活动管理中未更新多对多联接表,mysql,ruby-on-rails,ruby,activeadmin,ruby-on-rails-5,Mysql,Ruby On Rails,Ruby,Activeadmin,Ruby On Rails 5,我有两种型号的目的地和包裹。一个包可能有多个目的地,目的地可能包含多个包。为了维护关系,我有一个名为packages\u In\u destinations的表。虽然我试图在active admin中从包表单插入目的地,但它没有显示任何错误,但是包\u in\u destinations表没有更新。我正在使用MySQL作为数据库 # app/admin/package.rb ActiveAdmin.register Package do permit_params :package_id,

我有两种型号的目的地和包裹。一个包可能有多个目的地,目的地可能包含多个包。为了维护关系,我有一个名为packages\u In\u destinations的表。虽然我试图在active admin中从包表单插入目的地,但它没有显示任何错误,但是包\u in\u 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
#app/admin/package.rb
ActiveAdmin.register包do
许可参数:包id,:包标题,:描述,:特色图片,:持续时间,:元描述,:元关键字,:发布,:包类别id,:目的地id
表格do | f|
f、 语义错误*f.object.errors.keys
f、 输入“包详细信息”吗
f、 输入:destination_id,:as=>:复选框,:collection=>destination.all.collect{| destination |[destination.destination_title,destination.id]}
结束
f、 行动
结束
结束
#app/models/package.rb文件
类包<应用程序记录
验证以下内容的唯一性:包标题,范围::包标题
验证:包\u标题,:说明,:包\u类别\u id,:存在=>true
属于:包类别
是否有和属于多个目的地的包裹
有多个:目的地,通过::包在目的地中
结束
#app/models/destination.rb文件
类目标<应用程序记录
验证以下内容的唯一性:目的地标题,范围::目的地标题
验证:目的地标题、说明、高度、地理位置、状态=>true
是否有和属于多个目的地的包裹
在目的地中有多个:包,通过::包
结束
#app/models/packages\u in_destination.rb
类包指定<应用程序记录
拥有和属于多个目的地:目的地,外键::目的地\u id,类名:'destination'
有和属于多个包:包,外键::包id,类名:'package'
结束
两个表之间的关系已从迁移文件中创建

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 CreatePackagesInDestinations
创建另一个迁移文件以向表中添加主键

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

因此,从所有这些情况来看,没有显示任何错误,但是包保存在packages表中,但没有插入到
packages\u in\u destinations
表中的关系。有人,请提出缺少什么和这些有什么问题?

您需要使用
has\u和\u属于\u many
has\u many:through
。不要同时使用两者

1) 带有
的示例具有且属于多个
。在这种情况下,您可以删除
PackagesInDestination
model:

# 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

@欢迎你。如果我的答案确实帮助了你,请考虑将它标记为通过点击左边的复选标记来接受。
# 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