.collect方法获取错误未定义方法`collect'代表nil:NilClass

时间:2014-04-21 16:45:30

标签: html ruby-on-rails erb

尝试下载列表,但是当我尝试它时,它会给我

未定义的方法`收集n#39;为零:NilClass

控制器:

def existing

                @courses = Course.all

    end
    def duplicate
        course = Course.find_by_id(permitd_up[:id])
        new_course = course.dup
        if new_course.save
            redirect_to :action => 'show'
        else
            redirect_to :back
        end
    end

观点:

<h3>Choose a Course</h3>
    <%= form_for :course , url: {:action => "duplicate" , method: "post"} do |f|%>
        <%= f.select :id , @courses.collect{|c| [c.id , c.name]} %>
    <br><br>
    <%= f.submit%>

    <%end%>

2 个答案:

答案 0 :(得分:2)

您将收到以下错误

undefined method `collect' for nil:NilClass

<%= f.select :id , @courses.collect{|c| [c.id , c.name]} %>

仅在呈现此特定视图的操作中未设置@courses实例变量时。

我看到@courses方法中设置了existing变量。如果您使用existing作为呈现此视图的操作,那么您的视图名称必须为existing.html.erb

或者,如果您要从不同的操作渲染视图,那么在这种情况下,您应该通过直接设置操作中的值或通过从那里调用@courses方法在该特定操作中设置existing

答案 1 :(得分:0)

如果您将课程作为数据库表,则可能需要尝试使用rails内置的助手collection_select。它将使用模型中可用的所有数据填充您的选择字段。如果你想要一个你所描述的下拉列表,我相信使用集合选择是处理它的最佳方式。

您可以在此处阅读:http://api.rubyonrails.org/classes/ActionView/Helpers/FormOptionsHelper.html

或者,如果你有很多课程,也许可以尝试使用带有自动完成功能的文本字段。 Jquery UI有一个插件,使这很容易。你可以在这里查看railscast:http://railscasts.com/episodes/102-auto-complete-association-revised

它需要一个专业帐户,但如果你做了很多铁轨开发,它将是你每个月花费最多的9美元。

如果您希望继续这样做,请确保您正在定义 <{1}}在正确的控制器操作中,否则您将无需呈现任何内容。