Tag: json

Rails 4 – 如何呈现JSON而不管请求的格式?

我想要一个Rails控制器(所有这些,实际上,它是一个API)来永远呈现JSON。 我不希望Rails返回“找不到路由”,或者尝试找不到HTML模板,或者返回406.我只是希望它自动并始终呈现JSON,例如从RABL或JBuilder视图。 这可能吗? 相关问题似乎有答案,具有上述缺点。

rails json使用gzip压缩响应

我有一个用rails编写的api,每个请求都响应一个JSON响应。 响应可能很大,所以我需要使用gzip压缩JSON响应。 想知道如何在rails控制器中执行此操作? 我添加了这条线 use Rack::Deflater 在config.ru中 我是否还应该改变呈现JSON的行? render :json => response.to_json() 另外,我如何检查响应是否是gzip格式.. ?? 我从终端做了一个curl请求,我只看到普通的普通JSON。

使用Rails 4.0进行自定义error handling

我正在使用Ruby 2.0和Rails 4.0构建Ruby on Rails api。 我的应用程序几乎只是一个JSON API,所以如果发生错误(500,404),我想捕获该错误并返回格式良好的JSON错误消息。 我试过这个并且还: rescue_from ActionController::RoutingError, :with => :error_render_method def error_render_method puts “HANDLING ERROR” render :json => { :errors => “Method not found.” }, :status => :not_found true end 在我的ApplicationController中。 这些都没有做到这一点(根本没有捕获例外)。 我的谷歌搜索显示这在3.1,3.2之间发生了很大的变化,我找不到任何关于如何在Rails 4.0中做到这一点的好文档。 有人知道吗? 编辑这是我进入404页面时的堆栈跟踪: Started GET “/testing” for 127.0.0.1 at 2013-08-21 09:50:42 -0400 ActionController::RoutingError (No route matches [GET] “/testing”): […]

Rails中to_json的默认值为:include

让我们说我有一个属于用户的模型Post。 要转换为json,我会做这样的事情 @reply.to_json(:include => {:user => {:only => [:email, :id]}, :only => [:title, :id]) 但是,我想为此设置一些默认值,所以我不必每次都指定: 我试图覆盖as_json来实现这一目标。 当我在User模型中添加as_json时,在我执行@ user.to_json时调用它,但是当用户包含在@ reply.to_json中时,忽略了用户的重写as_json。 我该如何工作? 谢谢

如何在HTML文档中安全地使用嵌入JSON?

在Rails 3.1应用程序中,如何安全地将一些JSON数据嵌入到HTML文档中? 假设我在控制器操作中有这个: @tags = [ {name:”tag1″, color:”green”}, {name:”I can do something bad here”, color:”red”} ] 这在相应的观点中: //<![CDATA[ var tags_list = ; // ]]> 然后我得到这个结果HTML: var tags_list = [ {"name":"tag1","color":"green"}, {"name":"</script><b>I can do something bad here</b>","color":"red"} ]; 这会在Chrome中触发SyntaxError: Unexpected token & 如果我使用删除Rails的默认HTML转义,则返回以下内容: var tags_list = [ {“name”:”tag1″,”color”:”green”}, {“name”:”I can do something bad here”,”color”:”red”} ]; 当然,它使用打破HTML文档。 […]

用于模型属性的JBuilder动态键

我正在尝试构建一个JSON文件,以通过变体代码访问产品的变体。 理想情况下,我可以调用variations.abcdefgh,基本上要求定义这样的结构: { “variations”:{ “abcdefgh”:{ “available”:true, “price”:”12.00″ }, “ijklmnop”:{ “available”:false, “price”:”25.00″ } } } 在products / show.json.jbuilder中做一些事情 json.variations @product.variations 给我格式化如下: { “variations”:[ { “available”:true, “price”:”12.00″, “product_code”:”abcdefgh” }, { “available”:true, “price”:”25.00″, “product_code”:”ijklmnop” } ] } 也许我的JavaScript可能会更好,但我想要一些基于product_code更容易访问的东西。 我得到的最接近的是 @product.variations.each do |variation| json.set! variation.product_code, variation end 但我还没有找到一个解决方案,将这些正确格式化的对象作为子项放入变体属性中。 有没有人遇到过类似的事情?

Sencha似乎不喜欢Rails的json

我有一个Rails控制器,它将一些模型呈现给json。 @events = Event.all respond_to do |format| format.html # index.html.erb format.xml { render :xml => @events } format.json { render :json => { :results => @events } } end 输出如下: { “results”: [ { “name”:”test”, “created_at”:”2011-03-23T13:32:57Z”, “latitude”:60.0, “location”:null, “updated_at”:”2011-04-14T16:38:54Z”, “id”:1, “longitude”:30.0, “takes_place_at”:”2011-03-23T13:32:00Z” }, { “name”:”x”, “created_at”:”2011-03-23T13:36:44Z”, “latitude”:60.0, “location”:null, “updated_at”:”2011-03-23T13:36:44Z”, “id”:2, “longitude”:30.0, “takes_place_at”:”2011-03-23T13:36:00Z” }, { “name”:”Gruempi”, […]

rails – json / xml请求的InvalidAuthenticityToken

出于某种原因,在使用json或xml时向我的应用程序发出请求时,我收到了InvalidAuthenticityToken。 我的理解是rails应该只为html或js请求提供真实性令牌,因此我不应该遇到这个错误。 到目前为止,我发现的唯一解决方案是禁用protect_from_forgery来执行我想通过API访问的任何操作,但出于明显的原因,这并不理想。 思考? def create respond_to do |format| format.html format.json{ render :json => Object.create(:user => @current_user, :foo => params[:foo], :bar => params[:bar]) } format.xml{ render :xml => Object.create(:user => @current_user, :foo => params[:foo], :bar => params[:bar]) } end end 每当我将请求传递给操作时,这就是我在日志中得到的内容: Processing FooController#create to json (for 127.0.0.1 at 2009-08-07 11:52:33) [POST] Parameters: {“foo”=>”1”, “api_key”=>”44a895ca30e95a3206f961fcd56011d364dff78e”, “bar”=>”202”} […]

来自控制器的include_root_in_json

我试图将结果返回到json不包含根的视图。 我不想在此模型的所有操作上设置此项,因此我尝试避免设置 ActiveRecord.Base.include_root_in_json = false 我希望我能做到 @task = Tasks.all @ task.include_root_in_json = false 要获得我需要的响应,但这似乎不起作用,返回’未定义的方法include_root_in_json = for# 有一个很好的方法吗?

将JavaScript变量传递给ruby-on-rails控制器

如何从JavaScript侦听器传递变量(id): Gmaps.map.callback = function() { … … google.maps.event.addListener(marker, ‘click’, function() { var id = this.currentMarker; alert(id); }); } } 到ruby-on-rails控制器中的实例变量(@foo) def create @foo = ??? … end 在视图(表单)中正确创建关系: @foo.id) do |f| %> 谢谢!