【问题标题】:Datamapper, SQLite, not saving properties to databaseDatamapper,SQLite,不将属性保存到数据库
【发布时间】:2014-06-30 12:03:09
【问题描述】:

有一个像这样定义的 Datamapper 类:

require 'rubygems'
require 'data_mapper'
require 'dm-core'

DataMapper::Logger.new($stdout, :debug)
DataMapper.setup(:default, ENV['DATABASE_URL'] || "sqlite3://#{Dir.pwd}/db/eventdb.sqlite")

class Temp 
  include DataMapper::Resource
  Event.raise_on_save_failure = true

  property :id, Serial
  property :temp1, String, :length => 50
  property :temp2, String
  property :temp3, String
  property :created_at, Time
  property :updated_at, Time

  attr_accessor :temp1, :temp2, :temp3

  class << self

  end

end

使用以下语法在 SQLite 中创建表:

~ (0.024280) CREATE TABLE "temps" ("id" INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, "temp1" VARCHAR(50), "temp2" VARCHAR(50), "temp3" VARCHAR(50), "created_at" TIMESTAMP, "updated_at" TIMESTAMP)

然而,当我运行此代码时,它会生成一个插入语句,其中包含除时间戳条目之外的空值:

irb(main):001:0> @t = Temp.new
=> #<Temp @id=nil @temp1=nil @temp2=nil @temp3=nil @created_at=nil @updated_at=nil>
irb(main):002:0> @t.temp1 = "Test1"
=> "Test1"
irb(main):003:0> @t.dirty?
=> true
irb(main):004:0> @t.save
 ~ (0.002224) INSERT INTO "temps" ("created_at", "updated_at") VALUES ('2014-05 12T19:26:15.640051-04:00', '2014-05-12T19:26:15.639557-04:00')
=> true

关于为什么我的属性(在这种情况下 temp1 没有保存到数据库)有什么想法吗?提前致谢。

【问题讨论】:

    标签: ruby sqlite datamapper


    【解决方案1】:

    删除此行:attr_accessor :temp1, :temp2, :temp3

    它可能重新定义了 Datamapper 的设置器。

    【讨论】:

    • 谢谢,成功了!以为我需要 attr_accessor 来使属性读/写。再次感谢。
    • 如果我的回答解决了您的问题,您应该用答案左侧的绿色勾号接受它。
    猜你喜欢
    • 2011-01-19
    • 1970-01-01
    • 2017-06-09
    • 1970-01-01
    • 1970-01-01
    • 2013-01-18
    • 2021-06-05
    • 2020-02-10
    • 1970-01-01
    相关资源
    最近更新 更多