问题标签 [respond-with]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
ruby-on-rails - 如何在 Rails 3 中自定义 to_json 响应
我正在使用respond_with
并且一切都正确连接以正确获取数据。我想以 DRY 方式自定义返回的json
,xml
和foobar
格式,但我不知道如何使用有限的:only
and来实现:include
。当数据很简单时,这些很好,但是对于复杂的发现,它们达不到我想要的。
可以说我有一个has_many
图片的帖子
我想在响应中包含图像,这样我就可以这样做:
但我真的不想发送整个图像对象,只是 url。除此之外,我真的很希望能够做这样的事情(伪代码):
……但都是干的。在较旧的 Rails 项目中,我使用 XML 构建器来自定义输出,但在 json、xml、html 中复制它似乎不正确。我不得不想象 Rails 专家在 Rails 3 中添加了一些我没有意识到这种行为的东西。想法?
ruby-on-rails - 使用和测试 Rails ActionController 的 respond_with
提前为这个问题的冗长道歉。如果你能容忍我,我想你会发现它实际上很简单……鉴于我有限的 Rails 领域知识,我很难解释。
鉴于此评论在8 月 6 日的 ActionController 提交中:
我已经修改了一个非常基本的控制器来使用respond_with
。当 Rails 自动生成的测试尝试通过空params
来更新和创建方法时,除了 2 个规范失败之外,一切似乎都运行良好。我可以通过简单的 if save/else 来纠正这种行为,但我正在尝试理解这个“新”功能。我认为默认规范可能以过时的方式编写。
从提交评论:“ Since the request is a POST, respond_with will check wether @people resource have errors or not. If it has errors, it will render the error object with unprocessable entity status (422).
”
因此,向下滚动到 POST 下的最后一个测试/规范(如下),我是否可以重写它以测试“不可处理的实体状态(422)”并通过,因此一切都很乐观?
我的控制器:
测试规格:
这是 clowns_controller_spec.rb 的一部分:
ruby-on-rails - 了解 Rails 3 的 respond_with
利用 ActionController 的新respond_with
方法...它如何确定当操作(保存)成功时要渲染什么,什么时候不成功?
我问是因为我试图让一个脚手架生成的规范(包括在下面)通过,只要我能理解它。该应用程序运行良好,但奇怪的是,当验证失败时,它似乎正在呈现/carriers
(至少浏览器的 URL 是这样说的)。然而,规范正在期待"new"
(我也是,就此而言),而是正在接收<"">
. 如果我更改规范以期望""
它仍然失败。
当它呈现/carriers
该页面时,会在验证失败的字段旁边显示 error_messages,正如人们所期望的那样。
任何熟悉的人都可以respond_with
看到这里发生了什么吗?
规范失败:
出现此错误:
ruby-on-rails - 如何通过覆盖诸如 respond_with 之类的方法来干掉 Rails 3 控制器?
我正在尝试为我的 Rails 3 应用程序创建 JSONP API。现在在我的控制器中,我有很多遵循这种模式的操作:
虽然这是按原样工作的,但我想通过不必:callback => params[:callback]
在每个操作的调用中重复对respond_with
. 我怎样才能做到这一点?
更新:我意识到我上面的代码很难看的一件事是,该:callback => params[:callback]
选项将传递给任何响应格式,而不仅仅是 JSON。下面的代码可能更正确:
我考虑过几种方法来解决这个问题,但我不知道如何使它们起作用:
- 覆盖
render
(可能在应用程序控制器中),以便它接受:jsonp
自动包含:callback => params[:callback]
参数的选项。这样我可以将上面的代码更改为以下代码,它会更短一些:
- 创建一个覆盖
to_json
以解决我的问题的响应者。这样我就可以忽略障碍,只需打电话respond_with(@users, :responder => 'MyResponder')
解决问题。或者,也许我可以使用plataformatec 的响应程序 gem将此代码包含在应用程序响应程序中,这样respond_with(@users)
就足够了。
ruby-on-rails-3 - Rails3 和 Respond_with 问题
我有一个应用程序,上面有两个用户界面。
第一个适用于普通用户,第二个适用于iphone用户。
一切正常,直到我在控制器中重构我的代码以使用respond_with声明而不是respond_to。
该应用程序仍然适用于 html 界面(:format => :html),但不适用于 iphone 界面(:format => :iphone)。
在 iphone 上,当我执行以下操作(:index、:new、:edit、:show)时,它可以工作。
但是当我这样做时(:create,:update,:destroy),我收到错误说找不到模板(例如create.iphone.haml)。
在我的控制器上,我有
然后例如,编辑和更新操作
事实上,我希望 :iphone 格式被处理为 :html 是......而不是通过调用 to_format 方法,因为它在doc中指定。
ruby-on-rails-3 - 覆盖 to_xml 以限制返回的字段
使用 ruby 1.9.2 和 rails 3,我想限制以 json 或 xml 访问记录时返回的字段(仅允许两种格式)。
这个非常有用的帖子向我介绍了respond_with,我在网上的某个地方发现了一个全面允许/拒绝某些字段的好方法是覆盖类的as_json或to_xml并设置:only或:except来限制字段。
例子:
这正是我正在寻找并适用于 json 的内容,但对于 xml“索引”(GET /widgets.xml),它以一个空的 Widget 数组响应。如果我删除 to_xml 覆盖,我会得到预期的结果。我做错了什么,和/或为什么 Widgets.to_xml 覆盖会影响 Array.to_xml 结果?
我可以通过使用解决这个问题
但不觉得这是一个很DRY的方法。
xml - Rails 控制器处理为 HTML 而不是 XML
我最近从 Ruby 1.8.6 和 Rails 2.3.4 升级到 Ruby 1.9 和 Rails 3.0.3。
我有以下控制器:
但是,当我调用“load_progress 方法”时,我得到以下信息:
开始为 127.0.0获取“/load_progress.xml ”。ChartController#load_progress 处理为HTML Completed 406 Not Acceptable in 251ms
我也尝试过将 respond_to 块更改为
但我得到了同样的回应。我已阅读有关新的 respond_with 格式的所有新 Rails 文档,但我似乎无法引出 XML 响应。我非常希望有人有一些想法。
ruby-on-rails-3 - rails 3 响应格式和版本控制在 Accept 标头中使用供应商 MIME 类型
前言:
我研究了如何对 API 进行版本控制,并找到了几种方法。我决定尝试peter williams 的建议并创建新的供应商 mime 类型来指定版本和格式。我找不到任何关于按照“铁轨方式”执行此操作的明确说明,因此我将多个地方的信息拼凑在一起。我能够让它工作,但是渲染器处理 Widget 数组与respond_with
.
基本步骤和问题:
我注册了 mime 类型并将 xml 和 json 中版本 1 的渲染器添加到 ApplicationController、渲染器调用to_myproj_v1_xml
和to_myproj_v1_json
模型中的方法。 respond_with(@widget)
工作正常,但respond_with(@widgets)
抛出HTTP/1.1 500 Internal Server Error
“模板丢失”的说法。
解决方法:
“模板丢失”意味着没有调用渲染并且不存在匹配的模板。偶然地,我发现它正在寻找一个类方法......所以我想出了下面的代码,但我对它并不满意。愚蠢主要存在于模型中并与xml = obj.to_myproj_v1_xml(obj)
模型中的重复有关。
我的问题是 - 有没有人以稍微干净的方式做过类似的事情?
-= 更新代码 =-
配置/初始化程序/mime_types.rb:
应用程序/控制器/application_controller.rb:
应用程序/模型/widget.rb:
应用程序/控制器/widgets_controller.rb:
配置/初始化程序/monkey_array.rb
更新:
找到了另一个感觉更好但仍然有点奇怪的解决方案(我仍然对猴子补丁并不完全满意),虽然可能还可以......基本上将构建响应数据从类方法to_myproj_v1_json
移动到 Array 上的猴子补丁。这样,当有一个 Widget 数组时,它会调用as_myproj_v1_json
每个 Widget 上的实例方法并以所需格式返回整个 Array。
一注:
- as_json 与 json 格式无关,只是创建一个哈希。将自定义格式添加到 as_myproj_v1_json (如果您不使用自定义 mime 类型,则添加 as_json 覆盖),然后 to_json 会将散列更改为 json 字符串。
我已将下面的代码更新为当前使用的代码,因此最初的问题可能没有意义。如果有人想要原样显示的原始问题和代码以及响应中的固定代码,我可以这样做。
ruby-on-rails - Rails 3:使用 respond_with 删除资源的正确方法
我正在尝试通过合并来干燥控制器respond_with
。当我这样做时,按照 Railscast 中的一些说明,我得到的东西大部分都在工作。问题在于删除资源后的重定向...应该重定向到people_url
...但尝试加载特定资源。
我找到的示例代码看起来像这样......但它试图加载它刚刚删除的资源失败:
将最后一行更改为respond_with(@people)
也不起作用(尽管我希望它会......)
经过大量挖掘并尽我所能理解事情后,我确实让事情正常工作(至少看起来如此。规范通过。应用程序功能):
那么,这是处理这个问题的正确方法吗?似乎在 response_with 背后的所有“魔法”都会知道它在删除后无法重定向到自己?我还认为这(7 种基本的 RESTful CRUD 方法之一)将是非常基本和基本的,因此会有很多示例......但除了那些建议代码不起作用的示例之外,我找不到很多示例我。
希望有人能帮助我理解这里发生的铁轨“魔法”,这样当我在路上遇到这种情况时,我不会感到惊讶。
json - 当 format=json 时响应重定向
我在控制器中遇到了一个奇怪的行为。他们似乎偶尔想要重定向而不是呈现 json 响应。
我认为它大部分时间都有效,但今天我收到了这个错误的通知:
NoMethodError:#<FavoritesController:0x00000006171dc0> 的未定义方法 `favorite_url'
参数哈希记录为:
特别奇怪,因为它似乎大部分时间都在工作......我已经更改了一些其他控制器以使用旧的 format.json { render :json => @object } 语法,但如果可能的话我想避免这种情况.
这怎么可能?