1

在过去的几个小时里,我一直试图找出我做错了什么,但我无法找到解决方案。简而言之,我试图用一个名为“学期”的表中的数据填充一个选择框。(我在 SO 上看到了很多关于此的问题,但我无法让它们与我的应用程序一起使用)。

这是我所拥有的:

课程控制器

class CoursesController < ApplicationController
  def create
   @semesters = Semester.all()
   @course = Course.new(params[:course])
    # Save the object
    if @course.save
      flash[:notice] = "Course created."
      redirect_to(:action => 'list')
    else
      # If save fails, redisplay the form so user can fix problems
      render('new')
    end
  end
end

看法

#views/courses/new.html.erb
<%= form_for(:course, :url => {:action => 'create'}) do |f| %>
   <%= f.select(:semester, @semesters.map { |s| [ s.name, s.id ] }) %>
   <%= submit_tag("Create Course") %>
<% end %>

我希望它会输出:

  <select>
    <option id="1">Spring 2013</option>
    <option id="2">Fall 2013</option>
  </select>

但是,相反,我收到了错误:

 views/courses/new.html.erb where line #32 raised:

      undefined method `map' for nil:NilClass

第 32 行对应于我的表单助手选择。

对此的任何帮助都会很棒!

4

1 回答 1

6

您应该@semesters在控制器中设置变量:

def new
  @semesters = Semester.all
end

发生错误是因为未设置的实例变量被评估为nil,因此您尝试在对象上调用map方法。nil

于 2013-07-29T21:18:36.320 回答