Ruby on rails RubyonRails从Rake任务创建记录
我有以下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
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
成为一个散列,因此您需要使用标题值来访问单元格的内容。