Rails学习笔记(7)

Rails学习笔记(6),主要是对render和direct_to方法的一些理解和体会。
以前在Rails学习笔记(3)中简单的提到过这两者的区别(如下),现在就根据书上提到的一个例子再做一些简单的区分。
图片
Rails学习笔记(3)中提到的相关内容
 
以一个支持文章评论的blog为例
功能要求:当用户在某篇文章中添加评论后,页面重新跳转到文章,并且此时该文章的评论中已有用户刚才添加的评论了。
为了实现上述功能,代码编辑如下:
 1 class BlogController
 2       def  display
 3             @article=Artical.find(params[:id])
 4       end
 5       def add_comment
 6             @article=Artical.find(params[:id])
 7             comment=Comment.new(params[:comment])
 8             @article.comments<<commen
 9             if @article.save
10                flash[:notice]="Thank you for your comment"
11             else
12                flash[:notice]="We threw your worthless comment away"
13             end
14       #选择1
15       render(:action=>"display")
16       #选择2
17       redirect_to(:action=>"display")
18        end
19 end

分析:若是选择1,当执行完render方法后,此时页面的URL仍然停留为blog/add_comment,因为我们知道render方法只是调用某一个模板而没有执行方法,所以URL不变;可是,如果当用户想要刷新页面去看看有没有新添加的评论时,add_comment这个方法又会被执行,而这却不是我们想要的;再看看方法2,我们知道redirect_to会执行相应的action,因此当执行完该句后,页面的URL便是blog/display而不是如选择1那样了——因此这里选择方法2。

最后在强调下:render只是调用某一个模板而没有执行方法,记住。
更多内容可参考《Agile Web Development with Rails 》—Part Three

Steven Meng
2013.2.4
posted @ 2013-02-04 16:45  StevenMeng  阅读(309)  评论(0编辑  收藏  举报