Problem with array of hashes

Hi ,

I have created an array of hashes using

Model file class

Class A < ActiveRecord::Base

def fill_paths
paths = Array.new
    for file in @files
      path = {}
      path["a"] = file
      path["b"] = DATA2(assume data2 is valid)
      paths << path
    end
return paths
end

in controller class

@paths = A.fill_paths
for path in @paths
      puts path.a
end

I cant access path.a, which says
"undefined method 'a' for{"a"=>value1,"b"=>value2}:Hash
//value1, value2 are valid data

Please let me know whats wrong with this.

Hi ,

I have created an array of hashes using

Model file class

Class A < ActiveRecord::Base

def fill_paths
paths = Array.new
   for file in @files
     path = {}
     path["a"] = file
     path["b"] = DATA2(assume data2 is valid)
     paths << path
   end
return paths
end

in controller class

@paths = A.fill_paths
for path in @paths
     puts path.a
end

I cant access path.a, which says
"undefined method 'a' for{"a"=>value1,"b"=>value2}:Hash
//value1, value2 are valid data

path['a'] is the correct syntax for accessing hashes.

Jeremy W. wrote in post #1063195:

They are "class objects" - hashes are instances of Hash class ...

Jeremy W. wrote in post #1063195:

for file in @files
@paths = A.fill_paths

for path in @paths

 puts path.a

end

I cant access path.a, which says

"undefined method ‘a’ for{“a”=>value1,“b”=>value2}:Hash

//value1, value2 are valid data

path[‘a’] is the correct syntax for accessing hashes.

Yah i get it. I wanted to convert this array of hash into an array of

class objects. How do i do that in ruby?

Yes, you can. This is your program, refactored to do that (I’ve not tested it so excuse any typos):

class Data

attr_reader :a, :b

def initialize(a, b)

@a = a

@b = b

end

end

class A < ActiveRecord::Base

def fill_paths

@files.map |file|

Data.new(file, data_2(‘assume data2 is valid’))

end

end

end

#Controller

@paths = A.fill_paths

@paths.each do |path|

puts path.a

end

Michael Pavling wrote in post #1063197:

Yah i get it. I wanted to convert this array of hash into an array of
class objects. How do i do that in ruby?

They are "class objects" - hashes are instances of Hash class ...

In the index.html.erb file the following code doesnt work,

paths contain valid data populated in the controller class.

<% @paths.each do |path| %>
<tr>
<td><%= path.a %></td>

-- Since paths is an array of hash path['a'] should work
It says undefined method 'a' for {"a"=>".", "b"=>"."}:Hash

Changing path.a to path['a'] gives me an error
"No route matches {:a=>".", :b=>".", :action=>"edit",
:controller=>"file_paths"}"

Note: . is a valid data (referring to a path in a dir)

Hi Jeremy,

Thanks for the reply.
I want to populate my DB during init one time by crawling through a set
of directories with filenames and paths. How do i do this?

Hi Jeremy,

Thanks for the reply.

I want to populate my DB during init one time by crawling through a set

of directories with filenames and paths. How do i do this?

Where, or how?

Where: db/seeds.rb

How: Iterate through directories (read the Dir/File/Path classes’ documentation) and create a record in the database for each. If either of those steps seem too complex then you need to read some tutorials on Ruby (for the first bit) and Rails (for the later).

@jeremy Thanks alot.