rake 执行时传递参数

有时候执行 rake 时需要加参数,代码如下:

# user.rake
namespace :user do
  desc 'add new user'
  task :create, [:name, :password] => :environment do |task, args|
    user = User.new(name: args.name, password: args.password)
    if user.save
      p 'success'
    else
      p user.errors.full_messages
    end
  end
end

命令执行如下:

$ rake user:create[name,password]

但是在zsh下会提示错误:

zsh: no matches found: user:create[name,password]

其实如果使用zsh的命令自动补全, rake 会自动给 [] 转义,或者我们给命令加 ' 也可以:

$ rake user:create[name,password]
$ rake 'user:create[name, password]'