Forum: Ruby on Rails How to use json in view file

Announcement (2017-05-07): www.ruby-forum.com is now read-only since I unfortunately do not have the time to support and maintain the forum any more. Please see rubyonrails.org/community and ruby-lang.org/en/community for other Rails- und Ruby-related community platforms.
929c5c32f7903a1154be888822c5ec20?d=identicon&s=25 mrbless (Guest)
on 2009-05-05 09:31
(Received via mailing list)
In my controller I have found all the movies like this
@budgets=Budget.find(:all).to_json

Now in the view file what i want to do is something like this
<script>
var datasets = {
        "usa": {
            label: "USA",
            data: [[1988, 483994], [1989, 479060], [1990, 457648],
[1991, 401949], [1992, 424705], [1993, 402375], [1994, 377867], [1995,
357382], [1996, 337946], [1997, 336185], [1998, 328611], [1999,
329421], [2000, 342172], [2001, 344932], [2002, 387303], [2003,
440813], [2004, 480451], [2005, 504638], [2006, 528692]]
        },
        "russia": {
            label: "Russia",
            data: [[1988, 218000], [1989, 203000], [1990, 171000],
[1992, 42500], [1993, 37600], [1994, 36600], [1995, 21700], [1996,
19200], [1997, 21300], [1998, 13600], [1999, 14000], [2000, 19100],
[2001, 21300], [2002, 23600], [2003, 25100], [2004, 26100], [2005,
31100], [2006, 34700]]
        }
}
</script>


How to do this as i have to plot this data.
Bce1d1b7c3ec7b577dcb42e254899e6b?d=identicon&s=25 Michael Schuerig (Guest)
on 2009-05-05 09:44
(Received via mailing list)
On Tuesday 05 May 2009, mrbless wrote:
> In my controller I have found all the movies like this
> @budgets=Budget.find(:all).to_json

If it's ok to issue a separate request for the data, have a look at

http://github.com/mschuerig/ruby_template_handler

One way or another, you'll have to do the conversion to the specific
format you need yourself.

Michael

>         },
>         "russia": {
>             label: "Russia",
>             data: [[1988, 218000], [1989, 203000], [1990, 171000],
> [1992, 42500], [1993, 37600], [1994, 36600], [1995, 21700], [1996,
> 19200], [1997, 21300], [1998, 13600], [1999, 14000], [2000, 19100],
> [2001, 21300], [2002, 23600], [2003, 25100], [2004, 26100], [2005,
> 31100], [2006, 34700]]
>         }
> }
> </script>

--
Michael Schuerig
mailto:michael@schuerig.de
http://www.schuerig.de/michael/
54404bcac0f45bf1c8e8b827cd9bb709?d=identicon&s=25 7stud -- (7stud)
on 2009-05-05 13:49
mrbless wrote:
> In my controller I have found all the movies like this
> @budgets=Budget.find(:all).to_json
>
> Now in the view file what i want to do is something like this
> <script>
> var datasets = {
>         "usa": {
>             label: "USA",
>             data: [[1988, 483994], [1989, 479060], [1990, 457648],
> [1991, 401949], [1992, 424705], [1993, 402375], [1994, 377867], [1995,
> 357382], [1996, 337946], [1997, 336185], [1998, 328611], [1999,
> 329421], [2000, 342172], [2001, 344932], [2002, 387303], [2003,
> 440813], [2004, 480451], [2005, 504638], [2006, 528692]]
>         },
>         "russia": {
>             label: "Russia",
>             data: [[1988, 218000], [1989, 203000], [1990, 171000],
> [1992, 42500], [1993, 37600], [1994, 36600], [1995, 21700], [1996,
> 19200], [1997, 21300], [1998, 13600], [1999, 14000], [2000, 19100],
> [2001, 21300], [2002, 23600], [2003, 25100], [2004, 26100], [2005,
> 31100], [2006, 34700]]
>         }
> }
> </script>
>
>

What is the output if you write:

p @bugets

