qiaoyu's Blog

20171210_ORID | fullstack3 报错:post#show功能的实现

报错结果

post功能已经完成,但是post#show的展示出了问题:
(贴上相应的报错页面和log日志)


助教协助破案

【1】

助教会让我贴上相应的controller的截图;

我下意识就选择了post_controller;因为我现在就是要做post的列表展示呀。
于是贴上:

【2】

助教示意:根本就没有写show的功能;可以仿照rails101的posts来写。

得到提示,我就开始模仿,不过还是会有报错
即使把模仿时写错的@post 改成 @posts ,还是一样的报错

【3】

接着助教再次提示:你course.rb有些has_many :posts吗

我就去查看了我的course.rb
发现此处没有毛病

【4】

助教便产生疑问:你写的view是admin/courses/show.html.erb不是admin/posts/show.html.erb

确实,我写的是前者。admin/courses/show.html.erb
我实际想要在courses的show页面把posts列表展示出来

此时我也发现了问题所在
如果我想要 在courses的show页面把posts列表展示出来
那么,如果courses_controller的show功能里没有定义posts,那么就会报错。
所以,最初的报错示意的不是each无法识别,而是posts无法识别,因为没有在功能里定义

【5】

助教:那就修改courses_controller.rb文件的show而不是posts_controller.rb
还是对照rails101自己修改

我仿照rails101做了修改:
最终确认在admin/courses_controller.rb里添加@posts = @course.posts

完成debug!!!


得到赞赏👍

延伸

刚刚我像达到的效果是:在后台admin的course里展示post;
同理,如果我想要在前台的course展示posts,就要在courses_controller.rb里再添加一句@posts = @course.posts

这个bug我没有解题思路的认知局限在哪里?

想要show一个列表,必要的条件有controller,model,views;逐个排查,知道确认无误;

controller里必须定义show功能;还要定义posts;
model中要定义courses与post的相互关系;不要拼写错误;
views中要写出正确的循环(each)列表显示;在你想显示的页面

如果排查无误,接着是要确定:在有多个controller时,你的最终目标是要在那个show里展示这个列表,想要在哪个show里展示,就要在哪个对应的controller的show功能里写上@posts = @course.posts

Comments

comments powered by Disqus