- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在浏览Getting Started with Rails指南,并对第 6.7 节感到困惑。生成脚手架后,我在 Controller 中找到以下自动生成的 block :
def index
@posts = Post.all
respond_to do |format|
format.html # index.html.erb
format.json { render :json => @posts }
end
end
我想了解 respond_to block 的实际工作原理。 format 是什么类型的变量? .html 和 .json 是 format 对象的方法吗? documentation对于
ActionController::MimeResponds::ClassMethods::respond_to
没有回答问题。
最佳答案
我是 Ruby 新手,并且被同样的代码困住了。我所关注的部分比我在这里找到的一些答案更为基本。这可能对某人有帮助,也可能没有帮助。
respond_to
是父类(super class) ActionController
上的方法。do
到 end
,以 |format|
作为该 block 的参数。format
参数中。http://api.rubyonrails.org/v4.1/classes/ActionController/Responder.html
Responder
不包含 .html
或 .json
的方法,但我们无论如何都会调用这些方法!这部分让我感到困惑。method_missing
的功能。如果您调用不存在的方法(例如 json
或 html
),Ruby 会调用 method_missing
方法。http://ruby-metaprogramming.rubylearning.com/html/ruby_metaprogramming_2.html
Responder
类使用其 method_missing
作为一种注册。当我们调用“json”时,我们告诉它通过序列化为 json 来响应带有 .json 扩展名的请求。我们需要不带参数调用 html
来告诉它以默认方式(使用约定和 View )处理 .html 请求。可以这样写(使用类似 JS 的伪代码):
// get an instance to a responder from the base class
var format = get_responder()
// register html to render in the default way
// (by way of the views and conventions)
format.register('html')
// register json as well. the argument to .json is the second
// argument to method_missing ('json' is the first), which contains
// optional ways to configure the response. In this case, serialize as json.
format.register('json', renderOptions)
这部分让我很困惑。我仍然觉得它不直观。 Ruby 似乎经常使用这种技术。整个类(responder
)成为方法实现。为了利用 method_missing
,我们需要该类的一个实例,因此我们必须传递一个回调,并在其中传递类似方法的对象。对于一个已经用类 C 语言编写了 20 多年代码的人来说,这对我来说是非常落后和不直观的。并不是说它不好!但这是很多具有这种背景的人需要了解的事情,我认为这可能就是OP所追求的。
附:请注意,在 RoR 4.2 中,respond_to
被提取到 responders 中。 gem 。
关于ruby-on-rails - rails : How does the respond_to block work?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9492362/
我正在通过railstutorial.org学习Rails,但我对一些事情感到困惑:在 this chapter作者告诉我们在控制台中使用 User 对象的 respond_to? 方法进行一些测试,
我可以在 irb 的主要对象中使用 respond_to?(): irb(main):001:0> def foo irb(main):002:1> "hi" irb(main):003:1> e
在所有其他方法中,它与 format.html 一起工作正常,但在这个与 format.js 的方法中,它更新 View 但可见 url 保持不变 respond_to do |format| f
我目前正在构建一个需要远程表单的应用程序,我发现我从来没有真正理解rails respond_to 的工作原理。 例如,我在 View 中有以下代码 true %> 我有一个名为 _home.j
我试过: 1.respond_to? "clone" # => true 1.clone # => TypeError: can't clone Fixnum
如果您有一个要测试其存在的属性列表,并且您有以下内容: before do @attr = Employee.new(name: "One", ema
我有一个模块定义了一个方法,如果它还没有被定义的话。 ActiveRecord 的属性就是这种情况,因为它们的 getter 和 setter 未定义为方法。 module B def creat
编辑:我使用的是 Ruby 2.0.0 版 我在文件 example.rb 中有以下代码 def say_hello puts 'hi' end puts respond_to?(:say_hel
与定义 respond_to? 相比,定义 respond_to_missing? 有什么意义?如果为某些类重新定义 respond_to? 会出什么问题? 最佳答案 没有respond_to_mis
假设我有一个 ArtcilesController使用如下创建操作。 def create @article = Article.new(params[:article]) respond_t
如果我想检查是否定义了具有给定名称的方法,最好使用respond_to?或defined?? 从效率的角度来看,使用defined?可能存在争议,因为defined?是内置关键字,而respond_t
我有一个使用 form_for 和 remote: true 设置的表单。 正如预期的那样,vocab Controller 中的相应更新操作将请求作为 JS 处理: Processing by V
我的 cart_controller 中有几个 Action 。我在/carts 中有 2 个 View :payment.html.erb 和 pay.html.erb def pay suc
我的 Rails 应用程序中创建 Controller 中的 respond_to block 在成功保存时没有重定向...我确信这是一个简单的解决方案,但我对 Rails 缺乏经验,这是我第一次遇到
我的 cart_controller 中有几个 Action 。我在/carts 中有 2 个 View :payment.html.erb 和 pay.html.erb def pay suc
我试图解决这个问题,但我需要帮助! 我正在使用rails 3和jquery,我包含rails.js并使用gem'jquery-rails'来创建它 - 但仍然;使用 $.ajax({url: self
我有一个评级 Controller ,其创建操作通过 Javascript 调用。我的评级文件夹中有一个 create.js 文件。我想为了调用 create.js 文件你需要这样的东西 respon
我的 Controller 中有这个方法: def index @hedge_fund_index_matrix = HedgeFundIndices.matrix @hedge_fu
最近我一直在尝试Rails,并且开始喜欢上respond_to。 在 PHP 中是否可以做这样的事情?,响应不同类型的请求。因此,即使禁用了 javascript,也很容易实现替代方法。 最佳答案 您
我目前正在尝试为收费表单编写功能测试,该表单通过 AJAX(jQuery) 加载到页面上。它从 charge_form 操作加载表单,该操作返回 Consult_form.js.erb View 。
我是一名优秀的程序员,十分优秀!