【问题标题】:Problem with passing argument to rake task将参数传递给 rake 任务的问题
【发布时间】:2018-09-04 18:27:12
【问题描述】:

我正在使用 Ruby 2.3.1p112 和 Rails 4.2.7.1 进行编码,并在尝试在其中一个 rake 文件中使用 if 语句时遇到了这个错误(?)。

我称之为 rake 任务:

task :bar, [:argument] => :environment do |_task, arg|
  binding.pry
  if arg.blank?
    # do stuff
  else
    # do other stuff
  end
end

来自这个工人:

 # ...
 def perform(location = nil)
    Rake::Task["foo:bar"].execute(location)
 end
 # ...

当代码到达 binding.pry 行时,我会遇到以下问题:

这确实是一个错误还是我在这里缺乏一些基本知识? 谢谢!

【问题讨论】:

    标签: ruby-on-rails ruby ruby-on-rails-4 ruby-on-rails-5 ruby-on-rails-6


    【解决方案1】:

    你想要

    arg[:argument].blank?
    

    因为arg 是带有:argument 键的哈希。

    附带说明:以下是对任务的更具描述性的定义(注意复数 argslocation,因为它看起来像是在传递位置):

    task :bar, [:location] => :environment do |_task, args|
      if args[:location].blank?
        # do stuff
      else
        # do other stuff
      end
    end
    

    【讨论】:

    • 这正是我正在寻找的代码行!感谢您编辑主题,我在表达自己时遇到了问题:)
    • 嘿!还有一个问题——因为我已经向前迈出了几步,我遇到了另一个问题——现在当我传递一个参数时——说一个字符串给一个 rake 任务我不能再访问 args[:location],因为 args 变成了那个特定的字符串。任何提示如何处理这个?
    • @Rigi 你必须做两件事:首先,将任何东西传递给 rake 任务并调试(使用binding.pryargs 是什么;第二:确保你总是传递一个有效的参数。我展示的设置应该可以工作,你改了吗?
    • 嘿!我做到了,当我使用以下行调用 rake 任务时:Rake::Task["foo:bar"].execute(location),然后 args 似乎是“扁平化” - 我使用了 binding.pry 并输入 args 给了我位置的价值立即。但是当我这样称呼它时:Rake::Task["foo:bar"].execute,然后我可以使用 args[:location] 编辑:我尝试使用 args.with_default 但后来我得到“错误:未定义的方法`with_defaults ' for "London":String" (但当位置为 nil 时这可以正常工作)
    • EDIT2:谢谢,问题解决了!为了确保 args 不会变平,我需要调用 rake 任务,例如: Rake::Task["foo:bar"].execute(location: location) - 所以基本上我只是将 arg 作为哈希传递 :) 谢谢再一次!
    猜你喜欢
    • 1970-01-01
    • 2016-04-08
    • 2015-02-14
    • 1970-01-01
    • 2011-07-02
    • 2012-05-18
    • 2011-07-09
    • 2010-10-23
    相关资源
    最近更新 更多