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

Ruby on rails 运行rake任务时出现语法错误,ruby-on-rails,ruby,rake,rake-task,Ruby On Rails,Ruby,Rake,Rake Task,我对ruby和rails还不熟悉,所以我仍在尝试掌握ruby的语法和结构。下面我将使用任务和rake导入csv文件。不过,我一直遇到语法错误。我不确定我遗漏了什么,我看不出示例和我的代码之间有任何区别 require 'csv' desc "Import Voters from CSV File" task :import => [:environment] do file ="db/my.csv" CSV.foreach(file, :he

我对ruby和rails还不熟悉,所以我仍在尝试掌握ruby的语法和结构。下面我将使用任务和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 '='
    }  
     ^

缺少了括号,该括号将围绕作为create函数参数提供的哈希值

    Voter.create({
      :last_name => row[0]
    })
也可以跳过括号和花括号

    Voter.create :last_name => row[0]

正如@pjam所指出的,在大括号之前必须使用括号,或者两者都跳过

例如,创建:姓氏=>行[0]

另一个与
意外$end、预期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
您正在使用最后一行的
end
结束
CSV.foreach
块,但没有结束
任务
因此,通过添加额外的
end
将删除此错误


希望这能有所帮助。

本教程没有这两个选项。这是语法上的改变还是原作者的错误?另外,我现在在end语句语法错误上得到一个错误,意外的$end,应该是kENDend@Eric:与
投票者之间存在歧义。创建{…}
。它是散列参数还是块?在不同的Ruby版本中,歧义的解决方式可能会有所不同,所以您的教程可能已经很旧了。我在方法调用上加了括号,因为我厌倦了这种胡说八道;大多数Ruby的人都会不同意我的观点,但我是一个专业的异教徒,所以我不介意。@muistoshort我认为这是一个散列论点。如果我理解正确的话,这应该是一个基于我的投票人模型创建新对象的调用。我仍然不知道意外的结局来自何方