in the controller?
929c5c32f7903a1154be888822c5ec20?d=identicon&s=25 nirvana (Guest)
on 2009-05-05 15:35
(Received via mailing list)
=> [#<Budget id: 1, country: "usa", year: "2000", amount: 15000>,
#<Budget id: 2
, country: "usa", year: "2001", amount: 1564>, #<Budget id: 3,
country: "usa", y
ear: "2002", amount: 6463>, #<Budget id: 4, country: "usa", year:
"2003", amount
: 150002>, #<Budget id: 5, country: "usa", year: "2004", amount:
5000>, #<Budget
 id: 6, country: "usa", year: "2005", amount: 4150>, #<Budget id: 7,
country: "u
sa", year: "2006", amount: 100>, #<Budget id: 8, country: "germany",
year: "2000
", amount: 1000>, #<Budget id: 9, country: "germany", year: "2001",
amount: 1526
4>, #<Budget id: 10, country: "germany", year: "2002", amount: 64633>,
#<Budget
id: 11, country: "germany", year: "2003", amount: 1502>, #<Budget id:
12, countr
y: "germany", year: "2004", amount: 500>, #<Budget id: 13, country:
"germany", y
ear: "2005", amount: 450>, #<Budget id: 14, country: "germany", year:
"2006", am
ount: 10>, #<Budget id: 15, country: "britian", year: "2000", amount:
150>, #<Bu
dget id: 16, country: "britian", year: "2001", amount: 15064>,
#<Budget id: 17,
country: "britian", year: "2002", amount: 663>, #<Budget id: 18,
country: "briti
an", year: "2003", amount: 2002>, #<Budget id: 19, country: "britian",
year: "20
04", amount: 50000>, #<Budget id: 20, country: "britian", year:
"2005", amount:
4150>, #<Budget id: 21, country: "britian", year: "2006", amount:
1000>]
54404bcac0f45bf1c8e8b827cd9bb709?d=identicon&s=25 7stud -- (7stud)
on 2009-05-05 18:02
nirvana wrote:
> => [#<Budget id: 1, country: "usa", year: "2000", amount: 15000>,
> #<Budget id: 2
> , country: "usa", year: "2001", amount: 1564>, #<Budget id: 3,
> country: "usa", y
> ear: "2002", amount: 6463>, #<Budget id: 4, country: "usa", year:
> "2003", amount
> : 150002>, #<Budget id: 5, country: "usa", year: "2004", amount:
> 5000>, #<Budget
>  id: 6, country: "usa", year: "2005", amount: 4150>, #<Budget id: 7,
> country: "u
> sa", year: "2006", amount: 100>, #<Budget id: 8, country: "germany",
> year: "2000
> ", amount: 1000>, #<Budget id: 9, country: "germany", year: "2001",
> amount: 1526
> 4>, #<Budget id: 10, country: "germany", year: "2002", amount: 64633>,
> #<Budget
> id: 11, country: "germany", year: "2003", amount: 1502>, #<Budget id:
> 12, countr
> y: "germany", year: "2004", amount: 500>, #<Budget id: 13, country:
> "germany", y
> ear: "2005", amount: 450>, #<Budget id: 14, country: "germany", year:
> "2006", am
> ount: 10>, #<Budget id: 15, country: "britian", year: "2000", amount:
> 150>, #<Bu
> dget id: 16, country: "britian", year: "2001", amount: 15064>,
> #<Budget id: 17,
> country: "britian", year: "2002", amount: 663>, #<Budget id: 18,
> country: "briti
> an", year: "2003", amount: 2002>, #<Budget id: 19, country: "britian",
> year: "20
> 04", amount: 50000>, #<Budget id: 20, country: "britian", year:
> "2005", amount:
> 4150>, #<Budget id: 21, country: "britian", year: "2006", amount:
> 1000>]


require 'pp'
#pretty printer

class Budget
  attr_reader :country, :year, :amount

  def initialize(c, y, a)
    @country, @year, @amount = c, y, a
  end
end

arr = [
  Budget.new("usa", "1989", 15000),
  Budget.new("usa", "1964", 20000),
  Budget.new("russia", "1999", 14000)
]

pp arr

--output:--
[#<Budget:0x8744c @amount=15000, @country="usa", @year="1989">,
 #<Budget:0x873fc @amount=20000, @country="usa", @year="1964">,
 #<Budget:0x873ac @amount=14000, @country="russia", @year="1999">]

hash = Hash.new {|hash, key| hash[key] = []}
#create a hash where acessing a non-existent key
#creates the key and assigns an empty array to it

arr.each do |budget|
  hash[budget.country] << [budget.year.to_i, budget.amount]
end

p hash

--output:--
{"usa"=>[[1989, 15000], [1964, 20000]], "russia"=>[[1999, 14000]]}

str = "var datasets = {\n"

hash.each do |key, val|
  fragment =<<ENDOFSTRING2
      "#{key}": {
        label: "#{key.upcase}",
        data: #{val.inspect}
      },
ENDOFSTRING2
  str << fragment
end
#inspect produces the same output as p var

result = str[0..-3] + "\n}"
#gets rid comma(and newline) after last
#element, then adds the closing parenthesis

puts result

--output:--
var datasets = {
      "usa": {
        label: "USA",
        data: [[1989, 15000], [1964, 20000]]
      },
      "russia": {
        label: "RUSSIA",
        data: [[1999, 14000]]
      }
}

You'll have to manipulate the label to get the exact format you need.

Of course, you wouldn't put all that code in a view.
929c5c32f7903a1154be888822c5ec20?d=identicon&s=25 nirvana (Guest)
on 2009-05-06 07:11
(Received via mailing list)
Thank you very much.
This topic is locked and can not be replied to.