2

Rails 3.1.0 から 3.2.3 にアップグレードしました。gem の依存関係の問題が解消されたら、なんとかテストを実行して、次のことを発見しました。

1.9.2p180 :005 > Rails.version
 => "3.2.3" 
1.9.2p180 :006 > a = 'test'
 => "test" 
1.9.2p180 :007 > a.try(:banana)
NoMethodError: undefined method `banana' for "test":String
    from /Users/jamesthullbery/.rvm/gems/ruby-1.9.2-p180@app_tier/gems/activesupport-3.2.3/lib    /active_support/core_ext/object/try.rb:32:in `try'
    from (irb):7
    from /Users/jamesthullbery/.rvm/gems/ruby-1.9.2-p180@app_tier/gems/railties-3.2.3/lib/rails    /commands/console.rb:47:in `start'
    from /Users/jamesthullbery/.rvm/gems/ruby-1.9.2-p180@app_tier/gems/railties-3.2.3/lib/rails/commands/console.rb:8:in `start'
    from /Users/jamesthullbery/.rvm/gems/ruby-1.9.2-p180@app_tier/gems/railties-3.2.3/lib/rails/commands.rb:41:in `<top (required)>'
    from script/rails:6:in `require'
    from script/rails:6:in `<main>'
1.9.2p180 :008 > 

Rails 3.1.0 で同じコマンドを実行しても、問題は発生しません。

1.9.2p180 :004 >   Rails.version
 => "3.1.0" 
1.9.2p180 :005 > a = 'test'
 => "test" 
1.9.2p180 :006 > a.try(:banana)
 => nil 
1.9.2p180 :007 > 

誰もこの問題を見たことがありますか?確かに、Rails フレームワークではなく、私の環境に何か問題があります。メソッド try を正確に検索するのはかなり難しいようで、まだオンラインで何も見つかりませんでした。他の誰かがこれを見ていますか?ありがとう!

4

1 に答える 1

3

Object#trynilレシーバーを扱うことになっています。NoMethodError例外を避けるために使用しないでください。

3.1.0 で見られた動作はバグであり、 7 か月前(この記事の執筆時点)に「修正」されました。

于 2012-05-02T21:41:31.500 に答える