Forum: Ruby on Rails How to append the two hashes in ruby on rails

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.
Hema G. (Guest)
on 2008-11-25 07:50
(Received via mailing list)
Hi All,
            I need to add the hashes is there any way to add


actually my data is in the given format
data = [ {"first" => 1 ,"second" =>  2},
            {"first" => 2 ,"second" =>  3},
            {"first" => 3 ,"second" =>  4} ]

I want to acheive it through the loop So, I took 2 hashes as

result = Hash.new
data = Hash.new

for k in 1..4 do
  data = {"first"=>k , "second"=>k+1}
  result = result,data
end


in the above the result variable

 result = [[[[{}, [{"first"=>1, "second"=>2}]], [{"first"=>2,
"second"=>3}]], [{"first"=>3, "second"=>4}]], [{"first"=>4,
"second"=>5}]]

But my Output should be as
result =  [{"first"=>1, "second"=>2}, {"first"=>2, "second"=>3},
{"first"=>3, "second"=>4}, {"first"=>4, "second"=>5}]

I tried with the merge,update but those are updating or the changing
the existing the feilds.. the not appending

How can I achieve the output if any help you can save my day...
Thanks
napster (Guest)
on 2008-11-25 09:45
(Received via mailing list)
i thnk this url will help u try this

http://snippets.dzone.com/posts/show/1535
Maurice D. (Guest)
on 2008-11-25 11:15
Hema G. wrote:
> Hi All,
>             I need to add the hashes is there any way to add
>
>
> actually my data is in the given format
> data = [ {"first" => 1 ,"second" =>  2},
>             {"first" => 2 ,"second" =>  3},
>             {"first" => 3 ,"second" =>  4} ]
>
> I want to acheive it through the loop So,

Perhaps like this :

 data = []
 for k in 1..4 do
 data[k-1] = {"first"=>k , "second"=>k+1}
 end

HTH
Flower B. (Guest)
on 2008-11-25 12:08
(Received via mailing list)
* Hema <removed_email_address@domain.invalid> [2008-11-24 21:49:34 -0800]:

> I want to acheive it through the loop So, I took 2 hashes as
> in the above the result variable
>
>  result = [[[[{}, [{"first"=>1, "second"=>2}]], [{"first"=>2,
> "second"=>3}]], [{"first"=>3, "second"=>4}]], [{"first"=>4,
> "second"=>5}]]
>
> But my Output should be as
> result =  [{"first"=>1, "second"=>2}, {"first"=>2, "second"=>3},
> {"first"=>3, "second"=>4}, {"first"=>4, "second"=>5}]

(1..4).inject([]){|result,i| result << {"first" => i, "second" => i+1}}
napster (Guest)
on 2008-11-25 12:31
(Received via mailing list)
Hema, to be honest, I'm not really sure what exactly you want to
achieve, but maybe you can try this:

result = Array.new

for k in 1..4 do
  result << {"first" => k , "second"=> k + 1}
end


The result is:

[{"second"=>2, "first"=>1}, {"second"=>3, "first"=>2}, {"second"=>4,
"first"=>3}, {"second"=>5, "first"=>4}]



As far as I know there is no easy way to sort the elements of the
inner hashes, but that shouldn't raise any problem.

Let me know it this works for you.
Hema G. (Guest)
on 2008-11-26 08:53
(Received via mailing list)
Hi ,

   I need to acheive the result to be as

   result =  [{"first"=>1, "second"=>2}, {"first"=>2, "second"=>3},
{"first"=>3, "second"=>4}, {"first"=>4, "second"=>5}]

  since this hash is the  PDF::SimpleTable.data format

  the table data accepts the hash values with the keys as columns and
the values as the table rows
  In this case i have to create the report from the database records I
have the Array of employee objects with the fields
  I need to put them in table format so that first I have to make the
column names as the table column headings and then need to form a row
of values

 For example my 'employees' contains the employee object
 then, each object has to become one value in the hash


 data = Hash.new
 result = Hash.new
 for employees.each do |record|

 data = {"Sno" =>
record.sno,                                                       Here
i have one record
             "UserName" => record.username,
             "designation" => record.designation,
             "salary" => record.salary }

 result = data,result

 end


