运行rake任务时出现语法错误

时间:2012-10-28 20:26:12

标签: ruby-on-rails ruby rake rake-task

我是ruby和rails的新手,所以我仍然试图处理ruby的语法和结构。我正在关注a tutorial使用任务和rake导入csv文件。我不断收到语法错误。我不确定我缺少什么,我看不出示例和我的代码之间有任何区别。

require 'csv'

    desc "Import Voters from CSV File"

    task :import => [:environment] do

      file ="db/my.csv"

      CSV.foreach(file, :headers => true) do |row|
        Voter.create{
          :last_name => row[0]
        }  

      end






(See full trace by running task with --trace)
Erics-MacBook-Air:cloudvoters ecumbee$ rake db:import --trace
rake aborted!
/Users/ecumbee/Desktop/cloudvoters/lib/tasks/import.rake:11: syntax error, unexpected tASSOC, expecting '}'
      :last_name => row[0], 
                   ^
/Users/ecumbee/Desktop/cloudvoters/lib/tasks/import.rake:12: syntax error, unexpected '}', expecting '='
    }  
     ^

2 个答案:

答案 0 :(得分:2)

你错过了一个括号,它将你给出的哈希作为创建函数的参数包围

    Voter.create({
      :last_name => row[0]
    })

您也可以跳过括号和&大括号

    Voter.create :last_name => row[0]

答案 1 :(得分:1)

正如@pjam指出的那样,你必须在大括号之前使用括号,或者同时跳过这两个括号。

例如。Voter.create :last_name => row[0]

unexpected $end, expecting kEND end相关的其他问题是您缺少end

require 'csv'

desc "Import Voters from CSV File"

task :import => [:environment] do

  file ="db/my.csv"

  CSV.foreach(file, :headers => true) do |row|
    Voter.create{
      :last_name => row[0]
    }  

  end

您将在最后一行使用CSV.foreach结束end阻止,但不会结束task 因此,通过添加额外的end,此错误将被删除。

希望这有帮助。