相关疑难解决方法(0)

如何在Rails中构建由多个模型组成的JSON响应

首先,期望的结果

我有UserItem模特.我想构建一个如下所示的JSON响应:

{
  "user":
    {"username":"Bob!","foo":"whatever","bar":"hello!"},

  "items": [
    {"id":1, "name":"one", "zim":"planet", "gir":"earth"},
    {"id":2, "name":"two", "zim":"planet", "gir":"mars"}
  ]
}
Run Code Online (Sandbox Code Playgroud)

但是,我UserItem模型有更多的属性而不仅仅是那些.我找到了一种方法让它工作,但要注意,它不漂亮......请帮助......

更新

下一节包含原始问题.最后一节显示了新的解决方案.


我的黑客

home_controller.rb

class HomeController < ApplicationController

  def observe
    respond_to do |format|
      format.js { render :json => Observation.new(current_user, @items).to_json }
    end
  end

end
Run Code Online (Sandbox Code Playgroud)

observation.rb

# NOTE: this is not a subclass of ActiveRecord::Base
# this class just serves as a container to aggregate all "observable" objects
class Observation
  attr_accessor :user, :items …
Run Code Online (Sandbox Code Playgroud)

activerecord json ruby-on-rails

11
推荐指数
1
解决办法
1万
查看次数

通过Ruby发送HTTP post请求

我对ruby和尝试一些基本的东西都很新.当我使用以下命令向服务器发送HTTP请求时:

curl -v -H "Content-Type: application/json" -X GET -d "{"myrequest":"myTest","reqid":"44","data":{"name":"test"}}" localhost:8099
Run Code Online (Sandbox Code Playgroud)

我的服务器将JSON数据视为"{myrequest:myTest,reqid:44,data:{name:test}}"

但是当我使用以下ruby代码发送请求时:

require 'net/http'

@host = 'localhost'
@port = '8099'

@path = "/posts"

@body = ActiveSupport::JSON.encode({
    :bbrequest => "BBTest", 
    :reqid => "44", 
    :data => 
    {
        :name => "test"
    }
})

request = Net::HTTP::Post.new(@path, initheader = {'Content-Type' =>'application/json'})
request.body = @body
response = Net::HTTP.new(@host, @port).start {|http| http.request(request) }
puts "Response #{response.code} #{response.message}: #{response.body}"
Run Code Online (Sandbox Code Playgroud)

它将其视为"{\"bbrequest \":\"BBTest \",\"reqid \":\"44 \",\"data \":{\"name \":\"test \"}} "并且服务器无法解析它.也许我需要设置一些额外的选项来从Ruby发送请求以排除那些额外的字符?

你能帮忙吗?提前致谢.

ruby ruby-on-rails ruby-on-rails-3

10
推荐指数
1
解决办法
8775
查看次数

如何在rails3中自定义to_json方法?

我想将一个Place对象数组转换为json,我一直这样做:

var places = <%= @places.to_json.html_safe %>;
Run Code Online (Sandbox Code Playgroud)

唯一的问题是@places数组中的每个位置都有一个未包含的关联标记列表.我正在使用acts_as_taggable_on gem来处理标签,所以要获取一个地方的标签列表,我需要说place.tag_list.

我需要做些什么来为javascript数组中的每个位置包含tag_list?我想我需要编写自己的to_json方法,但我不知道如何.

编辑

事实证明,这比我意识到的要容易.我能够这样说:

var places = <%= @places.to_json(:include => :tags).html_safe %>
Run Code Online (Sandbox Code Playgroud)

唯一的问题是,这包含有关每个标签的更多信息,而不是我真正需要的.每个标签都有一个id和名称,我真正想要的只是一个带有标签名称的列表.

javascript json ruby-on-rails-3

5
推荐指数
1
解决办法
3003
查看次数

在to_json方法中Rails"错误的参数数量(1表示0)"

可能重复:
在Rails 2.3.5中覆盖to_json

LIB/responses.rb

module Responses
class Response
    def to_json
       JSON.pretty_generate(self)
    end
end

class ErrorResponse < Response
    def initialize(cause)
        self[:type]="Error"
        self[:casue]=cause

    end
end
class DataResponse < Response
    attr_accessor :data

end
end
Run Code Online (Sandbox Code Playgroud)

这由控制器使用:

 response=Responses::DataResponse.new
 response.data=someData

 render :json => response
Run Code Online (Sandbox Code Playgroud)

现在,我得到一个错误wrong number of arguments (1 for 0)lib/responses.rb:3:in to_json.为什么?没有参数传递给to_json隐式调用的render :json.那我的错误在哪里?

ruby json ruby-on-rails

4
推荐指数
1
解决办法
6542
查看次数

在模型数组上激活记录to_json\as_json

首先,我没有使用Rails.我正在使用Sinatra进行Active Record的这个项目.

我希望能够在我的Model类上覆盖to_json或as_json,并让它定义一些'default'选项.例如,我有以下内容:

class Vendor < ActiveRecord::Base
  def to_json(options = {})
    if options.empty?
      super :only => [:id, :name]
    else
      super options
    end
  end
end
Run Code Online (Sandbox Code Playgroud)

其中Vendor具有的属性多于id和name.在我的路线中,我有以下内容:

@vendors = Vendor.where({})
@vendors.to_json
Run Code Online (Sandbox Code Playgroud)

@vendors是一个Array供应商对象(显然).但是,返回的json不会调用我的to_json方法并返回所有模型属性.

我实际上没有选择修改路线,因为我实际上使用的是修改过的sinatra-rest gem(http://github.com/mikeycgto/sinatra-rest).

有关如何实现此功能的任何想法?我可以在我的sinatra-rest gem中做类似下面的事情,但这看起来很傻:

@PLURAL.collect! { |obj| obj.to_json }
Run Code Online (Sandbox Code Playgroud)

ruby activerecord activesupport sinatra

3
推荐指数
1
解决办法
3933
查看次数

ActiveRecord查询别名字段名称输出

假设我有一张桌子世界.

我在表格中有一个名为foo的字段.我想查询World表并选择foo,但我想在后续转换为JSON输出时将其别名为bar.

有没有办法为这一个ActiveRecord查询别名字段名称?不希望通过整个应用程序对字段进行别名.

ruby-on-rails

3
推荐指数
1
解决办法
8381
查看次数

如何将哈希转换为 JSON,且转换后的字符串不包含反斜杠

我正在使用 将哈希值转换为 JSON to_json,但转换后的字符串充满了反斜杠。如果我使用puts,它会显示正确的字符串,但如果我传入 a HTTP::NET request.body,则该字符串充满反斜杠。

data = {"a" => "b", "c" => "d", "e" => "f"}
http = Net::HTTP.new(uri.host, uri.port)
req = Net::HTTP::Post.new(uri.path, {'Content-Type' =>'application/json', 
          'Authorization' => "xyz")
req.body = data.to_json
res = http.request(req)
Run Code Online (Sandbox Code Playgroud)

req.body正在发送:

"{\"a\":\"b\",\"c\":\"d\",\"e\":\"f\"}"
Run Code Online (Sandbox Code Playgroud)

我的请求因此失败。

我需要将数据发送为

"{"a" => "b", "c" => "d", "e" => "f"}"
Run Code Online (Sandbox Code Playgroud)

在请求正文中。

ruby ruby-on-rails ruby-on-rails-5

2
推荐指数
1
解决办法
5989
查看次数