尝试下载列表,但是当我尝试它时,它会给我
未定义的方法`收集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%>
答案 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}}在正确的控制器操作中,否则您将无需呈现任何内容。