Hello Rails社区!
我不知道如何构建我的不同模型。
我有2个不同的模型:汽车和房屋 这些模型可以有多张照片。
我的问题是:
=>选项1
rails g model Photo name:string, description:text car:references house:references
Car.rb
has_many :photos
House.rb
has_many :photos
Photo.rb
belongs_to :car
belongs_to :house
此选项的问题是照片必须与汽车和房屋相关联。女巫不好。 =>我想要一张照片与汽车或房子相关联
我不知道如何继续......
Thx!
答案 0 :(得分:1)
这几乎是Rails guides
中的原型polymorphic
关联
$ rails g model Photo name:string description:text imageable:references{polymorphic}:index
生成此迁移文件
class CreatePhotos < ActiveRecord::Migration[5.1]
def change
create_table :photos do |t|
t.string :name
t.text :description
t.references :imageable, polymorphic: true
t.timestamps
end
end
end
t.references :imageable, polymorphic: true
将在您的photos
表格中为您提供两列:imageable_id:integer
,这将是关联对象的id
列,imageable_type:string
这将是关联对象的字符串化类名。这允许photos
与一个关联上的任何模型接口并属于该模型。
然后你的模型应该是这样的
class Photo < ApplicationRecord
belongs_to :imageable, polymorphic: true
end
class Car < ApplicationRecord
has_many :photos, as: :imageable
end
class House < ApplicationRecord
has_many :photos, as: :imageable
end
您可以使用Photo
向Car
添加Car.find(params[:car_id]).photos.create
,并使用Car
Photo
分配给Photo.new imageable: Car.find(params[:car_id])
答案 1 :(得分:0)