Rails 3 - неинициализированная константа lib ActionView :: CompiledTemplates :: STATES - PullRequest
2 голосов
/ 14 февраля 2012

Я создал один файл с именем br_states.rb в lib / в проекте my rails 3, но когда я вызывал States, на мой взгляд, я получил это сообщение об ошибке:

uninitialized constant ActionView::CompiledTemplates::STATES

Я уже установил autoload_path в моем application.rb для загрузки папки lib, но пока не работает. config.autoload_paths << File.join(config.root, "lib")

Это мой код: https://gist.github.com/1822459

В чем проблема?

Ответы [ 4 ]

2 голосов
/ 14 февраля 2012

Возможно, вам потребуется предоставить пространство имен для этой константы.Я думаю, что автозагрузчик Rails не может понять, что ваша STATES константа определена в файле с именем br_states.rb:

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

Я также предлагаю следующий ответ gg_s:

# new.html.erb
<%= adr.select :state, options_for_select(States::BRAZIL), :label => "Estado", :required => true %>
1 голос
/ 14 февраля 2012

Использование options_for_select

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

Обратите внимание, что Rails будет использовать каждый двухэлементный массив следующим образом: [option text, option value], то есть select вашей формы будет заполнен "AC", "AL", ... и отправит "Acre", " Алагоас ", ...

Полагаю, вы хотите, чтобы он отображал полный текст и возвращал аббревиатуру. Переключите значения в вашем массиве STATES:

STATES = [[ "Acre",     "AC" ],
          [ "Alagoas",  "AL" ],
          [ "Amazonas", "AM" ],
          [ "Amapá",    "AP" ],
          # and so on...
0 голосов
/ 08 января 2014

Я думаю, что проблема была в том, что ваше имя файла не совпадало с именем вашего класса. Если вы изменили имя вашего файла с "br_states.rb" -> "states.rb", то автозагрузка рельсов смогла бы правильно разрешить константу "STATES". Проверьте эту статью, которая объясняет автозагрузку более подробно. http://urbanautomaton.com/blog/2013/08/27/rails-autoloading-hell/

0 голосов
/ 24 февраля 2012

В файле сокращений в строке 18 отсутствует набор двойных кавычек. Вероятно, это не источник этой конкретной проблемы, но она наверняка вызовет проблемы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...