我试图在后端使用ActivereCord设置IRC机器人,以处理所有数据繁重(可能过高,但这对我来说是一种学习体验:3)
我遇到的问题是,在定义数据库模式后,在我尝试引用我创建的表时,在同一脚本上,我从sqlite Gem中获得错误,说它找不到它表。
此外,我的IDE(Rubymine)抱怨说,它"无法找到:注释的轨道模型:相关场"
有些事情告诉我,如果我不从事机器人框架的类别,这将不会发生,但这只是一个疯狂的猜测。
我在这里做错了什么?
require 'cinch'
require 'active_record'
puts 'Memobox loaded'
class Memobox
include Cinch::Plugin
ActiveRecord::Base.establish_connection(
:adapter => 'sqlite3',
:database => ':memory:'
)
ActiveRecord::Schema.define do
create_table :notes do |table|
table.column :id, :integer
table.column :timeset, :DateTime
table.column :sender, :string
table.column :recipient, :string
table.column :text, :string
end
end
class Note < ActiveRecord::Base
has_many :notes
end
match(/note.*/, :prefix => "?")
def execute(m)
Memobox::Note.create(
:timeset => (Time.new).ctime,
:sender => m.user.nick,
:text => m.message,
:recipient => (m.message).split("_").at(1)
)
end
end
错误:
C:/Ruby193/lib/ruby/gems/1.9.1/gems/activerecord-3.2.8/lib/active_record/connection_adapters/sqlite_adapter.rb:472:in `table_structure': Could not find table 'notes' (ActiveRecord::StatementInvalid)
您应该替换此
class Note < ActiveRecord::Base
has_many :notes
end
class Note < ActiveRecord::Base
end
activerecord ::基类的后代代表表中的单行,而不是整个表。因此,要通过ID找到一些注释,您只需要致电Note.find(123)
,其中123是DB表中的Note记录的ID。
感谢大家对使用has_many和语法的澄清,但我的问题最终是使用内存表而不是在磁盘上使用。一旦我更改了第七行说
:database => 'notes.db'
而不是
:database => ':memory:'
并从注释类中删除了has_many声明(我确实尝试过,而没有这样做并遇到了不同的错误),一切都有效:)