在Rails 6中,可以通过使用has_many :through
关联来实现一个被两个无关模型使用的模型。下面是一个示例:
假设我们有三个模型:User、Product和Order。User和Product是两个无关的模型,而Order模型需要同时关联User和Product模型。
首先,生成User、Product和Order模型:
rails generate model User name:string
rails generate model Product name:string
rails generate model Order
然后,在生成的迁移文件中,添加必要的关联:
# create_users.rb
class CreateUsers < ActiveRecord::Migration[6.0]
def change
create_table :users do |t|
t.string :name
t.timestamps
end
end
end
# create_products.rb
class CreateProducts < ActiveRecord::Migration[6.0]
def change
create_table :products do |t|
t.string :name
t.timestamps
end
end
end
# create_orders.rb
class CreateOrders < ActiveRecord::Migration[6.0]
def change
create_table :orders do |t|
t.references :user, foreign_key: true
t.references :product, foreign_key: true
t.timestamps
end
end
end
接下来,定义模型之间的关联:
# user.rb
class User < ApplicationRecord
has_many :orders
has_many :products, through: :orders
end
# product.rb
class Product < ApplicationRecord
has_many :orders
has_many :users, through: :orders
end
# order.rb
class Order < ApplicationRecord
belongs_to :user
belongs_to :product
end
这样,Order模型就可以同时关联User和Product模型了。你可以通过Order模型来访问相关的User和Product实例,例如:
# 创建一个新的订单
user = User.create(name: "John")
product = Product.create(name: "iPhone")
order = Order.create(user: user, product: product)
# 通过Order模型访问关联的User和Product
order.user # 返回关联的User实例
order.product # 返回关联的Product实例
希望这个示例能帮助到你!