- 浏览: 2690709 次
- 性别:
- 来自: 北京
-
文章分类
最新评论
-
80后的童年2:
深入浅出MongoDB应用实战开发网盘地址:https://p ...
MongoDB入门教程 -
shliujing:
楼主在不是精通java和php的前提下,请不要妄下结论。
PHP、CakePHP哪凉快哪呆着去 -
安静听歌:
希望可以一给一点点注释
MySQL存储过程之代码块、条件控制、迭代 -
qq287767957:
PHP是全宇宙最强的语言!
PHP、CakePHP哪凉快哪呆着去 -
rryymmoK:
深入浅出MongoDB应用实战开发百度网盘下载:链接:http ...
MongoDB入门教程
Rails从HTTP Accept header得到客户端需要的response format信息
默认的MIME types见mime_type.rb:
我们可以在environment.rb里注册自己的MIME type:
看看源码mime_responds.rb:
我们看到,respond_to方法调用responder.send(type),如format.js,但是Responder类没有js方法,所以调用了method_missing方法
method_missing调用了custom方法,custom则eval了response.content_type的设置,然后block.call
最后调用responder.respond,@responses[priority].call调用了content_type的设置以及参数给的block
render_to_string
默认的MIME types见mime_type.rb:
ALL = Type.new "*/*", :all TEXT = Type.new "text/plain", :text HTML = Type.new "text/html", :html, %w( application/xhtml+xml ) JS = Type.new "text/javascript", :js, %w( application/javascript application/x-javascript ) ICS = Type.new "text/calendar", :ics CSV = Type.new "text/csv", :csv XML = Type.new "application/xml", :xml, %w( text/xml application/x-xml ) RSS = Type.new "application/rss+xml", :rss ATOM = Type.new "application/atom+xml", :atom YAML = Type.new "application/x-yaml", :yaml, %w( text/yaml ) JSON = Type.new "application/json", :json, %w( text/x-json ) SET = [ ALL, TEXT, HTML, JS, ICS, XML, RSS, ATOM, YAML, JSON ] def register(string, symbol, synonyms = []) Mime.send :const_set, symbol.to_s.upcase, Type.new(string, symbol, synonyms) SET << Mime.send(:const_get, symbol.to_s.upcase) LOOKUP[string] = EXTENSION_LOOKUP[symbol.to_s] = SET.last end
我们可以在environment.rb里注册自己的MIME type:
Mime::Type.register "image/jpg", :jpg
看看源码mime_responds.rb:
module ActionController module MimeResponds def self.included(base) base.send(:include, ActionController::MimeResponds::InstanceMethods) end module InstanceMethods def respond_to(*types, &block) raise ArgumentError, "respond_to takes either types or a block, never both" unless types.any? ^ block block ||= lambda { |responder| types.each { |type| responder.send(type) } } responder = Responder.new(block.binding) block.call(responder) responder.respond end end class Responder def initialize(block_binding) @block_binding = block_binding @mime_type_priority = eval( "(params[:format] && Mime::EXTENSION_LOOKUP[params[:format]]) ? " + "[ Mime::EXTENSION_LOOKUP[params[:format]] ] : request.accepts", block_binding ) @order = [] @responses = {} end def custom(mime_type, &block) mime_type = mime_type.is_a?(Mime::Type) ? mime_type : Mime::Type.lookup(mime_type.to_s) @order << mime_type if block_given? @responses[mime_type] = Proc.new do eval "response.content_type = '#{mime_type.to_s}'", @block_binding block.call end else if source = DEFAULT_BLOCKS[mime_type.to_sym] @responses[mime_type] = eval(source, @block_binding) else raise ActionController::RenderError, "Expected a block but none was given for custom mime handler #{mime_type}" end end end def method_missing(symbol, &block) mime_constant = symbol.to_s.upcase if Mime::SET.include?(Mime.const_get(mime_constant)) custom(Mime.const_get(mime_constant), &block) else super end end def respond for priority in @mime_type_priority if priority == Mime::ALL @responses[@order.first].call return else if priority === @order @responses[priority].call return end end end if @order.include?(Mime::ALL) @responses[Mime::ALL].call else eval 'render(:nothing => true, :status => "406 Not Acceptable")', @block_binding end end end end end
我们看到,respond_to方法调用responder.send(type),如format.js,但是Responder类没有js方法,所以调用了method_missing方法
method_missing调用了custom方法,custom则eval了response.content_type的设置,然后block.call
最后调用responder.respond,@responses[priority].call调用了content_type的设置以及参数给的block
评论
3 楼
yNoooo
2007-06-27
太帅了,谢谢gigix
2 楼
gigix
2007-06-27
yNoooo 写道
代码太多了,看得头大,很想问问hideto,怎么样在controller里面取得view里面的内容呢,比如def a end
对应view里面a.rhtml,在a里面要怎么样取到a.rhtml的生成后的html内容
对应view里面a.rhtml,在a里面要怎么样取到a.rhtml的生成后的html内容
render_to_string
1 楼
yNoooo
2007-06-27
代码太多了,看得头大,很想问问hideto,怎么样在controller里面取得view里面的内容呢,比如def a end
对应view里面a.rhtml,在a里面要怎么样取到a.rhtml的生成后的html内容
对应view里面a.rhtml,在a里面要怎么样取到a.rhtml的生成后的html内容
发表评论
-
用了TextMate才知道什么叫神级Editor
2011-03-09 04:51 58020一直用Eclipse作为开发Ruby和Java项目的IDE,但 ... -
Ruby使用OAuth登录新浪微博和豆瓣
2011-01-09 12:49 4495首先需要安装oauth这个gem包 gem install ... -
使用Passenger+nginx部署Rails
2010-12-28 15:12 50551. Install Passender gem instal ... -
markItUp+rdiscount搭建Rails下可视化Markdown编辑器
2010-12-21 17:48 5491markItUp是基于jQuery的可视化编辑器,支持Html ... -
Rails3 and MongoDB Quick Guide
2010-12-10 14:13 2773Install MongoDB Download: http: ... -
基于ruby-protobuf的rpc示例
2009-08-11 11:51 41671, 安装ruby-protobuf gem instal ... -
Ruby导出xls和csv的utf-8问题的解决
2009-02-04 15:05 6879数据库数据为utf-8格式,包括中文和拉丁文等等 导出文件xl ... -
URL/HTML/JavaScript的encode/escape
2009-01-04 13:03 9373最近经常被URL、HTML、JavaScript的encode ... -
各种排序的Ruby实现
2008-11-27 14:51 4020Θ(n^2) 1, Bubble sort def bu ... -
12月5日北京RoR活动!
2008-11-26 18:38 3029又是一年过去了,Rails在国内的发展势态良好,很多使用RoR ... -
Rails程序开发的最大问题是代码规范
2008-08-28 11:56 5657使用Rails开发大型复杂B2B应用一年了,这个项目目前开发人 ... -
Web开发大全:ROR版——推荐序
2008-07-09 00:39 2438来自http://www.beyondrails.com/bl ... -
深入ActionMailer,使用Sendmail发邮件
2008-07-03 11:41 3408来自: http://www.beyondrails.com/ ... -
Rails里如何结合ExceptionNotification配置gmail账户发邮件
2008-06-19 19:56 31241,安装ExceptionNotification rub ... -
使用coderay和railscasts样式进行代码高亮
2008-06-17 00:16 2414CodeRay是一个语法高亮的Ruby库,效率很不错。 Cod ... -
Capistrano试用
2008-06-16 19:05 19741,客户端机器安装Capistrano gem insta ... -
lighttpd真垃圾啊
2008-06-04 18:38 2562使用lighttpd+fcgi跑Rails程序,文件上传会si ... -
将gem变成plugin
2008-06-04 11:27 1826有什么样的需求就有什么样的对策 当vhost上的帐号没有ge ... -
在Rails里使用ReCaptcha添加验证码
2008-06-03 15:51 42891,去http://recaptcha.net/sign up ... -
Rails里给文件上传添加progress_bar
2008-05-27 17:00 2113文件上传很慢时,UI没有什么用户提示,这样让人很费解,所以我们 ...
相关推荐
持续移动且不破坏事物 :factory: :building_construction: :construction: :construction_worker: 正在建设中-请稍后再回来!
对Rails的扩展,以允许使用绕道而行,返回简单的工作流浏览器导航。 特征 将您的“ link_to”行切换为“ detour_to”,并将您的控制器“ redirect_to”切换为“ back_or_redirect_to”,以允许用户从其来访者返回。 ...
概述 ...Rails 3:添加初始值设定项: mime_version.rb require 'mime_version' Rails.application.config.middleware.use MimeVersion do end 在控制器或视图或模型中:您可以使用ENV['version'
:dog_face: MiAudota :cat_face: 该应用程序显示可从用户最近的庇护所获取的动物,并允许将其应用到收养过程中,从而完成一份调查表,... Ruby on Rails API; PostgreSQL; Heroku。执照版权所有:copyright:2019, 。
世界风java源码100DaysofCode_R1Log 登录以记录我前 100 天的代码挑战。 总之 可以公平地说,我在这 100 天里取得的大部分成就都是通过承诺挑战和投入工作而实现的,尽我所能在工作和孩子的承诺之间做出贡献。 #100...
Rails::API 移除了 ActionView 和其他一些渲染功能,不关心Web前端的开发者可更容易、快速地开发应用程序,因此运行速度比正常的 Rails 应用程序要快。 Rails::API 可以用来创建只提供API服务(API-Only)的 Rails ...
Rails管理员状态机 主存储库已移至gitlab,所有新代码将在其中: 从rails_admin正确管理状态 允许从Rails Admin轻松地将state_machine事件发送到模型,包括对ActiveRecord \ Mongoid和自定义状态字段名称的支持以及...
允许您使用为Rails应用程序的前端供电。 是将前端工具像Ruby一样进行编程,纯属喜悦! :smiling_face_with_heart-eyes: 或在运行的检查。 产品特点 :high_voltage: :light_bulb: 即时服务器启动 :high_voltage: ...
SEO 和 Ruby On Rails 由的SEO代理制作的示例应用程序,用于将Rails设置为SEO友好。教程您可以在找到教程,或在。安装 git clone git@github....
word分词器java源码 IMAX.im 功能 依附于 Douban API 创建电影信息库; 上传资源的时候自动解析 Ed2k, Torrent 的信息; 国内在线视频网站播放地址解析; Retina Display 支持; Apple TV API for @盒子大师 系统需求...
介绍插件,用于对记录进行排序(使用 gem)安装要启用rails_admin_acts_as_list,请将以下内容添加到您的Gemfile : gem 'rails_admin_acts_as_list'gem 'rails_admin' 重要提示: rails_admin_acts_as_list之前必须...
Rails的服务器定时响应头 带来Ruby on Rails服务器端性能指标 :chart_increasing: 通过server_timing gem访问Chrome的开发者工具(以及其他支持浏览器)。 生产安全:trade_mark:。 指标是从 gem收集的。 不需要帐户...
Ruby on Rails,简称Rails,是基于Ruby语言的开源Web应用框架,它遵循MVC(Model-View-Controller)架构模式,旨在使Web开发更高效、更简洁。本资源"For-Rails-Beginners"显然是为那些希望入门Ruby on Rails的初学者...
Rails Admin内容生成器 使用创建内容的简单方法。 预习 示范 要求 依存关系 MiniMagick 支持的ORM ActiveRecord 支持的资产插件 CarrierWave 安装 使用rails <5和TurboLink <5进行测试 将此行添加到您的...
最后,可能还会讨论到性能优化,如使用缓存策略(如Rails的ActionCache和PageCache)来减少数据库查询,提高报告的加载速度。 总的来说,"Ruby_full: RoR_Full_29 :: Ruby_reports"这个资源包涵盖了Ruby on Rails...
安装要启用rails_admin_history_rollback ,请将以下内容添加到您的Gemfile确保将其添加到rails_admin之后: gem 'rails_admin'gem 'rails_admin_history_rollback' 不用说,此插件还需要paper_trail gem。...
image_optim_rails 使用image_optim gem优化rails图像资产。 在文件中可以找到获取二进制文件的选项和说明。安装添加到您的Gemfile : gem 'image_optim_rails' 使用 : gem 'image_optim_rails'gem 'image_optim_...
护林员探索Ruby on Rails API的路由和路径| Rails Ranger是之上的薄薄一层,它为您提供了一个自以为是的界面,以查询使用Ruby on Rails构建的API。主要特点遵循Ruby on Rails路由约定的URL构建在前端和API之间交换...
如何设置JWT 在应用程序的根目录中创建一个Procfile.dev并向其中添加以下行。 webpacker: ./bin/webpack-... ActionController::API include ::ActionController::Serialization respond_to :jsonend将以下gem添加到j
rails credentials:edit 并粘贴以下内容: aliyun : access_key_id : a secret_access_key : b secret_key_base : c wechat_appid : d wechat_secret : e wechat_token : f wechat_encoding_aes_key : g 迁移...