Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/55.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Html .collect方法获取未定义的错误方法'collect';零级:零级_Html_Ruby On Rails_Erb - Fatal编程技术网

Html .collect方法获取未定义的错误方法'collect';零级:零级

Html .collect方法获取未定义的错误方法'collect';零级:零级,html,ruby-on-rails,erb,Html,Ruby On Rails,Erb,我正试图建立一个下拉列表,但当我尝试时,它会给我 nil:NilClass的未定义方法“collect” 控制员: def existing @courses = Course.all end def duplicate course = Course.find_by_id(permitd_up[:id]) new_course = course.dup if new_course.save

我正试图建立一个下拉列表,但当我尝试时,它会给我

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

控制员:

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%>
选择一门课程
“复制”,方法:“post”}do | f |%>



您将收到以下错误

undefined method `collect' for nil:NilClass


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

我看到
@courses
变量是在
现有的
方法中设置的。如果将
existing
用作呈现此视图的操作,则视图名称必须为
existing.html.erb


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

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

你可以在这里阅读:

或者,如果你有大量的课程,可以尝试使用自动完成的文本字段。jQueryUI有一个插件,使这非常容易。您可以在此处查看铁路乘客信息:

它需要一个专业帐户,但如果你做了大量的rails开发,它将是你每月花费的最好的9美元

如果您想继续这样做,请确保您正在定义
@courses=courses(:all)
在正确的控制器操作中,否则您将没有任何可渲染的内容。

您可以发布完整的控制器代码吗?确保您的
courses
表中有
courses
记录。
existing.html.erb
位于何处,共享路径?拥有
existing
action的控制器名称是什么。控制器名称是课程,而existing在课程视图中/app/views/courses/existing您的控制器名称应为
CoursesController
(文件名courses\u controller.rb),并且
existing.html.erb
应位于
app/views/courses
文件夹中。它们正是您所说的内容您使用的rails版本是什么?在课程表中是否有任何记录?我尝试了集合\u select,它给出了相同的错误
<%= f.select :id , @courses.collect{|c| [c.id , c.name]} %>