2017-07-29 50 views
-1

我想加入到timmings表,但記錄Timming.where(:in => in)沒有得到其他值是其存儲爲預期返回t.innil有人請告訴我爲什麼發生這種情況。導軌插入一行到表中未成功發生

這是我的表架構:

create_table "timmings", force: :cascade, options: "ENGINE=InnoDB DEFAULT CHARSET=latin1" do |t| 
    t.string "in" 
    t.integer "bus_type" 
    t.bigint "provider_id" 
    t.datetime "created_at", null: false 
    t.datetime "updated_at", null: false 
    t.integer "route_id" 
    t.index ["provider_id"], name: "index_timmings_on_provider_id" 
end 

Rails的控制檯:

t = Timming.new 
=> #<Timming:0x00558be5e2c108 id: nil, in: nil, bus_type: nil, provider_id: nil, created_at: nil, updated_at: nil, route_id: nil> 

[250] pry(main)> t.in = Time.now.to_s 
[251] pry(main)> t.provider_id = 1 
=> 1 
[252] pry(main)> t.route_id = 1 
=> 1 
[253] pry(main)> t.save 
(0.4ms) SAVEPOINT active_record_1 
Provider Load (0.6ms) SELECT `providers`.* FROM `providers` WHERE `providers`.`id` = 1 LIMIT 1 
Route Load (0.5ms) SELECT `routes`.* FROM `routes` WHERE `routes`.`id` = 1 LIMIT 1 
SQL (0.6ms) INSERT INTO `timmings` (`provider_id`, `created_at`, `updated_at`, `route_id`) VALUES (1, '2017-07-29 08:06:46', '2017-07-29 08:06:46', 1) 
(0.3ms) RELEASE SAVEPOINT active_record_1 
=> true 

現在,當我打印t

id: 18, 
in: nil, 
bus_type: nil, 
provider_id: 1, 
created_at: Sat, 29 Jul 2017 08:06:46 UTC +00:00, 
updated_at: Sat, 29 Jul 2017 08:06:46 UTC +00:00, 
route_id: 1> 

誰能告訴我怎麼回事錯在這裏?

回答

1

更新:

至於你提到你已經使用了同名attr_accessor是什麼呢,首先的? attr_accessor用於爲未與數據庫中的任何列映射的Model對象定義屬性。 attr_accessor創建了兩種方法,即getter方法和setter方法。所以你的情況的Rails定義了這些:

# getter 
def in 
    @in 
end 

# setter 
def in=(val) 
    @in = val 
end 

所以每當你做t.in = Time.now.to_s它被分配到@in而不是在數據庫中保存。所以這就是爲什麼你不能保存數據庫中的值。

以前的答案(沒有幫助OP):

你列名爲in這是MySQL中的保留關鍵字,因此列重命名爲別的東西,然後嘗試它,它應該工作。

來源:MySQL Reserved Keywords

+0

我改名是coulmn但還是沒能經過一番搜索我已經定義attr_accessor:在[後來我改的..]我刪除從馬模型,行,我可以能夠寫入該元素,但仍然困惑什麼它出問題訪問器 –

+0

@AniketKudale我已經更新了我的答案,所以你可以理解爲什麼你不能保存在數據庫中的值。 – Deep