2012-05-05 52 views
1

我写了一个小的Ruby脚本,它本身连接到MySQL数据库,并创建表(如果该表尚不存在)。在此之后,脚本应该存储在该表中的内容我尝试使用存储这样的数据:创建MySQL行/列

Table.create(:foo => "bar", :foobar => "something", :blallala => "blololl") 

我也试过

Table.new(:foo => "bar", :foobar => "something", :blallala => "blololl") 

但似乎做同样的,因为我总是得到错误:

Mysql::Error: Table 'my-username.my-dbname' doesn't exist: SHOW FULL FIELDS FROM table-name

所以这是我到目前为止:

ActiveRecord::Base.establish_connection(
       :adapter => "mysql", 
       :host => "localhost", 
       :username => "my-username", 
       :password => "my-password", 
       :database => "my-db-name", 
       :encoding => "UTF8" 
     ) 

     table_name = "my_table" 
     unless ActiveRecord::Base.connection.tables.include? table_name 
       ActiveRecord::Schema.define do 
         create_table :"#{table_name}" do |table| 
           table.column :foo, :string 
           table.column :bar, :string 
           table.column :blallala, :string 
         end 
       end 
     end 

     class Table < ActiveRecord::Base 
       self.table_name = "#{table_name}" 
     end 

     Table.create(:foo => "bar", :foobar => "something", :blallala => "blololl") 
     #Table.new(:foo => "bar", :foobar => "something", :blallala => "blololl") 

所以,问题是:如何真正创建一个columo /行,为什么Table.create(:foo => "bar", :foobar => "something", :blallala => "blololl")不行?

+0

所以,这里有什么问题? –

+0

的问题是:如何真正创建一个columo /行?为什么'Table.create(:富=> “栏”,:foobar的=> “东西”,:blallala => “blololl”)'不行? –

+0

您无法创建表并同时向其中插入数据。它必须是两个单独的陈述。所以难怪你的前两个样本不工作。 –

回答

1

这为我工作:

# establish connection here 

class Table < ActiveRecord::Base 
    self.table_name = "the_table" 
end 

unless Table.table_exists? 
    ActiveRecord::Schema.define do 
    create_table :the_table do |table| 
     table.column :foo, :string 
     table.column :bar, :string 
     table.column :blallala, :string 
    end 
    end 
end 


Table.create(:foo => "bar", :bar => "something", :blallala => "blololl") 
+0

会尝试和接受,如果它的工作原理;) –

+0

不是我没有把它命名为表... :( –

+0

调试你的代码,那么这个工作我的机器上 –