将一个或两个参数传递给Rake任务

时间:2011-03-05 23:13:23

标签: ruby-on-rails rake

我有一个rake任务,我想将参数传递给。例如,我想发出像

这样的命令
<prompt> rake db:do_something 1

并在rake任务中:

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

非常简单,对吧?

2 个答案:

答案 0 :(得分:38)

rake命令接受和定义参数的方式很好,不是很好。

以这种方式打电话给你的任务:

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

我添加了第二个参数来表明你需要逗号,但省略了任何空格。

并按照以下方式定义:

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

答案 1 :(得分:0)

在传递参数时,最好选择输入文件,这可以是一个excel json或者你需要的任何东西,然后从那里读取你需要的数据结构和变量,包括变量名称,因为需要。 读取文件可以具有以下结构。

  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

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

执行

rake :name_task