2017-07-29 47 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