Sinatra activerecord初始化

时间:2014-11-10 17:09:19

标签: ruby activerecord sinatra

我遇到了一个奇怪的情况。有人可以给我建议吗? 我正在开发一个带有

的应用程序
Ruby1.8.7
Sinatra 1.4.4
Activerecord 3.2.14
Mysql 5.6.19 

我几乎完成了开发但是在最后一刻我得到了堆栈。 我在MySQL中有两个表。

CREATE TABLE items(
  id INT PRIMARY KEY AUTO_INCREMENT NOT NULL, 
  type text,
  keyword text,
  postid INT,
  created_at datetime NOT NULL);

CREATE TABLE comments(
  id INT PRIMARY KEY AUTO_INCREMENT NOT NULL,
  comment text,
  yourname INT,
  postid INT,
  created_at datetime NOT
  NULL);

在Sinatra app中,我宣布上课。

class Comment < ActiveRecord::Base end

class Item < ActiveRecord::Base end

出于调试目的,我编写了这段代码并运行。

get "/l" do

  # New comment and set initial value.
  y={:yourname =>"3",:comment =>"commenttest"}

  com = Comment.new(y)
  p com.attribute_names()
  p com

  # New items and set initial value.
  kensaku = {:type=>"000"}
  k = Item.new(kensaku)

  p k.attribute_names()
  p k

  k.type="555"
  p k

end

所以现在我在控制台上找到了非常有趣的东西。 注释类成功为具有初始值的new。 但是Item类成功了,但是没有设置初始值。 我想知道为什么会这样?

#-- Comment class 
["postid", "id", "comment", "created_at", "yourname"]
#<Comment id: nil, comment: "commenttest", yourname: 3, postid: nil, created_at: nil>

#-- Item class 
["type", "postid", "id", "keyword", "created_at"]
#<Item id: nil, type: nil, keyword: nil, postid: nil, created_at: nil>
#<Item id: nil, type: "555", keyword: nil, postid: nil, created_at: nil>

1 个答案:

答案 0 :(得分:0)

列名type是ActiveRecord中的reserved word

  

虽然这些列名是可选的,但它们实际上是保留的   积极记录。 避开保留关键字,除非您想要   额外的功能。 例如,type是用于保留的关键字   使用单表继承(STI)指定表。如果你不是   使用STI,尝试类似的关键字,如“上下文”,可能仍然   准确描述您正在建模的数据。