Render AND Redirect_to

==render==
render可以翻译成"渲染",也就是说,render仅仅渲染了一个新的模板,而没有执行相应的action。它是简单的页面渲染,可以指定渲染页面和布局文件,不会发送请求,不会执行action函数,不会重新加载服务器数据。
如果要链接到同一个控制器中的动作,不用指定 :controller 选项,因为默认情况下使用的就是当前控制器。
在开发模式下(默认),每次请求 Rails 都会重新加载程序,因此修改之后无需重启服务器。
#flash、cookie 及 session 都能够完成视图间的数据传递。但 flash 一般用于简单的提示消息,而 cookie 及 session 则常见于用户信息管理。
#form_for和model绑定,而form_tag不是;form_tag想传什么参数都行,没有约束。
#路由使用 HTTP 方法和 URL 匹配请求,把四个 URL 映射到七个不同的动作上。
每产生一个Model程式时,Rails自动产生对应的Migration档案,类似于 db/migrate/20110519123430_create_events.rb,Rails是按照时间戳来命名档案的,每次产生的档案名不同,以避免多人开发时的冲突。
Migration档案不需要和Model一一对应。
在 Rails 中,方法分为 public、private 和 protected 三种,只有 public 方法才能作为控制器的动作。
:handlers 表示用来处理模板的程序,HTML 模板一般使用 :erb,XML 模板使用 :builder,:coffee 用来把 CoffeeScript 转换成 JavaScript。


render(:text => string)	#直接渲染出文本	
render(:inline => string, [:type => "rhtml"|"rxml"])	#把传入的string渲染成模板(rhtml或者rxml)
render(:action => action_name)		#直接调用某个action的模板,相当于forward到一个view
render(:file => path, [:use_full_path => true|false])	#使用某个模板文件render, 当use_full_path参数为true时可以传入相对路径
render(:template => name)	#使用模板名render,e.x.: render(:template => “blog/short_list”)
render(:partial => name)		#以局部模板渲染
render(:nothing=>true)	#什么也不输出,包括layout
render()				#默认的的render, 相当于render(:action => self)

render :plain will set the content type to text/plain
render :html will set the content type to text/html
render :body will not set the content type header.
reder :text 	将来版本中不再使用。
render   'article/show'	转向其它方法
 
用render渲染一个模板能够显示错误信息,但用redirect_to重新请求就没有.
redirect_to :action => :index需要跳转到index这个action,然后渲染index.html.erb,额外增加了一次http请求。直接render "index", :alert => 'Your book was not found!'就把额外的这次请求给免了.


method: :patch 选项告诉 Rails,提交这个表单时使用 PATCH 方法发送请求。根据 REST 架构,更新资源时要使用 HTTP PATCH 方法。

按照约定,局部视图的文件名以下划线开头。

渲染局部视图中的集合:把代码抽出来,写入局部视图文件(app/views/comments/_comment.html.erb )中,“<%= render @article.comments %>”,render会使用局部视图渲染@article.comments 集合,render 方法会遍历 @article.comments 集合,把每个评论赋值给一个和局部视图同名的本地变量,在这个例子中本地变量是 comment,这个本地变量可以在局部视图中使用。
渲染局部视图中的表单:把代码也移到局部视图文件(app/views/comments/_form.html.erb)中, “<%= render "comments/form" %>”,render 方法的参数就是要渲染的局部视图,Rails 很智能,能解析其中的斜线,知道要渲染 文件夹( app/views/comments)中的 _form.html.erb 模板。

1。无论是render 还是 redirect_to 都是方法体内的内容全部执行完再跳转,就算跳转了,方法体内的还是会全部执行的
2。render 是跳转到对应的view下html

=== redirect_to ===
redirect_to实现的是action方法的跳转,向浏览器发起一个新的请求,执行对应的action,重新加载服务器数据,不保留页面原有数据;如:
redirect_to :controller => 'thing',:action => 'edit', :id => 7	#跳转到相应的方法,同时传递参数 id ,貌似redirect_to不能以post的方式提交数据,默认的方式是get,详见 http://stackoverflow.com/questions/2144391/ruby-on-rails-post-parameters-on-redirect-to。
redirect_to edit_multiple_items_path(:page =>2), :notice => 'items updated'   使用path的方式。w

redirect_to :back		#回到上一次访问的页面
redirect_to "http://localhost/"	#跳转到本地首页
redirect_to "/images/1.jpg"		#跳转到图片资源

####Link_to
#ref: http://api.rubyonrails.org/classes/ActionView/Helpers/UrlHelper.html#method-i-link_to
#	 http://mixandgo.com/blog/how-to-use-link_to-in-rails
#	http://stackoverflow.com/questions/3762430/rails-preserving-get-query-string-parameters-in-link-to/4174493#4174493

<%= link_to "Home", root_path %>
# => <a href="/">Home</a>

#	Link-ing to a resource
<%= link_to "Profile", user_path(@user) %>
# => <a href="/users/1">Profile</a>

link_to "Comment wall", profile_path(@profile, :anchor => "wall")
#=> <a href="/profiles/1#wall">Comment wall</a>

link_to "Ruby on Rails search", :controller => "searches", :query => "ruby on rails"
#=> <a href="/searches?query=ruby+on+rails">Ruby on Rails search</a>

link_to "Nonsense search", searches_path(:foo => "bar", :baz => "quux")
#=> <a href="/searches?foo=bar&amp;baz=quux">Nonsense search</a>

给link_to加上class样式 比如我们的class样式为: classror:
<%= link_to "Link name", { :controller => 'controller_name',:action => 'action_name' },:class => 'classror' -%>

给link_to加上ID样式 这里说的不是javascript调用的 这里说的是样式ID(#):
<%= link_to "Link name", { :controller => 'controller_name',:action => 'action_name' },:id=> 'idror' -%>


转载于:https://my.oschina.net/u/2407499/blog/531979

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值