Rake任务更新列值

时间:2013-07-24 00:00:11

标签: ruby ruby-on-rails-3 rake

我正在编写一个rake任务来更新表中特定列的值。当我运行任务时,我收到此错误:

uninitialized constant FirstLookSubscription

这是rake任务代码:

namespace :first_look_db do
  desc "Adds one month to the Look Subscription"
  FirstSubscription.where(subscription_state: 'active').each do |t|
        t.update_attribute :next_billing_check, '2013-9-10'

  end
end

我是rake任务的新手,我不想将此作为迁移。任何建议都会很棒!

还要注意:当我在rails控制台中运行它时,它执行没有问题,我最大的问题是将它变成一个rake任务,以便我们的主要开发人员可以运行它

1 个答案:

答案 0 :(得分:8)

你真的需要一个任务名称。 namespace给出任务的命名空间,但是按名称声明任务并导入环境,以便它可以找到您的ActiveRecords:

namespace :first_look_db do
  desc "Adds one month to the Look Subscription"

  task :add_month_to_look_sub => :environment do
    FirstSubscription.where(subscription_state: 'active').each do |t|
      t.update_attribute :next_billing_check, '2013-9-10'

    end
  end
end

这将进入一个名为lib/tasks/first_look_db.rake的文件。该任务由以下人员调用:

rake first_look_db:add_month_to_look_sub

或可能:

bundle exec rake first_look_db:add_month_to_look_sub

如果第一个告诉你这样做。您可以在namespace文件中为taskrake命名。我刚从你所拥有的东西中挑选了一些似乎对我有意义的名字。