2011-11-22 53 views
1

我正在使用Rails 3.1更新站點並添加一些功能。此應用程序跟蹤一系列網站的測試。最初我將每個測試的成績作爲測試表中的一列存儲,但現在我創建了一個名爲評論的新模型,以保存每個測試分配的成績和評論的歷史記錄。該模型是這樣的:Rails 3:我如何使用相關對象上的方法?

class Site < ActiveRecord::Base 
    has_many :tests 
    has_many :reviews, :through => :tests 

class Test < ActiveRecord::Base 
    has_many :reviews 
    belongs_to :site 

class Review < ActiveRecord::Base 
    belongs_to :test 
    has_one :user 

以前我可以做這樣的事情的網站模式獲得上檔次一些報告的數據:

def total_a_grades 
    tests.count(:conditions => "reviewer_grade = 4 and review_status = 3") 
end 

由於成績現在出試驗模型的我創建這個方法來訪問最新的等級爲每個測試:

def last_grade 
    return reviews.find(:last).grade 
end 

也能正常工作在測試視圖中顯示最近的品位,但我怎麼可以用它在站點級別?由於該值現在處於未存儲在數據庫中的方法中,因此我不知道如何使用它,並且在主要在線教程/截屏視頻網站上找不到與此相關的任何內容。

在此先感謝您的幫助!

+0

在測試快樂的世界裏,就是Ruby,一個名爲** Test **的類正在尋求麻煩。我甚至無法在Rails控制檯中創建一個測試。 https://gist.github.com/1431777 – slothbear

+0

你沒有說任何關於用戶,但我懷疑審查'belongs_to:user'而不是'has_one:user'。這篇文章幫了我很多:[Has_One vs. Belongs_To](http://duanesbrain.blogspot.com/2006/05/ruby-on-rails-hasone-versus-belongsto.html) – slothbear

回答

0

加入方法允許訪問has_many:通過關聯的屬性。或者從所需的關聯開始,並且包含所需的連接。

tests.joins(:reviews).where("reviews.grade = 5").count 

    reviews.where("grade = 5").count 

來源:

+0

方法更加靈活,但對於一個簡單的例子,你可以給has_many添加條件:'has_many:a_grades,:through =>:tests,:source =>:reviews,:conditions => {:grade => 5}' – slothbear

相關問題