I want result should be in the following format
result = [{"Sno" => 1,"UserName" => "ppp","designation" =>
"se","salary" => 10000},{"Sno" => 2,"UserName" => "xxx","designation"
=> "se","salary" => 10000},{"Sno" => 3,"UserName" =>
"yyy","designation" => "se","salary" => 10000},{"Sno" => 4,"UserName"
=> "zzz","designation" => "se","salary" => 10000}]

then I could  replace the table data

table.data.replace result
table.render_on(pdf)

But I am not getting the required format? How to achieve that?
Hema G. (Guest)
on 2008-11-26 08:54
(Received via mailing list)
Hi ,

   I need to acheive the result to be as

   result =  [{"first"=>1, "second"=>2}, {"first"=>2, "second"=>3},
{"first"=>3, "second"=>4}, {"first"=>4, "second"=>5}]

  since this hash is the  PDF::SimpleTable.data format

  the table data accepts the hash values with the keys as columns and
the values as the table rows
  In this case i have to create the report from the database records I
have the Array of employee objects with the fields
  I need to put them in table format so that first I have to make the
column names as the table column headings and then need to form a row
of values

 For example my 'employees' contains the employee object
 then, each object has to become one value in the hash


 data = Hash.new
 result = Hash.new
 for employees.each do |record|

 data = {"Sno" =>
record.sno,                                                       Here
i have one record
             "UserName" => record.username,
             "designation" => record.designation,
             "salary" => record.salary }

 result = data,result

 end


I want result should be in the following format
result = [{"Sno" => 1,"UserName" => "ppp","designation" =>
"se","salary" => 10000},{"Sno" => 2,"UserName" => "xxx","designation"
=> "se","salary" => 10000},{"Sno" => 3,"UserName" =>
"yyy","designation" => "se","salary" => 10000},{"Sno" => 4,"UserName"
=> "zzz","designation" => "se","salary" => 10000}]

then I could  replace the table data

table.data.replace result
table.render_on(pdf)

But I am not getting the required format? How to achieve that?

On Nov 25, 2:15 pm, Francois Beuraud <rails-mailing-l...@andreas-
Pradeep G. (Guest)
on 2008-11-26 09:23
(Received via mailing list)
Think in terms of the domain. What you need is an array of hashes.
Each hash is a representation of your domain object (employee record)

employees.collect {|employee| employee.attributes}

Thats it.

If there are any particular attributes that you don't want, e.g.
created_at, then use something like

employees.collect {|employee| employee.attributes.except(:created_at)}
Hema G. (Guest)
on 2008-11-26 11:27
(Received via mailing list)
Means I can get the hashes as
Result = Hash.new
Result = employees.collect {|employee| employee.attributes}
then the result contails the array of hashes?
Hema G. (Guest)
on 2008-11-27 12:16
(Received via mailing list)
That's great it worked fine
But I have another problem,

please check the code

Fields = Array.new
Fields [0] = "sno"
Fields [1] = "username"
Fields [2] = "designation"
Fields [3] = "salary"
Fields [4] = "dob"
Fields [5] = "email"
Fields [6] = "doj"


These are the fields of the object 'Employee'

The Employees array contains of the set of employee objects...

I need to have the array of hashes as [{employee_record1},
{employee_record2}...... n records]

For this i tried as the...


result = []

for employee in Employees
res = {}
    for field in fields
      res << { field => employee.send(field)}
   end
result << res
end


But it is not working... Please Help me Thank You
Hema G. (Guest)
on 2008-11-27 12:17
(Received via mailing list)
That's great it worked fine
But I have another problem,

please check the code

Fields = Array.new
Fields [0] = "sno"
Fields [1] = "username"
Fields [2] = "designation"
Fields [3] = "salary"
Fields [4] = "dob"
Fields [5] = "email"
Fields [6] = "doj"


These are the fields of the object 'Employee'

The Employees array contains of the set of employee objects...

I need to have the array of hashes as [{employee_record1},
{employee_record2}...... n records]

For this i tried as the...


result = []

for employee in Employees
res = {}
    for field in fields
      res << { field => employee.send(field)}
   end
result << res
end


But it is not working... Please Help me Thank You
This topic is locked and can not be replied to.