Как описано @ Sean , вам нужно использовать has_many :through
связь, так как:
Вы должны использовать has_many :through
, если вам нужны проверки, обратные вызовы или дополнительные атрибуты длямодель соединения. 2.8 Выбор между has_many: through и has_and_belongs_to_many
Например, для создания модели соединения rank
(я не могу придумать имя лучше, чем rank, извините!):
# join table migration
class CreateRanks < ActiveRecord::Migration[5.2]
def change
create_table :ranks do |t|
t.references :product
t.references :category
t.integer :rank
t.timestamps
end
end
end
Ваши модели:
# product.rb
class Product < ApplicationRecord
has_many :ranks
has_many :categories, through: :ranks
end
# rank.rb
class Rank < ApplicationRecord
belongs_to :product
belongs_to :category
end
# category.rb
class Category < ApplicationRecord
has_many :ranks
has_many :products, through: :ranks
end
Таким образом, вы можете создавать свои записи "оптом" следующим образом:
Rank.create [
{ category: a, product: x, rank: 1},
{ category: b, product: y, rank: 2}
]