`
lzqustc
  • 浏览: 210342 次
  • 性别: Icon_minigender_1
  • 来自: 厦门
社区版块
存档分类
最新评论

自定义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")

 

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

 

<!--EndFragment-->
分享到:
评论

相关推荐

    自定义路由规则示例

    本文将深入探讨URL Routing的概念,并通过实例展示如何在.NET MVC中设置和使用自定义路由规则。 首先,URL Routing的核心在于`RouteTable.Routes`集合,它是所有路由规则的容器。在.NET MVC中,可以通过调用`...

    MVC3自定义路由系统实现伪静态

    ### MVC3自定义路由系统实现伪静态 #### 一、MVC3自定义路由系统概述 在MVC架构中,路由扮演着至关重要的角色。它决定了URL如何映射到控制器和动作上。默认情况下,ASP.NET MVC框架提供了一种简单的路由机制来处理...

    C# ASP.NET - 使用URL路由的简单范例

    创建自定义路由处理程序需要继承`IRouteHandler`接口并实现`GetHttpHandler`方法。 ```csharp public class CustomRouteHandler : IRouteHandler { public IHttpHandler GetHttpHandler(RequestContext ...

    ASP.NET MVC:自定义 Route 让你的 Url 更优雅.

    要自定义路由,你需要在`Global.asax.cs`文件的`RegisterRoutes(RouteCollection routes)`方法中添加自定义的路由规则。例如,你可以创建一个显示文章的URL,如下所示: ```csharp routes.MapRoute( ...

    PHP开发框架kohana3 自定义路由设置示例

    自定义路由允许开发者更灵活地设计URL结构,从而可以根据需要来设置特定的控制器和动作,以及传递参数。 首先,要设置自定义路由,需要在Kohana3的配置文件bootstrap.php中使用Route类提供的set方法来定义。在默认...

    routed-actions:创建自定义端点,路由到 WordPress 操作

    在WordPress开发中,创建自定义端点并路由到特定的操作是一项常见的需求,这使得我们可以根据URL执行特定的功能,而不需要加载完整的页面模板。标题“routed-actions:创建自定义端点,路由到 WordPress 操作”正是...

    ThinkPHP5路由完全指南

    10. **自定义路由解析器**:如果你有特殊需求,还可以自定义路由解析规则,增强路由功能。 通过学习和实践《ThinkPHP5路由完全指南》,开发者能够掌握如何灵活地定义和使用路由,从而提升项目开发的效率和代码质量...

    handler路由模式

    在ASP.NET中,我们可以创建一个`.ashx`文件来定义自定义的Handler,然后在路由配置中将URL映射到这个Handler。例如: ```csharp routes.MapPageRoute( "HandlerRoute", // 路由名称 "handler/{action}", // URL...

    mvc路由设置

    本篇将详细解释如何进行MVC路由设置,包括默认设置、静态设置、路由顺序以及自定义变量和可选参数。 ### 一、默认路由设置 默认路由是最基础的路由配置,它定义了URL的基本结构。以下是一个基本的默认路由示例: ...

    mvc3 路由调试

    在自定义路由时,可能会遇到路由冲突或未命中路由的问题。这时,可以通过检查`RouteCollection`来确定问题所在,或者在代码中添加日志记录,记录每个请求尝试匹配的路由。 **6. Web.config配置和路由** `Web.config...

    jsp自定义标签,structs2 JUNIT,structs2自定义拦截器

    Structs2的核心理念是通过Action和Result来处理用户请求和响应,而配置文件(如struts.xml)则定义了这些Action的路由和行为。Structs2的拦截器机制允许开发者在Action执行前后插入自定义逻辑,如日志记录、权限检查...

    ASP.NET 路由实现去除aspx后缀

    ASP.NET 是微软开发的一种用于构建动态网站、Web 应用和服务的框架。在 ASP.NET 中,路由是一项核心功能,它允许我们定义灵活的...在实际开发过程中,可以根据项目需求进一步自定义路由规则,以实现更多功能和灵活性。

    qeephp中开启路由美化功能

    ##### 示例:自定义路由规则 例如,我们需要定义一个规则用于下载项目文件,可以设置如下规则: ```yaml projects_download: pattern: "/projects/:name/download/:file" defaults: controller: "projects" ...

    自定义struts(实现拦截器)

    可以使用JUnit或其他测试框架来测试Action和拦截器,同时在浏览器中进行实际的请求测试,确保请求能够正确路由到Action,拦截器按预期工作,且返回正确的结果。 通过以上步骤,你就能成功地创建一个自定义的Struts...

    基于.Net Core的MVC框架YOYOFx.zip

    支持Session和自定义的Action拦截器;可替换的视图引擎,目前实现Razor视图引擎,加入了缓存机制;已移植到dotnet core 1.0 RTM版本接下来的工作:将项目的目录结构整合到dotnet core的项目文件中。 (已完成)完成...

    drf_serializer.zip

    1.django rest framwork 序列化的简单例子 2.APIView,GenericAPIView例子 3.ListModelMixin,CreateModelMixin,UpdateModelMixin,...4.action用法,自定义认证/过滤/排序的简单例子。 5.路由分发,自动分发。

    跟我学Laravel之路由

    路由可以直接绑定到控制器的Action上,并同样可以使用过滤器: ```php Route::get('user', array('before' =&gt; 'old', 'uses' =&gt; 'UserController@showProfile')); ``` ### 组路由 通过`Route::group()`批量定义...

Global site tag (gtag.js) - Google Analytics