`
lzqustc
  • 浏览: 206472 次
  • 性别: 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-->
分享到:
评论

相关推荐

    基于.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中重写资源路由自定义URL的实现方法

    本文主要给大家介绍了关于Laravel中重写资源路由自定义URL的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍: 重写原因 近期在使用Laravel开发项目过程中,为了简化路由代码使用了...

    express-init:express项目初始化模板

    │ ├── action // 路由处理器目录 │ ├── helper // 自定义辅助类库 │ ├── filter // 过滤器目录 │ ├── services // 独立的公共服务目录 │ ├── viewModel // 视图模型目录 │ ├── model // ...

    Yii2框架控制器、路由、Url生成操作示例

    动作以action作为前缀,public访问修饰; 控制器ID 类名去后缀,全部转为小写,如果是驼峰命名多个单词转为中杠分割; 动作ID 去前缀,全部转为小写,如果是驼峰命名多个单词,转为中杠分割; 路由如何指向动作:...

    详解ASP.NET WEB API 之属性路由

    本篇文章主要介绍了ASP.NET WEB API 之属性路由,路由就是Web API如何把URI匹配到一个Action的描述。有兴趣的可以了解一下。

    ASP.NET Core中使用默认MVC路由的配置

    而对于自定义路由的支持当然也是没有问题的,这个功能应该是从MVC1.0版本就已经有这个功能。 先看看ASP.NET Core里面实现默认MVC路由的配置方式 通常情况下,在使用MVC项目的时候,默认的路由就足够了,就是常见的...

    Rails Routes中new、collection、member的区别浅析

    有时我们需要自定义路由,这时就要用到:on参数。:on参数有三种取值,分别为collection,member,new。  如果想添加一个member方式的路由,可以这样: 代码如下: resources :photos do  member do  get ‘preview...

    ASP.NET Core MVC学习教程之路由(Routing)

    基于约束的路由允许全局定义应用支持的URL格式,以及这些格式是怎样各自在给定的控制器中映射到指定的操作方法(Action)。当接受到一个请求时,路由引擎解析URL并将其匹配至一个定义URL格式,然后调用相关的控制器...

    OLD_node-sass

    因此您无需向磁盘写入任何内容Rota将需要确定它是自定义模式(带有S3中的文件)还是编译动态CSS的模式为播放器(geral.css)和编辑器(editor.css)编译CSS 为每个模式创建模板验证/模式API 作为此路由(类似于/ ...

    最新React架构全套高质量视频课程

    4. 如何添加自定义组件 5. 创建无状态组件 6. 学习render方法 7. 组件的属性 8. 组件的状态 9. 理解react中的this 10. 使用refs操作DOM元素 11. 子组件children属性 12. 组件的生命周期之创建 13. 组件的生命周期之...

    react最新教程(包含初级-中级-高级)

    如何添加自定义组件 5. 创建无状态组件 6. 学习render方法 7. 组件的属性 8. 组件的状态 9. 理解react中的this 10. 使用refs操作DOM元素 11. 子组件children属性 12. 组件的生命周期之创建 ...

    ASP.NET MVC 3高级编程

    9.4 自定义路由约束 231 9.5 web forms和路由机制 232 9.6 小结 233 第10章 nuget 235 10.1 nuget概述 235 10.2 nuget安装 236 10.3 以包的形式添加库 238 10.3.1 查找包 239 10.3.2 安装包 240 10.3.3 ...

    tesla-cli:Tesla.js 的命令行界面

    如果您的 url 遵循 domain.com/controller/action/:id 格式,则无需创建任何自定义路由,如果找到,它将自动加载控制器/视图,如果没有,则抛出 404。 灵活的模板 您可以从 EJS、Handlebars、Hogan、Jade 或 ...

    ASP.NET MVC 5 with Bootstrap and Knockout

    之前在一家公司里用过Knockout,是easyui 和 Knockout结合 的。下面的这本应该不错。...自定义组件和自定义绑定 保存购物车项 小结 第18章更新或删除购物车 购物车详情 购物车详情上的Knockout应用 完成购物车

    aspnet web api 超实用案例

     5、过滤: Web API 支持过滤, 包括总所周知的 [Authorize] 过滤标记, 可以为 Action 添加并插入自定义过滤, 实现认证、异常处理等;  6、查询聚合: 只要简单的返回 Iqueryable&lt;T&gt; , Web API 将会支持通过 ...

    SharedWebComponentsMef:演示使用MEF的基于插件的体系结构的原型

    其中clientName将用于路由(即clientName / controller / action / id) 使用MEF约定提取IController(内置MVC控制器协定)和IUrlResolver(将用作主应用程序与客户端实现之间的桥梁的自定义实现)的实现有一个控制...

    CodematicDemoMVC

    强大的URL重写(路由)机制: 兼容ASp.Net现有的技术: 开源: 通过把项目分成model|view|controller, 使得复杂项目更加容易维护 没有使用view state和服务器表单控件,可以更方便的控制 应用程序的行为 应用程序通过...

    C#进阶系列--WebApi

    2.1、自定义路由一:匹配到action ................................................................................................................. 11 2.2、自定义路由二 ....................................

    小北微信小程序教程之-- 上传视频

    考虑到在我们的程序中视频和照片都是存储在photo_item表中,通过type字段加以区分,因此我们仍然使用 /xcx/PhotoItemController这个控制器,但是create动作已经被上传图片使用了,无奈我们需要自定义一个action,就...

Global site tag (gtag.js) - Google Analytics