我在产品和品牌表/模型之间添加了has_and_belongs_to_many
这就是模型的样子:
class Brand < ActiveRecord::Base
has_and_belongs_to_many :products
default_scope { order('name asc')}
end
class Product < ActiveRecord::Base
has_and_belongs_to_many :brands
end
这些是表格中的现有列:
[13] pry(main)> Brand
=> Brand(id: integer, name: string, created_at: datetime, updated_at: datetime, product_id: integer)
[11] pry(main)> Product
=> Product(id: integer, name: string, created_at: datetime, updated_at: datetime)
加入表db迁移:
class CreateJoinTableProductsBrands < ActiveRecord::Migration
def change
create_join_table :products, :brands do |t|
t.integer :product_id
t.integer :brand_id
t.index [:product_id, :brand_id]
t.index [:brand_id, :product_id]
end
end
end
问题:
我应该添加ProductBrand模型吗?我尝试了但似乎Rails控制台没有识别它
class ProductBrand&lt;的ActiveRecord ::基
端
在ActiveAdmin中,为Product或Brand创建新条目的正确方法是什么,以便新记录正确链接Product,Brand和ProductBrand条目?
答案 0 :(得分:0)
我强烈建议阅读一些教程和文档,解释ActiveRecord中HATBM或HMT关系之间的根本区别。我认为这对回答你自己的问题还有很长的路要走。
请使用下表:团队和用户(可能与您的品牌和产品相当)。他们同样在他们之间有两种方式的HATBM关系。
create_table "teams", force: :cascade do |t|
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
t.integer "wins"
t.float "win_percentage"
end
create_table "teams_users", id: false, force: :cascade do |t|
t.integer "team_id", null: false
t.integer "user_id", null: false
end
add_index "teams_users", ["team_id", "user_id"], name: "index_teams_users_on_team_id_and_user_id", using: :btree
add_index "teams_users", ["user_id", "team_id"], name: "index_teams_users_on_user_id_and_team_id", using: :btree
create_table "users", force: :cascade do |t|
t.string "first_name"
t.string "last_name"
t.string "user_name"
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
end
请注意,teams表中没有user_id的外键(FK),users表中没有FK。连接表的目的是连接这两个模型,因此每个模型都不需要FK来链接它们。
回答你的前三个问题:
have_many through
关系。遵循Rails惯例,如果使用ActiveRecord的HATBM关联,您不需要/想要这个。这个问题/答案有助于: has_and_belongs_to_many vs has_many through
和解释联接表的优秀帖子: http://nishacodes.tumblr.com/post/73484141822/join-tables-heres-the-deal