Closed tangmaomao16 closed 7 years ago
选中代码,然后点击insert code,就能达到那种效果
把你的list方法对应的视图代码贴出来
我找到view中的list.html.erb文件
里面有这样的一句代码:
<% @course.each do |course| %>
而我的course_controller文件中,用的是@openarray
来储存已开课的课程。这解释了,我之前run网页时,运行结果仍然是原本的所有的“除当前已选的课程以外的课程”,即@course= @course-current_user.courses
, 而非我想要的@openarray
。
后来将list.html.erb文件中的 <% @course.each do |course| %>
改写为 <% @openarray.each do |course| %>
run网页, 显示错误,说是与“@openarray是hash"有关,因为我定义@openarray的语句是@openarray = {}
,这就把@openarray定义成了hash;另一方面,像@openarray.push(course)
这样的语句,push
方法只能在数组上使用,而不能在hash上使用,综上,造成了错误。
我的解决方案是,改用@openarray = Array.new
, 这样就把@openarray 定义成数组,可以使用push方法了。用push方法加入新元素到数组中是一种非常简洁的代码!
此外,怀着”简洁用语“的理想,我删去了return @openarray
,将if短句后置以省去end,以及将if短句中的问好去掉。
最终,代码如下:
def list
@course=Course.all
@course= @course-current_user.courses
@openarray = Array.new
@course.each do |course|
@openarray.push(course) if course.open
end
end
run网页时,终于符合预期设计了。 感谢老师!
哈哈哈哈,不错不错,自己解决了问题,还理解了rails的简介的精髓
其实声明一个新数组还有更简洁的写法 : )
@openarray = []
我的代码如下:
def list
@course=Course.all
@course= @course-current_user.courses
@openarray = {}
@course.each do |course|
if course.open?
@openarray.push(course)
end
end
return @openarray
end
run网页,运行结果是原本的所有的“除当前已选的课程以外的课程”,不是预期设计的“只有已开课的课程”。