2011-03-21 50 views
0

我有一個數據時間屬性taken_at在我的模型之一,將記錄測試時。我試圖驗證這一領域總是出現在我的下面一行型號:創建!沒有在rails3中設置datetime屬性

validates :taken_at, :presence => true 

在我的RSpec的測試中,我確認這個規則與下面的測試:

before (:each) do 
    @user = Factory(:user) 
    @attr = { :taken_at => DateTime.now } 
end 

it "should create a new profile given valid attributes" do 
    # set taken_at inside of a block because the validations fail otherwise.  
    @user.hartman_value_profiles.create! do |hvp| 
    hvp.taken_at = DateTime.now 
    end 
end 

正如你所看到的,我在塊內設置了taken_at,而不是將它作爲參數傳入。這是工作,但我不明白爲什麼下面的測試將會失敗:

it "should create a new profile given valid attributes" do  
    @user.hartman_value_profiles.create!(@attr) 
end 

沒有人有任何深入瞭解這到底是怎麼回事呢?任何提示,技巧或指向文檔的指針將不勝感激。

回答

1

第二個示例使用批量分配,而第一個示例使用直接分配。你有沒有通過任何改變禁止大規模轉讓給taken_at?

+0

就是這樣。我在模型中定義了'attr_accessible'。感謝您的解釋。 – spinlock 2011-03-22 02:06:10