2013-10-09 56 views
2

我有四種模型,我們稱之爲汽車和房屋。用戶可以有多輛汽車和多棟房屋。汽車和房屋屬於用戶。我希望用戶能夠上傳他們汽車的多張照片以及他們房屋的多張照片,從我讀過的內容來看,這意味着要創建一個名爲「照片」的新模型。有兩種不同的模型可以同時擁有have_many照片和照片屬於多個模型嗎?我使用Ruby 2.0.0和Rails 4多個模型的多個圖像 - 回形針,導軌

素描/ PseudoRuby

User 
    has_many :cars 
    has_many :houses 

Car 
    belongs_to :user 
    has_many :photos 

House 
    belongs_to :user 
    has_many :photos 

Photo 
    belongs_to :car, :house 

這是關係好嗎?我不確定是否必須爲Car和House的照片製作單獨的模型。

回答

9

從Rails的角度來看,是的,你可以做到這一點。 belongs_to關聯告訴Rails將Foreign_key保留在Photo模型中。因此,在您的示例中,您的照片表格將包含2個外鍵:

  • car_id將從汽車表格指向關聯的車輛標識(主鍵)。
  • house_id將指向房屋表中關聯的房屋ID(主鍵)。

現在,從回形針的角度來看,您可以根據需要爲特定模型製作多張照片。但是,爲了擁有與House和Car相關的相同照片模型,您需要使用多態關聯。 您的模型將與此類似:

class Photo < ActiveRecord::Base 
belongs_to :imageable, polymorphic: true 
has_attached_file :photo, styles: {} 

end 

class Car < ActiveRecord::Base 
    has_many :photos, as: :imageable 
end 

class House < ActiveRecord::Base 
    has_many :photos, as: :imageable 
end 

你可以得到約多態關聯這裏的更多信息:http://guides.rubyonrails.org/association_basics.html