一部の SettingsLogic 機能を使用するメソッドを呼び出すいくつかの単体テスト (Ruby/Rails に含まれている Test::Unit モジュールを使用) を実行すると、このエラーが発生します。
RuntimeError: nil の id が呼び出されました。これは誤って 4 になります -- nil の id が本当に必要な場合は、object_id を使用してください
より具体的には、モデルのいくつかのメソッドをテストするために、いくつかの単体テストを作成しました。これらのメソッドは SettingsLogic 機能を使用していますが、ここで何か問題が発生しているようです。テスト コンソールを実行し、Settings クラスが定義されていることを確認しました。ただし、設定値のハッシュにアクセスできません。
script/console test
Loading test environment (Rails 2.3.10)
DEPRECATION WARNING: require "activesupport" is deprecated and will be removed in Rails 3. Use require "active_support" instead. (called from /var/lib/gems/1.8/gems/activesupport-2.3.10/lib/activesupport.rb:2)
>> Settings
=> Settings
>> Settings.blah
RuntimeError: Called id for nil, which would mistakenly be 4 -- if you really wanted the id of nil, use object_id
from (erb):32
>> exit
一方、開発環境では次のようになります。
script/console
Loading development environment (Rails 2.3.10)
>> Settings
=> Settings
>> Settings.blah
=> {"gadget_type"=>{"alarm_history_table"=>{"max_printable_rows"=>200, "max_visible_rows"=>14, "_id"=>5, "rows_per_page"=>100}, "text"=>{"_id"=>2}, "current_state_table"=>{"max_printable_rows"=>200, "max_visible_rows"=>14, "_id"=>1, "rows_per_page"=>10}, "column_based_history_table"=>{"max_printable_rows"=>200, "max_visible_rows"=>14, "_id"=>6, "rows_per_page"=>100, "related_states"=>{"unit"=>17, "description"=>49}}, "entity_history_table"=>{"max_printable_rows"=>200, "max_visible_rows"=>14, "_id"=>4, "rows_per_page"=>100}, "chart"=>{"_id"=>3}, "access_type"=>{"url"=>1, "file"=>2}}}
>> exit
テストを手動で実行しています。つまり、rake テストではなく、ruby unit/my_model_test.rb
settings.rb モデルは次のとおりです。
class Settings < Settingslogic
source "#{Rails.root}/config/application.yml"
namespace Rails.env
end
そして application.yml 設定ファイル:
defaults: &defaults
blah:
gadget_type:
access_type:
url: 1
file: 2
current_state_table:
_id: 1
max_visible_rows: 14
rows_per_page: 10
max_printable_rows: 200
text:
_id: 2
chart:
_id: 3
entity_history_table:
_id: 4
max_visible_rows: 14
rows_per_page: 100
max_printable_rows: 200
alarm_history_table:
_id: 5
max_visible_rows: 14
rows_per_page: 100
max_printable_rows: 200
column_based_history_table:
_id: 6
max_visible_rows: 14
rows_per_page: 100
max_printable_rows: 200
related_states:
description: <%= Property.find_by_name('description').id %>
unit: <%= Property.find_by_name('units').id %>
development:
<<: *defaults
test:
<<: *defaults
production:
<<: *defaults
RUBY バージョン: ruby 1.8.7 (2010-06-23 パッチレベル 299) [i686-linux]
RAILS バージョン: 2.3.10
設定ロジック: 2.0.6
ありがとう!!