2012-02-14 9 views
2

lib_states.rbという名前のファイルをlib/myレール3プロジェクトに作成しましたが、私のビューでStatesを呼び出すと、このエラーメッセージが表示されます:Rails 3 - lib初期化されていない定数ActionView :: CompiledTemplates :: STATES

uninitialized constant ActionView::CompiledTemplates::STATES 

私は既にapplication.rbにlibフォルダをロードするためにautoload_pathを設定しましたが、まだ動作しません。 config.autoload_paths << File.join(config.root, "lib")

これは私のコードです:https://gist.github.com/1822459

問題は何?フォームのselectは、「AC」のいっぱいになる意味、[option text, option value]、「AL」、...となります:そのRailsは、このような各2要素の配列を使用することを

答えて

2

あなたはその定数の名前空間を提供する必要があるかもしれません:あなたのSTATES配列の値を切り替えます。私はまた、次のgg_sの答え示唆

# lib/states.rb 
module States 
    BRAZIL = [ 
    # ... 
    ] 
end 

:私はbr_states.rbと呼ばれるレールの自動ローダーがあなたのSTATES定数は、ファイルに定義されていることを把握することはできませんだと思う略語ファイルで

# new.html.erb 
<%= adr.select :state, options_for_select(States::BRAZIL), :label => "Estado", :required => true %> 
1

使用options_for_select

<%= adr.select :state, options_for_select(STATES), :label => "Estado", :required => true %> 

注意"Acre"、 "Alagoas"、...を提出してください。

私は完全なテキストを表示し、省略形を返すことを望みます。

STATES = [[ "Acre",  "AC" ], 
      [ "Alagoas", "AL" ], 
      [ "Amazonas", "AM" ], 
      [ "Amapá", "AP" ], 
      # and so on... 
0

を、ライン18に二重引用符がありません。これはおそらくこの特定の問題の原因ではありませんが、それは確かに問題を引き起こすでしょう。

0

あなたのファイル名があなたのクラス名と一致しないという問題があったと思います。ファイル名を "br_states.rb" - > "states.rb"から変更した場合、レールのオートローディングは "STATES"定数を正しく解決することができました。オートローディングの詳細については、この記事を参照してください。 http://urbanautomaton.com/blog/2013/08/27/rails-autoloading-hell/

関連する問題