MySQL语法错误:意外的keyword_do_block

时间:2017-09-22 06:35:20

标签: mysql ruby-on-rails ruby

我是Ruby的新手,并试图完成一个我无法正常工作的教程。我试图在我的根文件夹上运行rake db:migrate并给出3个单独的错误消息:

>rake db:migrate
rake aborted!
SyntaxError: 
C:/Users/Bill/Sites/simple_cms/db/migrate/20170922050429_create_use
rs.rb:4: syntax error, unexpected keyword_do_block
create_table :users, do |t|
                       ^
C:/Users/Bill/Sites/simple_cms/db/migrate/20170922050429_create_users.rb:5: 
syntax error, unexpected tSTRING_BEG, expecting keyword_end
    t.column "first_name", :string, :limit => 25
              ^
C:/Users/Bill/Sites/simple_cms/db/migrate/20170922050429_create_users.rb:5: 
syntax error, unexpected ',', expecting keyword_end
    t.column "first_name", :string, :limit => 25
                          ^

Tasks: TOP => db:migrate
(See full trace by running task with --trace)

我的create_users.rb文件中的Ruby代码是:

class CreateUsers < ActiveRecord::Migration[5.1]
  def change
    create_table :users, do |t|
        t.column "first_name", :string, :limit => 25
        t.string "last_name", :limit => 50
        t.string "email", :default => "", :null => false
        t.string "password", :limit => 40
        t.timestamps
    end
  end

我不确定我在这里做错了什么。任何见解都将不胜感激!

2 个答案:

答案 0 :(得分:2)

除了第一个答案。你为什么不使用rails generator?

当您必须修改某些内容时,写入迁移可能很有用。更快更干净的方式是使用轨道发生器:

示例:

rails g model User first_name:string last_name:string

如果属性是字符串,则可以

rails g model User first_name last_name

它将在/app/models/user.rb中生成类User并为数据库生成迁移。

你也有Scaffold和其他发电机。

更多信息:Command Line Rails

提示:检查Devise Gem,它将为用户模型生成整个结构。

链接:Devise Gem

答案 1 :(得分:1)

在您的代码中:

def change
  create_table :users, do |t|
    t.column "first_name", :string, :limit => 25
    t.string "last_name", :limit => 50
    t.string "email", :default => "", :null => false
    t.string "password", :limit => 40
    t.timestamps
  end
end

你有:

create_table :users, do |t|

应该是:

create_table :users do |t|

之后不应该有任何逗号,除非你有多个参数。

<强>更新

而且class没有end,它不会关闭类定义并抛出异常。

旁注:

你有这一行:

t.column "first_name", :string, :limit => 25

可以写成:

t.string "first_name", :limit => 25

希望这有帮助。