我在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
有什么问题?
答案 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)
<%= 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/