在/posts/show.rhtml中调用了两次render,分别用来显示一个post对应的评论列表以及一个快速回复form:
/comments/list.rhtml和/comments/new由scaffold自动生成,基本没有修改,所有需要的数据都经过instance variable传递,此处发现在render '/comments/new'的时候出现问题,scaffold自动生成经过我删除无关字段后的'/comments/new.rhtml':
错误的展现页面在附件中,明明应该显示/comments下的new.rhtml,但实际展现的确看起来很想/posts/下的edit。
后来观察/comments/new.rhtml,突然想到这个里面又render了_form.rhtml这个文件,问题会不会出在这个多次的render上面,经过实验,发现果然如此,将上述代码改为:
注意在render partial的时候指定了_form的完整路径,这下终于显示正常了,没有看rails的源代码,不过通过这个问题猜想rails在render的时候,如果没有指定完整路径(从app/views/开始),会尝试render当前controller下的同名文件。为了证明,首先将/comments/new.rhtml中的render改为最初出现错误的版本,然后将posts下的_form.rhtml改名,再次调用show方法,果然报错,提示无法找到/posts/_form.rhtml文件。
错误最终解决,发现自己对rails的了解还是刚刚知道一点儿皮毛。这个小玩意儿弄完了一定要好好研究下rails的source code。