2017-08-29 68 views
0

如何創建一個has_many關聯,但是也能夠通過不是名稱的術語來引用各種實例?有點像類的一個屬性? (dog1在這種情況下)Rails has_many與單個引用的關聯

class User < ActiveRecord::Base 
    has_many :dogs 
    dogs: dog1, dog2, dog3, dog4 # I know this won't work but just to give the idea 
end 

所以,你可以這樣做:

barry = User.create(name: 'Barry') 
barry.dog1.create(name: 'rover', weight: 12) 
barry.dog1.name  #=> rover 
barry.dog1.weight #=> 12 

回答

0

有沒有乾淨的方式在Rails中要做到這一點,一個解決方法是使用has_one

class User 
    has_many :dogs 
    has_one :favorite_dog, class_name: 'Dog', -> { where(favorite: true).order(updated_at: :desc) } 

但是,事情是,Rails的has_one只是一個has_many與SQL LIMIT 1。所以實際上,即使可能有幾隻「偏愛的狗」,關係some_user.favorite_dog也只會返回一條記錄。我用作示例的has_one :favorite_dog應該是latest_favorited_dog(因爲在updated_at上的訂單)。

has_one documentation:https://apidock.com/rails/ActiveRecord/Associations/ClassMethods/has_one