以下是我的文件/home/divya/climb/project1/app/views/cities/new.html.erb中的代码摘录,其中第5行引发了此错误:
nil的未定义方法`map':NilClass
提取的来源(第5行):
2: <%= form_for(@city) do |f| %>
3: <%= f.label :country_id %><br />
4:
5: <%= collection_select(:city, :country_id, @countries, :id, :country_name, {:prompt => false}) %>
6: <%= render 'form' %>
7:
8: <%= link_to 'Back', cities_path %>
Rails.root: /home/divya/climb/project
答案 0 :(得分:7)
显然,您没有在控制器中设置@countries
实例变量,因此它是nil
。
map
内部@countries
调用ActionView
方法(严格按照options_from_collection_for_select
方法)。
您应该在控制器中设置@countries
,并使用:
@countries = Country.all
或直接在视图中调用:
<%= collection_select(:city, :country_id, Country.all, :id, :country_name, { :prompt => false }) %>
答案 1 :(得分:2)
更改
<%= collection_select(:city, :country_id, @countries, :id, :country_name, {:prompt => false}) %>
要
<%= collection_select(:city, :country_id, Country.all, :id, :country_name, {:prompt => false}) %>
答案 2 :(得分:0)
仅在控制器中更改此变量,使用全局变量$ countries = Country.all,并且您的视图使用此变量。