Rails中的迁移失败,但有一些SQL错误

时间:2013-06-11 06:01:56

标签: ruby-on-rails ruby-on-rails-3 ruby-on-rails-3.1 ruby-on-rails-3.2

rake db:migrate在我的开发服务器上失败,错误是:

Mysql2::Error: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for
 at line 1: {:username=>"user", :password=>"user"}D:/WorkSpace/Ruby_WorkSPace/SLA_Rails_june10/db/migrate/20130611053608
d:in `migrate'
Tasks: TOP => db:migrate
(See full trace by running task with --trace)

我的迁移代码是:

class User < ActiveRecord::Migration
  def self.up
    create_table :users do |t|
      t.column :username , :string 
      t.column :password , :string
    end
    User.create :username=>"user" ,:password=>"user"
    User.create :username=>"admin" ,:password=>"admin"
  end

  def self.down
    drop_table :users
  end
end

enter code here

我的型号代码是

class User < ActiveRecord::Base
  attr_accessible :username, :password
end

2 个答案:

答案 0 :(得分:0)

迁移代码:

class User < ActiveRecord::Migration
  def self.up
    create_table :users do |t|
      t.column :username , :string 
      t.column :password , :string
    end
    User.create :username=>"user", :password=>"user"
    User.create :username=>"admin",:password=>"admin"
  end

  def self.down
     drop_table :users
  end
end

型号代码:

 class User < ActiveRecord::Base
   attr_accessible :username, :password
 end

在上面的代码中,您创建了两个用户,同时创建了表。

Rails有一个'种子'功能,应该用于为初始数据播种数据库。这是一个非常简单的功能:只需使用一些Ruby代码填充db/seeds.rb,然后run rake db:seed

因此,您只需删除create语句,您的迁移代码应如下所示:

 class User < ActiveRecord::Migration
   def self.up
     create_table :users do |t|
       t.column :username , :string 
       t.column :password , :string
     end
    end

   def self.down
     drop_table :users
   end
 end

创建表格后,只需填写db/seeds.rb到Feed数据库表:

user = [{:username =&gt;“user”,:password =&gt; “user”},{:username =&gt;“admin”,:password =&gt; “管理员”}]

User.create(用户)

然后运行: rake db:seed

答案 1 :(得分:0)

使用rails命令创建迁移脚本:

rails g scaffold User username:string password:string

该命令将生成以下脚本。然后你可以添加“种子”。

class CreateUsers < ActiveRecord::Migration
  def change
    create_table :users do |t|
      t.string :username
      t.string :password

      t.timestamps
    end
    User.create(:username=>"user", :password=>"user")
    User.create(:username=>"admin", :password=>"admin")
  end
end

顺便提一下,请注意初始数据应位于db / seeds.rb