我有以下型号
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
在我的应用程序控制器中,我收到一个名称参数作为字符串,将其转换为符号,并尝试执行查找:
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: can't convert String into Integer test/app/controllers/tag_controller_test.rb:10:in
[]' test/app/controllers/tag_controller_test.rb:10:in
block (2 levels) in '
的输出puts "Sym: #{ sym.inspect }"
是 Sym: :venue
我尝试只用一个文字:genre
代替 sym 以确保它可以正常工作,并且确实如此。如果它不是符号,我会尝试引发异常,但这不会触发,并且每次都会抛出这个错误,尽管它显然是一个符号。
这是使用 DataMapper 扩展dm-types
,更具体地说是Enum 类