2009-05-27 27 views
2

我已經在MySQL中創建了一個視圖,它對應於我正在生成的一些報告(按月份分組,按照累積年份分組)。該視圖有3列(年,月,總)。查看/表格名稱是「report_monthly」。我知道我可以通過connection()。select_all(...)使用raw sql,但是我想爲這個表創建一個ActiveRecord。爲什麼Rails拒絕使用我的模型(基於SQL視圖)?

這是我在一個文件模式叫「report_monthly.rb」:

class MonthlyReport < ActiveRecord::Base 
    # I assume that setting the table name circumvents the pluralized file name convention 
    set_table_name "report_monthly" 
end 

該文件被放置在標準導軌結構:

app 
    controllers 
    helpers 
    models 
     report_monthly.rb 
    views 

現在,當我使用RoR的控制檯(腳本/控制檯)我什至不能看到班級更少列出所有的行

>> MonthlyReport 
    NameError: uninitialized constant MonthlyReport 

我所有的其他m odels工作正常,但他們遵循「singular.rb」 - >類Singluar - >表複數約定

更新: 這是否與視圖是不可變的事實有關?無法插入/更新?

版本:

的Ruby 1.8.7,2.3.2的Rails時,MySQL 5.0.75

回答

7

文件名和類名必須相同,所以您的文件需要稱爲monthly_report.rb

+0

我想我可以用set_table_name來限制約定,顯然文件名 - >類名映射不是可選的。 – basszero 2009-05-27 16:28:48

0

除非我記錯了,我不認爲Rails的,您可以在SQL視圖基本ActiveRecord模型。

0

也許這只是字體或拼寫錯誤,但它看起來像DB-table名稱中的下劃線多於用於ruby類的名稱中的下劃線。 - >好的,是一個錯字!

To John Topley:PostgreSQL將視圖定義爲表,其選擇規則被定義爲從基礎表提取數據。 Ruby/Rails不知道視圖不是真正的表格。所以你的信念一般是不正確的(但也許是對於MySQL)。編輯(=第二次嘗試):這可能是一個類的軌道的自動加載機制的問題?您的ruby文件是否包含正確位置的類? (我沒有我的「The Rails Way」副本,但也許有人可以在這裏幫忙。)

+0

與降價戰鬥:( – basszero 2009-05-27 14:54:56

0

確保您在視圖中有一個id列,當然它必須是唯一的。

爲什麼不稱呼「monthly_reports」(對應模型名稱)並使生活更簡單?

相關問題