Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 在循环中附加到JSON数组_Ruby On Rails_Ruby_Arrays_Json_Rest - Fatal编程技术网

Ruby on rails 在循环中附加到JSON数组

Ruby on rails 在循环中附加到JSON数组,ruby-on-rails,ruby,arrays,json,rest,Ruby On Rails,Ruby,Arrays,Json,Rest,需要提交json字符串的HTTP POST请求。 让所有RESTful部件正常工作,并正确验证。 如果我对数组中的元素进行硬编码,这是可行的。我想循环使用JSON字符串中的一个数组,即“附件数组” 循环看起来像: @days = Daily.all @days[0..11] do |dailys| #loop that builds json to post end #RESTful HTTP POST request 唯一的问题是,我不知道如何在JSON字符串中只为一个数组实现循环

需要提交json字符串的HTTP POST请求。 让所有RESTful部件正常工作,并正确验证。 如果我对数组中的元素进行硬编码,这是可行的。我想循环使用JSON字符串中的一个数组,即“附件数组”

循环看起来像:

@days = Daily.all
@days[0..11] do |dailys|
    #loop that builds json to post
end
#RESTful HTTP POST request
唯一的问题是,我不知道如何在JSON字符串中只为一个数组实现循环

到目前为止,我的代码用于测试HTTP POST

#!/usr/bin/ruby

require 'net/http'
require 'uri'
require 'json'
require 'jbuilder'

uri = URI.parse("<POST URL>")

header = {'Content-Type' => 'text/json'}

payload = {
    channel: "<channel>",
    username: "<username>",
    # Wish to loop through the "Attachments" Array
    attachments: [
        {
            param: "Text",
            text: "Text",
            pretext: "Optional Text",
            color: 'good',
            fields: [
            {
                Title: "Title field",
                value: "First Value",
                short: false
            },
            {
                title: "Field Title",
                value: "Field Value",
                short: true
            },
            {
                title: "Second Field Title",
                value: "Second Field Value",
                short: true
            }
            ]
        }
    ]
}


http = Net::HTTP.new(uri.host, uri.port)
http.use_ssl = true

req = Net::HTTP::Post.new(uri.request_uri, header)
req.body = payload.to_json

resp = http.request(req)
puts resp
#/usr/bin/ruby
需要“net/http”
需要“uri”
需要“json”
需要“jbuilder”
uri=uri.parse(“”)
header={'Content-Type'=>'text/json'}
有效载荷={
频道:“,
用户名:“”,
#希望在“附件”数组中循环
附件:[
{
参数:“文本”,
文本:“文本”,
借口:“可选文本”,
颜色:“好”,
字段:[
{
标题:“标题字段”,
值:“第一个值”,
短:错
},
{
标题:“字段标题”,
值:“字段值”,
短:对
},
{
标题:“第二个字段标题”,
值:“第二个字段值”,
短:对
}
]
}
]
}
http=Net::http.new(uri.host,uri.port)
http.use_ssl=true
req=Net::HTTP::Post.new(uri.request\u uri,头)
req.body=payload.to_json
resp=http.request(请求)
放置resp

你的代码在一堆日常对象中循环(尽管你在循环中把每一个对象都称为“dailys”,这令人困惑)。您并没有真正解释您想要做什么,但是如果您想要使用日常对象的一些属性创建一个json对象,您可以这样做

hash = Daily.find(:all, :limit => 12).map{|daily| {:foo => daily.bar, :chunky => daily.chicken}}.to_json
如果您提供了一些您希望从日常对象生成的json字符串的详细信息,那么我可以给您一些不那么愚蠢的代码,但方法是正确的:构建一个ruby数据结构,然后使用
将其转换为json,并将其转换为\u json

编辑:根据你的评论,我会这样做

hash = Daily.find(:all, :limit => 12, :order => "id desc").map{|daily| {param: daily.title, fields: [{title: "Task Completed?", value: daily.completed, short: true}]} }
json = hash.to_json
几点注意: 1)
Daily
是一个类,而不是对象(虽然在Ruby中类也是对象,但我认为在rails中最好将其称为类。

2) 通过
最后12个元素
我假定您指的是最近保存的记录:这就是:order选项的作用

谢谢你的建议。我希望做的是循环浏览每日对象的最后12个元素。然后使用来自Daily对象的数据填充“Attachments”数组。So->
附件:[{param:{dailies.title],字段:[{title:“任务完成?”,值:{daily.Completed},short:true}]}]