2016-01-08 37 views
1

我添加的列名是「type」,其中type = string。 後我添加值表(列類型=「機器人」),則選擇表中,但它不能運行,這是不打印對象: 設備型號:添加列後不能選擇對象

class Device < ActiveRecord::Base 
    belongs_to :user 
    validates_uniqueness_of :device_token 
    validates_presence_of :device_token 
end 

數據庫:

enter image description here

這是代碼獲取表:

device = Device.find_or_initialize_by(device_token: device_token) 
p device 

這是日誌: 模板負荷(0.5ms)選擇templatesidtemplatesname FROM templates WHERE templatesid = 1 LIMIT 1 完成200 OK在148ms(查看:20.5ms |的ActiveRecord:6.2ms)

如果我更新列型= NULL,它可以正常運行並可以打印對象以查看。但是,如果列類型=「android」,它不能運行。 我不知道爲什麼,請幫助我。

+0

我沒有看到與日誌有關的設備的任何東西?你可以在這裏添加設備模型嗎? –

+0

@Hoang Phan,我剛纔編輯了上面的問題。 –

回答

2

這可能是因爲type是一個保留字在Rails中。嘗試更改此列的名稱。

對於更多保留字檢查Reserved Words in Ruby on Rails

+0

是的,這是理由,非常感謝,這需要我很多時間。 –

+0

它專門用於單表繼承(我將在一個答案中解釋你) –

0

正如Walerian所述,問題在於type是Rails中的保留字。

在這種情況下,它保留Single Table Inheritance - 這基本上可以讓你subclass型號:

#app/models/device.rb 
class Device < ActiveRecord::Base 
    ... 
end 

#app/models/android.rb 
class Android < Device 
    ... 
end 

通過上述,您可以撥打:

@android = Android.find x 
@android.do_something 

...這將基本上只有查詢devices表中的記錄,typeAndroid(全部由Rails設置)。

-

因此,如果你在你的Device模型type列,你將不能夠直接引用它。

您必須重命名該列或將其用作STI結構的一部分(我不建議在此實例中)。