1

下面是从我的文件 /home/divya/climb/project1/app/views/cities/new.html.erb 中提取的代码,其中第 5 行引发了此错误:

nil:NilClass 的未定义方法“map”

提取的源代码(第 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
4

3 回答 3

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 }) %>
于 2013-08-12T11:21:55.293 回答
2

改变

<%= collection_select(:city, :country_id, @countries, :id, :country_name, {:prompt => false}) %>

<%= collection_select(:city, :country_id, Country.all, :id, :country_name, {:prompt => false}) %>
于 2013-08-12T11:23:52.297 回答
0

仅在控制器中更改此变量使用全局变量 $countries=Country.all 并且您的视图使用此变量。

于 2016-04-05T00:01:32.013 回答