`
pure
  • 浏览: 353919 次
社区版块
存档分类
最新评论

Resource Controller插件使用

阅读更多
rails生成的控制器中,大部分的action代码都非常相似,每个Action中基本上都有如下代码:

respond_to do |format|
      format.html # new.html.erb
      format.xml  { render :xml => @post }
end


rails的宗旨是瘦Controller胖Model,现在Controller还不算瘦,要再让他瘦一点,那么可以借助Resource Controller的力量,使用这个插件可以减少大量Controller重复的代码。著名的电子商务程序spree http://spreecommerce.com/ 就使用了这个插件,让控制器变动更精巧。

安装Resource Controller有很多种方式。

在你的应用目录下执行

ruby  script/plugin install git://github.com/giraffesoft/resource_controller.git


或者下载下来后复制过去

git clone git://github.com/giraffesoft/resource_controller.git


这两种方式都要有Git环境的支持,后面我会写一篇Git使用的相关文章,现在你可以google一下相关资料。

如果实在懒得用Git那就去下载zip包吧

http://github.com/giraffesoft/resource_controller/downloads

在控制器中有两种方式使用,各有不同:
第一种继承 ResourceController::Base。
第二种在控制器中调用resource_controller方法。

可能你认为这么做失去了对原来Action的可控制性,那就错了,Resource Controller可以让你控制Action的生命周期(Before and After),下面的代码应该能看明白:

class ProjectsController < ResourceController::Base

    new_action.before do #new action请求之前做些什么?
      3.times { object.tasks.build }
    end

    create.after do #create action之后做些什么?
      object.creator = current_user
    end

  end



当然其它的action类似这样的处理方式。

Flash

class ProjectsController < ResourceController::Base
    create.flash "Can you believe how easy it is to use resource_controller?  Neither could I!"
  end


respond_to

增加响应类型
 class ProjectsController < ResourceController::Base
    create.wants.js { render :template => "show.rjs" }
  end


比如要让index方法响应输出xml数据,可以这么写:

index.wants.xml { render :xml => @posts }


或者重写

class ProjectsController < ResourceController::Base
    create.response do |wants|
      wants.html
      wants.js { render :template => "show.rjs" }
    end
  end


Resource Controller还有更多的特性,你可以参考

http://github.com/giraffesoft/resource_controller/tree/master

希望Resource Controller能为你带来便利。


分享到:
评论

相关推荐

    resource编辑插件

    使用"resource编辑插件",开发者可以直接在IDE中对这些资源进行编辑,无需频繁地在文件系统和代码之间切换,减少了出错的可能性,并简化了调试过程。 资源文件的管理在软件开发中至关重要,特别是对于大型项目而言...

    Magento 后台管理插件示例

    在Magento中,插件主要分为两种类型:模型(Model)、资源模型(Resource Model)、集合(Collection)、助手(Helper)、控制器(Controller)、块(Block)和视图(View)。这些组件协同工作,以实现特定功能。在...

    struts2 resource

    7. **插件体系**:Struts2拥有丰富的插件库,如Tiles插件用于布局管理,Struts2-dojo-plugin支持Dojo JavaScript库,Struts2-convention-plugin简化了配置,实现了约定优于配置。 8. **国际化...

    magento 后台订单显示图片插件

    此外,确保插件与当前使用的Magento版本兼容,因为不同版本之间可能存在API或结构差异。 安装完成后,商家在后台查看订单时,每条订单行下面将出现对应的商品图片,直观明了。这不仅提高了订单处理的效率,也为商家...

    angularJS(带分页插件)

    在使用过程中,要注意分页插件的文档和示例,确保正确地配置和使用。同时,保持代码结构清晰,遵循AngularJS的最佳实践,这将有助于项目的长期维护和扩展。 总之,AngularJS分页插件为开发人员提供了便利,使他们...

    cakephp very useful resource

    标题中的"very useful resource"表明我们将讨论一些关于CakePHP的极具价值的资源和知识点。 1. **安装与设置**: CakePHP提供了清晰的安装指南,包括使用Composer(PHP的依赖管理工具)进行自动安装,或者手动下载...

    连接池插件以及xml文件的配置方法和

    &lt;Resource name="jdbc/MyDataSource" auth="Container" type="javax.sql.DataSource" driverClassName="com.mysql.jdbc.Driver" url="jdbc:mysql://localhost:3306/mydb" username="myuser" password=...

    Ruby-DeclarativeAuthorization一个授权Rails插件在同一个地方使用声明式DSL用于指定授权规则

    在控制器中,你可以使用`load_and_authorize_resource`或`authorize!`方法来执行授权检查。 ### 六、扩展与自定义 除了基本的`can`和`cannot`方法,Declarative Authorization还提供了许多高级功能,如基于角色的...

    ssm+maven使用详细教程

    - 使用Maven Archetype插件创建一个新的Maven项目,选择合适的archetype模板。 - 在pom.xml文件中配置项目的基本信息,如groupId、artifactId、version,以及项目依赖。 3. SSM框架介绍: - Spring:提供依赖...

    RCP_Plug-in开发自学教程

    2. **国际化**:使用资源包(Resource Bundle)实现插件的多语言支持。 3. **持久化**:利用Preference Service保存用户配置,实现状态的持久化。 4. **工作流和事务**:使用Job API处理后台任务,Transaction ...

    struts2_rest整合完整例子

    Struts2的Restful插件提供了这种支持,它允许我们使用动词和路径来定义Action,例如`/{resource}/{id}`。 **整合步骤** 1. **添加依赖**:首先,需要将Struts2的REST插件及其依赖添加到项目中,这里的jar包就起到了...

    Kubernetes完整技术手册.pdf

    Kubernetes 201 是一个中级别的 Kubernetes 教程,涵盖了 Kubernetes 的高级概念、网络策略、Ingress Controller、存储插件等方面。 5. Kubernetes 集群 Kubernetes 集群是指多个节点组成的集群,每个节点可以...

    resource of ssh

    7. **测试与调试**:SSH框架支持单元测试和集成测试,例如使用JUnit进行服务层的单元测试,使用Mockito模拟依赖对象,而Struts的Action可以通过Struts2的TestNG插件进行集成测试。这些测试工具能确保代码质量,及时...

    laravel的接口开发

    - 使用`Route::apiResource`快速定义一组RESTful路由,例如`Route::apiResource('users', 'UserController');`,这会自动为`UserController`中的对应方法注册路由。 2. **控制器** - Laravel 的控制器用于处理...

    使用springmvc整合ajax请求demo代码示例

    5. **使用ModelAndView或者ResponseEntity**:如果你需要在Controller中返回视图和数据,可以使用`ModelAndView`类或者`ResponseEntity`类。`ModelAndView`适用于传统的视图渲染,而`ResponseEntity`则更加灵活,...

    Laravel开发-laravel-slider-pro

    php artisan make:controller SlideController --resource ``` 接着,打开生成的 `app/Http/Controllers/SlideController.php` 文件,根据 `laravel-slider-pro` 的文档修改控制器方法以适应插件的需求。 为了在...

    struts2架包

    Struts2是一款强大的Java web开发框架,它基于MVC(Model-View-Controller)设计模式,为开发者提供了构建可维护性、可扩展性极高的Web应用程序的工具和平台。Struts2的核心是Action,它是业务逻辑处理的主要载体,...

    things.zip

    这个压缩包主要涉及了.NET Framework框架下的MVC(Model-View-Controller)设计模式,并且使用了C#语言来处理事务(事物处理)操作。此外,描述中提到了vue-resource,这表明在前端部分可能采用了Vue.js框架进行数据...

    struts-2.3.1.2-all 下

    7. **插件和集成**:Struts 2支持各种插件,如Tiles插件用于布局管理,Struts2 Dojo插件用于与Dojo JavaScript库集成,以及Struts2 jQuery插件与jQuery库的集成,提供丰富的AJAX功能。 8. **异常处理**:Struts 2...

    119、自定义文件上传的操作1

    当在类上使用`ApiResource`注解时,Symfony 的 API Platform 扩展会自动为该类生成默认的API操作,包括集合操作(如GET用于获取资源列表)和单项操作(如GET用于获取单个资源)。集合操作的GET和单项操作的GET是...

Global site tag (gtag.js) - Google Analytics