自定义action/路由

我们已经知道,在 /config/routes.rb 里定义的路由,会自动生成对资源的CRUD的操作。但是我们如何处理那些并不是CRUD的操作?下面我们就用一个例子来说明这一点。例如我们在CompanyController里有一个showresults的方法,它显示了某个公司的XXX结果,其方法(action)如下:

class CompaniesController < ApplicationController

  ..................

  def showresults

     @company Company.find(params[:id ])

     respond_to do |format|

       format.html # show.html.erb

       format.xml  { render :xml => @company }

     end

  end

end

 

当然有action就会有相应的页面showresults.haml,假设页面已经写好,那么需在companies的某个视图里添加一个链接,使其跳转到showresults.haml,如下所示:

= link_to( "查看结果", ???????,  :class=>"c")

 

现在有2个问题摆在我们面前:

1.使用 http 协议的哪个动作来发送这个请求呢?

2.对于这个链接,该如何生成那些 helper方法呢?

 

 

第一个问题:因为这个 showresults动作并不是CRUD中的任何一个,所以Rails 也不知道该用http的哪个来做这个事情。不过showresults和show(用get来发送,需传参数)相似,所以应该使用get来发送这个请求。

第二个问题:要生成helper方法,我们还是得在 /config/routes.rb 里定义这个路由,当然定义完路由之后,就会有相应的path和url的helper方法了。

 

 

因为这个showresults的操作,仍然是针对companies这个资源的,所以,我们可以在定义路由的时候,使用一个名字叫“member”的hashmap,这个hashmap 的key,就是自定义action的名字,hashmap的value,就是所使用的http的动作,如下所示:

map.resources  :companies , :member => { :showresults => :get }

 

hashmap 的value可以使用 :get, :put, :post, :delete, :any。如果使用了:any,那么可以用http的任何动作来发送这个请求。

 

 

定义完这个路由后,我们就可以使用helper方法了:

= link_to( "查看结果", showresults_company_path(@company) ,  :class=>"c")

如果不定义路由,那么你要写成:

= link_to("查看结果",{ :action=>"showresults", :id => @company.id },  :class=>"c")

 

显然,定义路由后的链接形式要简单,标准得多^_^

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值