`
qqdenghaigui
  • 浏览: 120472 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

respond_with in Rails 3

 
阅读更多

 

在Rails3的controller中,很明显的一个变化就是respond_to不见了,取而代之的是respond_with这个方法,那么这个新的方法有什么好处呢?下面是我的一次小小的初探经历。

  生成代码之后启动服务器,访问对应的url,我得到了一个这样的错误。

 

In order to use respond_with, first you need to declare the formats your controller respon

 程序告诉了我应该为action的返回类型做一个声明,不然rails不知道该返回哪种格式的数据,好吧,我在controller的类级别添加了如下声明

 

respond_to :html

 然后刷新浏览器,现在可以正常访问页面了。继续写代码。。。。

  突然,我觉得我的程序应该支持多种数据类型的返回,如支持xml, json等格式。这时我在浏览器中键入 /posts/1.xml ,于是我得到了这样一个错误。

 

This page contains the following errors:
error on line 1 at column 1: Extra content at the end of the document
Below is a rendering of the page up to the first error.

 为了修正它,我只需要在刚才添加的代码上多加上一个参数即可

 

respond_to :html, :xml, :json

 现在,我的这个controller中所有的action都支持这3种格式了,是不是比在rails2中的每个action中都写format.html, format.xml等方便多了。观众举手发问:“如果我只想在index中接受html格式,但在show中接受json格式怎么办?”,哈哈,Rails3也为我们想到了这个问题,respond_to方法可以和before_filter方法一样接受only和except方法,与此同时respond_with也接受block的书写方式,这样你就可以随心所欲的定制格式了。

  好,继续往下。如果你足够细心,你就会发现以前十几行代码量的create变的只有5行了。如下

 

def create
    @post = Post.new(params[:post])
    flash[:notice] = 'Post was successfully created.' if @post.save
    respond_with(@post)
end

 经过对比发现这主要是respond_with的功劳,它只用一行代码就担起了redirect_to(数据保存正确)和render(数据验证失败)的两个任务。当数据保存成功后,它自动跳转到@story对应的显示页面,当保存失败后,会自动render的@story的new页面。(同样,在updated中会分别对应着show和edit两个action) 到这,我彻底的又佩服了一次rails的进一步改进。可代码写着写着,问题又来了。

  现在我有这样一个controller,文件位于admin/post_controller.rb,它已经不是位于app/controllers的顶级目录了,问题就出在这。我还是用默认的代码去进行一系列操作,当数据保存成功后,它跳转到了hosts/posts/1这个链接,而不是对应的http://host/admin/posts/1,究其原因,是因为我们在create的代码中采用默认@post的路径,默认@story是对应story_path(@story)的,而我们想用的是admin_story_path(@story),幸好,rails也给我们留出了扩展。

 

# in create or update
respond_with(@post, :location => admin_post_url(@post))

  呵呵,代码还是那么简单。

分享到:
评论

相关推荐

    agile_web_development_with_rails_3rd_edition.9994652073.pdf

    《敏捷Web开发与Rails》第三版是一本深入探讨Ruby on Rails框架在敏捷软件开发方法论下的应用指南。本书由多位知名作者共同编写,包括Sam Ruby、Dave Thomas、David Heinemeier Hansson等,他们都是在Ruby社区内享有...

    factory_bot_rails:工厂机器人:heart_suit:Rails

    factory_bot_rails 用简单的定义语法替换了固定装置,支持多种构建策略(保存的实例,未保存的实例,属性哈希和存根对象),并且支持同一类的多个工厂( user , admin_user等),包括工厂继承。 从factory_girl_...

    Rails101_by_rails4.0

    《Rails101_by_rails4.0》是一本专注于Rails 4.0.0版本和Ruby 2.0.0版本的自学教程书籍,它定位于中文读者,旨在成为学习Rails框架的参考教材。Rails(Ruby on Rails)是一个采用Ruby语言编写的开源Web应用框架,它...

    themes_on_rails, 向 Rails 3/4/5 应用程序添加多个主题支持.zip

    themes_on_rails, 向 Rails 3/4/5 应用程序添加多个主题支持 ThemesOnRails 安装安装最简单的方法是使用 Bundler 。将这里 gem 添加到你的Gemfile:gem 'themes_on_rails'如果要对 liquid 模板使用

    to_xls-rails:将Rails ActiveRecord或Mongid数据导出到Excel文件

    这个简单的插件使您能够调用to_xls到Rails的数组集合。 数组元素支持对象:ActiveRecord,Mongid,哈希。 在您的Gemfile中: gem 'to_xls-rails' # Last officially released gem # gem "to_xls-rails", :git => ...

    jruby_on_rails

    3. **开发**:使用熟悉的 Rails 开发工具和命令,如 `rails generate` 生成模型、控制器等,以及 `rails console` 进行交互式测试。 4. **数据库配置**:JRuby on Rails 支持所有 JDBC 兼容的数据库,包括 MySQL、...

    rails_semantic_logger, Rails 语义记录器用语义记录器替换 Rails 缺省记录器.zip

    rails_semantic_logger, Rails 语义记录器用语义记录器替换 Rails 缺省记录器 Rails 语义记录器 语义记录器用语义记录器替代 Rails 缺省记录器。http://github.com/rocketjob/rails_semantic_logger文档有关完整文档...

    avatars_for_rails:用于管理头像的 Rails gem

    化身对于Rails开发 Avatars For Rails 是一个完整的解决方案,可为模型提供头像支持。 它包括一个数据库迁移和带有 jquery.fileupload 和 jquery.jcrop 的视图 它依赖于回形针和 imagemagick 安装 添加到您的 ...

    Ruby on Rails Guides v2 - Ruby on Rails 4.2.5

    ### Ruby on Rails Guides v2 - Ruby on Rails 4.2.5 #### 一、重要概念及基础假设 - **重要概念**:本指南旨在帮助读者深入理解Ruby on Rails(以下简称Rails)4.2.5版本的核心功能与最佳实践。 - **基础假设**:...

    material_design_lite-rails, 面向 Rails的材质设计 Lite.zip

    material_design_lite-rails, 面向 Rails的材质设计 Lite 材质设计 Lite,适用于 Rails !gemified设计 Lite 库材料的版本。安装添加到你的Rails的应用程序中,添加gem 'material_design_lite-rails', '~> 1.3'然

    shopping_card_rails-源码.rar

    3. **视图(Views)**:视图负责显示数据,通常包括商品列表、购物车页面和结算页面。Rails的 erb 模板语言使得在HTML中嵌入Ruby代码变得简单。 4. **数据库交互(ActiveRecord)**:Rails的ActiveRecord库负责与...

    Api-api_on_rails.zip

    Api-api_on_rails.zip,学习使用rubyonrails5/6构建api的最佳实践学习使用rubyonrails5/6构建api的最佳实践。本书的目的不仅仅是教你如何用rails构建api。目的还在于教您如何用rails构建可伸缩和可维护的api,这意味...

    awesome_rails_console, Rails 控制台增强使你的Rails 控制台更加出色.zip

    awesome_rails_console, Rails 控制台增强使你的Rails 控制台更加出色 使你的Rails 控制台非常出色这个 gem 是由使用pry生产,jazz_hands和 jazz_fingers的激发 was 。awesome_rails_console的优点是:减少 gem ...

    ruby_on_rails_创建一个博客项目.doc

    ruby_on_rails_创建一个博客项目.doc

    sinatra-respond_to:用于Sinatra中内置Web服务支持的response_to样式Rails块

    在Sinatra中提供对内置Web服务支持的response_to样式Rails块 功能/问题: 根据提供的内容处理内容类型的设置 自动可以调整XMLHttpRequests返回Javascript 根据HTTP_ACCEPT标头解析识别请求。 优先级的顺序是...

    JavaEye2.0_on_rails

    ### JavaEye2.0_on_rails:敏捷Web开发实践与Ruby on Rails的应用 #### 敏捷软件开发方法 - **背景**:传统软件工程方法在实际应用中面临着项目延期、成本超支以及软件质量不高的问题。为了克服这些挑战,业界提出...

    30_days_with_rails:存储库包含许多应用程序,例如filecabinate,twiter,pintrust等

    《30_days_with_rails:探索Rails应用的多样性》 在编程的世界里,Ruby on Rails(简称Rails)是一个备受开发者喜爱的开源Web开发框架。它以其MVC(模型-视图-控制器)架构、DRY(Don't Repeat Yourself)原则以及...

    ruby_on_rails安装部署指导手册

    ### Ruby on Rails 安装与部署知识要点 #### 一、前言 在进行 Ruby on Rails 的安装与部署过程中,我们需要关注几个核心方面:系统版本兼容性、软件依赖包的选择与安装、Ruby 语言环境的配置以及 Rails 应用的具体...

    pjax_rails, Rails的PJAX集成.zip

    pjax_rails, Rails的PJAX集成 用于 Rails 3.2 的 PJAX 通过资产管道将 wanstrath PJAX的Chris 集成到 Rails 3.2 中。要激活,请将它的添加到 app/assets/javascripts/application.j

Global site tag (gtag.js) - Google Analytics