关于ruby on rails:将一个或两个参数传递给Rake任务

Passing a parameter or two to a Rake task

我有一个rake任务,我想把参数传递给它。例如,我想发出如下命令

1
<prompt> rake db:do_something 1

在rake任务中:

1
2
3
4
...
cust = Customer.find( the_id_passed_in )
# do something with this customer record, etc...
...

很简单,对吧?


rake命令接受和定义参数的方式并不漂亮。

以这种方式调用任务:

1
<prompt> rake db:do_something[1,2]

我添加了第二个参数来显示您需要逗号,但省略了任何空格。

定义如下:

1
2
3
4
task :do_something, :arg1, :arg2 do |t, args|
  args.with_defaults(:arg1 =>"default_arg1_value", :arg2 =>"default_arg2_value")
  # args[:arg1] and args[:arg2] contain the arg values, subject to the defaults
end


传递参数时,最好选择输入文件,可以是Excel、JSON或任何需要的文件,然后从中读取数据结构和需要的变量,包括变量名。要读取文件,可以具有以下结构。

1
2
3
4
5
6
7
8
  namespace :name_sapace_task do
    desc"Description task...."
      task :name_task  => :environment do
        data =  ActiveSupport::JSON.decode(File.read(Rails.root+"public/file.json")) if defined?(data)
    # and work whit yoour data, example is data["user_id"]

    end
  end

示例JSON

1
2
3
4
5
6
{
 "name_task":"I'm a task",
 "user_id": 389,
 "users_assigned": [389,672,524],
 "task_id": 3
}

执行

1
rake :name_task