2010-05-12 79 views
0

我想通過關聯在has_many中設置一個默認值。ActiveRecord:通過在表中設置默認值

可以說我有三個型號:

人民

朋友

一個人可以請求狗成爲他們的朋友。

所以一個人會創建一個關聯,朋友的活動列= false。

User 
    has_many :friends 
    has_many :dogs, :through => :friends 

現在,當我給你一隻狗給用戶

User.find(1).dogs << dog 

的朋友表在活躍列空。

我的朋友模型定義爲

Friend 
    def initialize(args = {}) 
    super(args) 
    active = false 
    end 

然而,這不起作用,因爲永遠不會創建的朋友的對象。我是否必須手動創建一個?

+0

我不認爲這是可能的,你的情況,有一個'dog'而無需'friend'。 – 2010-05-12 01:22:07

+0

保存用戶對象時會發生什麼? – Fred 2010-05-12 02:04:40

+0

不正確的理解。我想創建一隻狗和一個朋友,但我希望朋友的主動標誌設置爲false。發生保存時,朋友的活動標誌將被設置爲空。我可以將數據庫中的默認值設置爲false,但是正在尋找ruby解決方案。另外,我只是不正確地做模型?是否有不同的模式來進行這些主動/非主動關係,比如雙方都必須批准的友誼? – 2010-05-12 06:08:04

回答

1

設置模型的默認值;在模型中,我這樣做

before_save :default_values 

    private 
    def default_values 
     self.status = :active unless self.status 
    end 

不知道這是否是正確的方法。

1

用下面的代碼將創建一個新的friendactive = false

class User < ActiveRecord::Base 
    has_many :friends, :conditions => "active = false" 
    has_many :dogs, :through => :friends 
end 

@user = User.new 
@user.friends.create #or @user.friends.build 
+0

我不能這樣做,因爲我需要其他值爲其他原因的活動。我覺得Ram的答案更適合。 – 2010-05-14 02:39:06