2

私は次のモデルを持っています

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

私のアプリ コントローラーでは、name パラメーターを文字列として受け取り、それをシンボルに変換して、ルックアップを実行しようとします。

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:inブロック (2 レベル) in '

の出力puts "Sym: #{ sym.inspect }" は 、sym の代わりにSym: :venue リテラルを配置して、問題なく動作することを確認したことです。:genreシンボルでない場合は例外を発生させようとしますが、これは起動せず、明らかにシンボルであるにもかかわらず、毎回このエラーがスローされます。

これは DataMapper 拡張機能dm-types、より具体的にはEnum クラスを使用しています

4

1 に答える 1

0

私の例外を見ると、重要な詳細を見逃していることがわかります。

) エラー: 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 レベル)の

これは私のテストの 10 行目にあり、たまたまアプリ コントローラー自体の行と一致していました。DataMapper は正常に動作しています。私のせいです。

于 2013-04-24T14:56:07.320 に答える