DataMapper无法将字符串转换为整数枚举

时间:2013-04-24 14:31:24

标签: ruby datamapper padrino

我有以下型号

class TagType
  include DataMapper::Resource

  ## Relationships
  belongs_to :category
  has n, :tags

  ## Properties
  property :uuid, UUID, :key => true, :default => lambda { |r,p| SecureRandom.uuid }
  property :name, Enum[:venue, :format, :genre, :organization]
end

在我的app控制器中,我收到一个名字参数作为字符串,将其转换为符号,并尝试执行查找:

get ':cat_name/:tag_type' do
cat = Category.first :name => params[:cat_name]
halt 400, "Invalid category" if cat.nil?
sym = params[:tag_type].to_sym
puts "Sym: #{ sym.inspect }"
raise "Not symbol!" if sym.class != Symbol
tag_type = TagType.first(:category => cat, :name => sym)
halt 400, "Invalid tag type name" if tag_type.nil?

这是给我的

  

4)错误:   test_0001_should_get_all_the_tags_for_a_category(TagController):   TypeError:无法将String转换为Integer       test / app / controllers / tag_controller_test.rb:10:in []' test/app/controllers/tag_controller_test.rb:10:in块(2级)in'

puts "Sym: #{ sym.inspect }"的输出为Sym: :venue 我试过用文字:genre代替sym来确保工作正常,而且确实如此。如果它不是符号,我会尝试引发异常,但这并不会触发,每次都会抛出这个错误,尽管它显然是一个符号。

这是使用DataMapper扩展程序dm-types,更具体地说是Enum class

1 个答案:

答案 0 :(得分:0)

如果你看看我的例外,你会发现我错过了一个重要的细节:

  

)错误:   test_0001_should_get_all_the_tags_for_a_category(TagController):   TypeError:无法将String转换为Integer   test / app / controllers / tag_controller_test.rb:10:in []'   测试 /app/controllers/tag_controller_test.rb:10:inblock(2个级别)

这是我测试的第10行,恰好与app控制器本身的线路相匹配! DataMapper工作正常。我的错。