Rails 3 - lib未初始化的常量ActionView :: CompiledTemplates :: STATES

时间:2012-02-14 01:59:20

标签: ruby-on-rails

我在my rails 3项目的lib /中创建了一个名为br_states.rb的文件,但是当我在视图中调用States时,我收到了以下错误消息:

uninitialized constant ActionView::CompiledTemplates::STATES

我已经在我的application.rb中设置autoload_path来加载lib文件夹,但是没有用。 config.autoload_paths << File.join(config.root, "lib")

这是我的代码:https://gist.github.com/1822459

有什么问题?

4 个答案:

答案 0 :(得分:2)

您可能需要为该常量提供命名空间。我认为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 :(得分:1)

使用options_for_select

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

请注意,Rails将使用每个双元素数组:[option text, option value],这意味着您的表单select将充满&#34; AC&#34;,&# 34; AL&#34;,......并将提交&#34; Acre&#34;,&#34; Alagoas&#34;,...

我假设您希望它显示全文并返回缩写。切换STATES数组中的值:

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

答案 2 :(得分:0)

在缩写文件中,第18行缺少一组双引号。这可能不是这个特殊问题的根源,但肯定会引起问题。

答案 3 :(得分:0)

我认为问题是您的文件名与您的班级名称不符。如果您更改了文件名“br_states.rb” - &gt; “states.rb”然后rails自动加载将能够正确解析“STATES”常量。查看这篇文章,更详细地解释自动加载。 http://urbanautomaton.com/blog/2013/08/27/rails-autoloading-hell/