2014-12-04 38 views
0

hotels表中有一列名爲catch的列。私人方法`catch'要求酒店(ruby 2.1 rails 4)

我創建的對象:

obj_hotel = Hotel.new 

然後:

puts obj_hotel.catch  

有當沒有問題obj_hotel.catch:當我做了以下事情發生

obj_hotel.catch = 'xxx' 

錯誤在的左邊,但是當我們想使用obj_hotel.catch的值時,發生錯誤private method 'catch' called for Hotel

那麼,是catch a 私人方法的鐵軌嗎?

謝謝。

+0

我已經修復了,謝謝大家。^。^ – sou 2014-12-04 08:56:07

回答

3

Kernel#catch是一個私有方法,而Kernel存在於所有對象的祖先鏈中,該對象的下降(包括)Object

+0

那麼我該如何讓程序使用正確的東西呢? – sou 2014-12-04 08:46:10

+0

對於我無法編輯數據庫來更改列的名稱 – sou 2014-12-04 08:46:38

+2

重命名列或別名它http://stackoverflow.com/questions/4014831/alias-for-column-names-in-rails :) – avlazarov 2014-12-04 08:47:07

0

啊,它肯定會是如此。正如azlazarov指出的,Kernel#catch是一種私人方法。你應該避免使用與ruby保留名稱匹配的列名。所以如果可能的話重命名列(遷移數據庫)。

如果這是不可能的,有一個簡單的解決方法,您可以隨時使用

obj_hotel["catch"] 

獲取或設置的屬性。

您也可以別名屬性名稱,使用

alias_attribute :new_column_name, :catch 

這是一個非常乾淨的解決方案,但也有潛在危險/混亂,恕我直言,因爲寫作時查詢(在AREL,例如where),你會必須引用catch而不是別名)。

+0

謝謝你的男人。我解決了它 – sou 2014-12-05 08:49:21