1

我是 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 '='
    }  
     ^
4

2 回答 2

2

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

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

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

    Voter.create :last_name => row[0]
于 2012-10-28T20:35:41.577 回答
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这个错误将被删除。

希望这可以帮助。

于 2012-10-31T04:40:24.923 回答