2013-01-10 43 views
1

我想通過ActiveRecord訪問Limesurvey數據庫。一些表具有像'79924X192X1240'這樣的列名。當我要訪問的模型,我得到以下錯誤:ActiveRecord和非法列名

ActionView::Template::Error (/usr/local/rvm/gems/ruby-1.9.2-p318/gems/activerecord-3.1.10/lib/active_record/attribute_methods/time_zone_conversion.rb:44: syntax error, unexpected tINTEGER 
       def 79924X192X1240=(original_time) 
         ^): 

我想,出現錯誤,因爲它是不允許的,這一種方法以數字開頭。但是我不能改變列名,因爲Limesurvey會生成這些列。

僅當某列(如79924X192X1240)的數據類型爲日期時間時纔會出現此錯誤。其他數據類型如varchar不會產生任何問題。

我怎樣才能訪問這些日期時間列呢?

回答

0

你需要爲此做原始的sql查詢。 ActiveRecord是爲ruby寫的,它不允許方法名以數字開頭。由於表上的每一列與方法相同,因此嘗試訪問該信息將每次都會引發語法錯誤。

您需要使用:ActiveRecord::Base.connection.execute

+0

沒錯,但我想用ActiveRecord訪問它們。此外,其他數據類型使用這些名稱(79924X192X1240)。因此,這些列名稱不適用於任何數據類型,或者它是一個錯誤,它也應該適用於日期時間數據類型。 – Christian

+0

您是否嘗試過使用哈希來訪問列:'.attributes'? – weexpectedTHIS

+0

調用模型時,該錯誤已經出現。 – Christian