Html .collect方法获取未定义的错误方法'collect';零级:零级
我正试图建立一个下拉列表,但当我尝试时,它会给我 nil:NilClass的未定义方法“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
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]} %>