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) Ошибка: test_0001_should_get_all_the_tags_for_a_category(TagController): TypeError: невозможно преобразовать строку в целое число test/app/controllers/tag_controller_test.rb:10:in []' test/app/controllers/tag_controller_test.rb:10:inblock (2 уровня) в '

Результатом для puts "Sym: #{ sym.inspect }" является Sym: :venue. Я попытался просто поставить литерал :genre вместо sym, чтобы убедиться, что он работает нормально, и он работает. Я пытаюсь вызвать исключение, если это не символ, но это не срабатывает, и каждый раз это заканчивается тем, что выдает эту ошибку, несмотря на то, что это явно символ.

Это использует расширение DataMapper dm-types, а точнее Перечисленный класс


person joslinm    schedule 24.04.2013    source источник


Ответы (1)


Если вы посмотрите на мое исключение, вы увидите, что я упустил важную деталь:

) Ошибка: test_0001_should_get_all_the_tags_for_a_category(TagController): TypeError: невозможно преобразовать строку в целое число test/app/controllers/tag_controller_test.rb:10:in []' test/app/controllers/tag_controller_test.rb: 10: заблокировать (2 уровня) в

Это была строка 10 моего теста, которая совпала со строкой в ​​самом контроллере приложения! DataMapper работает нормально. Моя вина.

person joslinm    schedule 24.04.2013