ruby-on-rails - Ruby 哈希长度或大小不返回任何内容

标签 ruby-on-rails ruby

我正在用 ruby​​ 做一个 rake 任务:

namespace :generate do
  desc "Export to txt"
  task :txt, [:filename, :item_id] => :environment do |t, args|
    puts "aaaaaaaaaaaaa #{args.length}"
    puts "ssssssss #{args.size}"
    puts "bbbbbbbbbb #{args}"

    args.each do | arg |
        puts "#{arg}"
    end
  end
end

前两个 put 不返回任何东西,只是 aaaaaaaaaaasssssss 被打印出来,但是 bbbbbb print 确实返回我的 args,甚至当我遍历每个参数时,它们都会被打印出来.我做错了什么?

更新

我是这样开始 rake 任务的:

rake 生成:txt[Temp.txt,22]

bbbbbbbbb 打印:

bbbbbbbbbb {:filename=>"Temp.txt", :item_id=>"22"}

每个循环打印:

[:filename, "Temp.txt"]
[:item_id, "22"]

最佳答案

args 不是一个Hash,而是一个Rake::TaskArguments:

puts args.class #=> Rake::TaskArguments

可能这个类没有实现sizelength;转换为哈希对我有用:

namespace :generate do
  desc "Export to txt"
  task :txt, [:filename, :item_id] => :environment do |t, args|
    puts "args class: #{args.class}"
    args = args.to_hash
    puts "args to hash: #{args.inspect}"
    puts "aaaaaaaaaaaaa #{args.length}"
    puts "ssssssss #{args.size}"
    puts "bbbbbbbbbb #{args}"

    args.each do | arg |
        puts "#{arg}"
    end
  end
end

打印:

$ rake generate:txt[Temp.txt,22]
Rake::TaskArguments
{:filename=>"Temp.txt", :item_id=>"22"}
aaaaaaaaaaaaa 2
ssssssss 2
bbbbbbbbbb {:filename=>"Temp.txt", :item_id=>"22"}
[:filename, "Temp.txt"]
[:item_id, "22"]

关于ruby-on-rails - Ruby 哈希长度或大小不返回任何内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14459502/

相关文章:

ruby - 在带有 RVM : 的 OS X 上安装 Ruby 1.9.3 时出现 "No available formula for gcc46"

ruby - 如何从满足谓词的 Ruby 数组中选择前 n 个元素?

ruby-on-rails - 如何使用 Paperclip 裁剪然后调整大小

javascript - 如何让 Action 响应 PHP 中的 javascript?

ruby-on-rails - 模型验证以拒绝来自用户名的定义路由

ruby - RSpec 和 ActiveRecord : Example fails on invalid scenario

javascript - application.js 未加载到 Rails 应用程序;无法清除 tmp 存储。安全错误; Chrome

sql - Rails find_by_sql 依赖于数据库类型

ruby - GitHub 页面未构建

ruby - 在写入新内容之前清理 ruby​​ 文件