2013-04-24 64 views
2

我有以下型號的DataMapper不能把字符串轉換爲整數枚舉

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) Error: 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 class

回答

0

如果你看一下我的異常,你會看到我錯過了一個重要的細節:

) Error: 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:inblock (2 levels) in

這是第10行我的測試碰巧與應用控制器本身的線路相匹配! DataMapper工作正常。我的錯。