Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/54.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails RubyonRails从Rake任务创建记录_Ruby On Rails_Ruby_Csv_Rake_Ruby On Rails 4 - Fatal编程技术网

Ruby on rails RubyonRails从Rake任务创建记录

Ruby on rails RubyonRails从Rake任务创建记录,ruby-on-rails,ruby,csv,rake,ruby-on-rails-4,Ruby On Rails,Ruby,Csv,Rake,Ruby On Rails 4,我有以下rake任务和用户控制器,我正试图使用create操作将用户从csv加载到数据库中,如下所示: lib/tasks/import\u users\u csv.rake: desc "Import Users from csv file" task :import_users => [:environment] do file = "db/users.csv" CSV.foreach(file, :headers => true) do |row| User

我有以下rake任务和用户控制器,我正试图使用
create
操作将用户从csv加载到数据库中,如下所示:

lib/tasks/import\u users\u csv.rake:

desc "Import Users from csv file"
task :import_users => [:environment] do

  file = "db/users.csv"

  CSV.foreach(file, :headers => true) do |row|
    User.create(
      :name => row[1],
      :email => row[2],
      :password => row[3],
      :password_confirmation => row[4],
      :admin => row[5],
      :role => row[6]
    )
  end
end
用户\u controller.rb:

def create
    @user = User.new(user_params)
    if @user.save
      flash[:success] = "User " + @user.name.to_s + " sucessfully created"
      redirect_to @user
    else
      render 'new'
    end
end

def user_params
  params.require(:user).permit(:name, :email, :password, :password_confirmation, :role, :admin)
end

不幸的是,当我尝试运行任务(
rake import\u users\u csv:import\u users
)时,我得到了一个错误,不知道如何构建任务“import\u users\u csv:import\u users”

,似乎您的任务
任务:import\u users=>[:environment]
需要另一个参数(环境),例如,尝试以
rake import\u users\u csv:import\u users:development
的身份运行它

编辑:


实际上,您没有名称空间,您的任务是通过
rake import\u users:development

调用的。您的任务
task:import\u users=>[:environment]
似乎需要另一个参数(环境),例如,尝试以
rake import\u users\u csv:import\u users:development>的身份运行它

编辑:


实际上,您没有名称空间,您的任务是通过
rake import\u users:development

调用的,您的任务在正确的名称空间中吗?按照运行任务的方式,它需要位于
:import\u users\u csv
命名空间内:

namespace :import_users_csv do

  desc "Import Users from csv file"
  task :import_users => [:environment] do

   file = "db/users.csv"

    CSV.foreach(file, :headers => true) do |row|
      User.create({
        :name => row[1],
        :email => row[2],
        :password => row[3],
        :password_confirmation => row[4],
        :admin => row[5],
        :role => row[6]
      })
    end
  end
end
如果您不想要名称空间,您应该能够
rake import\u用户
。使用
rake-T
查看可以运行的rake任务列表。你应该在那里看到你的

编辑:

调用
CSV.foreach(file,:headers=>true)do | row |
实际上会返回一个
Hash
,其中键是头行中的值。如果您有以下CSV文件:

Foo,Bar,Baz
1,2,3
4,5,6
您将希望按如下方式访问它:

:foo => row['Foo'],
:bar => row['Bar'],
:baz => row['Baz']

任务是否位于正确的命名空间中?按照运行任务的方式,它需要位于
:import\u users\u csv
命名空间内:

namespace :import_users_csv do

  desc "Import Users from csv file"
  task :import_users => [:environment] do

   file = "db/users.csv"

    CSV.foreach(file, :headers => true) do |row|
      User.create({
        :name => row[1],
        :email => row[2],
        :password => row[3],
        :password_confirmation => row[4],
        :admin => row[5],
        :role => row[6]
      })
    end
  end
end
如果您不想要名称空间,您应该能够
rake import\u用户
。使用
rake-T
查看可以运行的rake任务列表。你应该在那里看到你的

编辑:

调用
CSV.foreach(file,:headers=>true)do | row |
实际上会返回一个
Hash
,其中键是头行中的值。如果您有以下CSV文件:

Foo,Bar,Baz
1,2,3
4,5,6
您将希望按如下方式访问它:

:foo => row['Foo'],
:bar => row['Bar'],
:baz => row['Baz']

恐怕没什么区别。很抱歉我错过了名称空间的事情,你实际上没有名称空间,只有一个描述,所以你不能在rake任务调用中使用
import\u users\u csv
。恐怕没什么区别。很抱歉我错过了名称空间的事情,你实际上没有名称空间,只有描述,因此,您不能在rake任务调用中使用
import\u users\u csv
。谢谢!这就解决了错误,不幸的是任务似乎没有做任何事情。@user2732663啊,您正在使用
:headers=>true
。这使得
成为散列,因此您需要使用标题值来访问单元格的内容。谢谢!这就解决了错误,不幸的是任务似乎没有做任何事情。@user2732663啊,您正在使用
:headers=>true
。这使得
row
成为一个散列,因此您需要使用标题值来访问单元格的内容。