2012-12-27 94 views
0

在我的應用程序,puts self.ideas.inspect輸出:第一次嘗試使用ActiveRecord「在哪裏」,沒有

[#<Idea id: 1, title: "Ad et ut nesciunt ut.", 
note: ["Ratione et aut harum.", "Dicta nostrum sit officiis voluptates molestiae veritatis ut."], 
status: "claimed", 
created_at: "2012-12-27 19:03:11", updated_at: "2012-12-27 19:03:11", user_id: 1>, 
#<Idea id: 2, title: "Asperiores dolores modi et.", 
note: ["Reprehenderit harum consequuntur repellendus qui.", "Labore eum minus voluptas quidem aliquid est occaecati."], 
status: "claimed", 
created_at: "2012-12-27 19:03:11", updated_at: "2012-12-27 19:03:11", user_id: 1>, 
#<Idea id: 3, title: "Labore nam deserunt quibusdam.", 
note: ["Sequi saepe itaque.", "Numquam distinctio vel hic et qui."], 
status: "claimed", 
created_at: "2012-12-27 19:03:11", updated_at: "2012-12-27 19:03:11", user_id: 1>] 

然而,在下一行,claimed_count = self.ideas.where(status: "claimed").size收益0.我的查詢語法顯然是錯誤的,但我一直看看this guide,我仍然無法弄清楚!

必須是非常基本的東西...任何人?

編輯:我得到這個集合使用下面的測試思路:

it "can't claim an idea if he already has 3 ideas with claimed status" do 
    james.claim(si_title0) 
    james.claim(si_title1) 
    james.claim(si_title2) 
    james.claim(si_title3) 
    james.ideas.size.should eq 3 
end 

我的醜測試對不起...我要去揣摩插值後重構它我得到它通過。上面的inspect轉儲來自循環的第三次或第四次迭代。

編輯2:這是claim做:

​​

所以......它不保存到數據庫?如果是這樣,我該如何解決?

+0

你是如何得到這個「想法」的集合的?當您呈現它時,它是否已經保存到數據庫中? – PinnyM

+0

'.count'是不是'.size'? – Zabba

+0

@PinnyM - 編輯添加上面的調用代碼。 – ezuk

回答

3

我懷疑claim()沒有將「聲稱的」idea狀態保存到數據庫。您需要更改此行爲(如果這是您真正需要的),或者搜索ideas Enumerable本身,而不是通過where查詢數據庫。您可以使用select此:

james.ideas.select{|idea| idea.status == "claimed"}.size 

,你可以添加一個輔助方法Idea使查詢簡單:

class Idea < ActiveRecord::Base 
    def claimed? 
    status == "claimed" 
    end 
end 

james.ideas.select(&:claimed?).size 

UPDATE

您的代碼將不是狀態保存爲這是因爲在更改status屬性後沒有任何操作調用保存idea對象。您可以通過反轉您的通話爲了解決這個問題:

if idea.status == "available" && claimed_count < 3 
    idea.status = "claimed" 
    self.ideas<<idea 
end 

<<「鏟」運營商將節省的想法,因爲你將它添加到一個持久對象的關聯集合。

+0

我想也許你是對的,'索賠'不能保存......我認爲它確實 - 它肯定是應該的。我編輯了這個問題以包含完整的「聲明」主體 - 你可以看看嗎? – ezuk

+0

不,它不會以這種方式保存 - 請參閱我的建議如何解決。 – PinnyM

+0

哇!這絕對有效!答案已被接受,但你會介意解釋爲什麼它有效嗎?當我做self.ideas << idea'時會發生什麼? – ezuk

0

在每次測試結束時,您的數據將被刪除 - 一旦測試結束,插入的數據將被回滾;它不應該持續在測試之間!

您如何以及在哪裏使用您的where,以及您的模型(特別是ideas關聯)是什麼樣的?