Insert key/value pair into hash, then read it out


#1

Hi there,

I’ve been trying to figure out if/how the following is possible…

@books: array of books

@books.each do |book|
do stuff…
do stuff…
do stuff…
book[“number_of_pages”] = 123 #this is supposed to “inject” the
key/value pair
end

I want to:

-> “inject” the key ‘number_of_pages’ with the value ‘123’ into the hash
“book” (“book” IS a hash, right?), for every book in @books

-> Then, show in the view: All “Number of pages”: <%= @books.collect
{|b| [b.number_of_pages] } %>

It doesn’t work like this… (-> “undefined method `number_of_pages’ for
#Book:0xb5c022bc”)

How can I solve it…?

Many thanks for your help!
Tom


#2

… anybody … ?


#3

On Fri, Nov 7, 2008 at 7:28 AM, Tom Ha
removed_email_address@domain.invalidwrote:

@books: array of books
@books.each do |book|
do stuff…
do stuff…
do stuff…
book[“number_of_pages”] = 123 #this is supposed to “inject” the
key/value pair
end

-> “inject” the key ‘number_of_pages’ with the value ‘123’ into the hash
“book” (“book” IS a hash, right?), for every book in @books

No, book is a class, I assume at least.

Probably in your models directory you have a book.rb file that has

class Book < ActiveRecord::Base

end

-> Then, show in the view: All “Number of pages”: <%= @books.collect

{|b| [b.number_of_pages] } %>

It doesn’t work like this… (-> “undefined method `number_of_pages’ for
#Book:0xb5c022bc”)

You probably want a column called number_of_pages in your books table

Then you can do:
book.number_of_pages = 123
book.number_of_pages #=> 123

Hope that helps

Mikel


http://lindsaar.net/
Rails, RSpec and Life blog…


#4

Thanks, Mikel. We’re half way there, I guess:

No, book is a class, I assume at least.

Probably in your models directory you have a book.rb file that has

class Book < ActiveRecord::Base

end

Yes, that’s the case.

You probably want a column called number_of_pages in your books table

Then you can do:
book.number_of_pages = 123
book.number_of_pages #=> 123

Not really. Actually, I don’t want to store the “number_of_pages” in a
database, I’d just lik to add it “on the fly” to each “book” to be able
to display it in the view, for each “book”.

Is this possible in my case?


#5

On Nov 7, 2008, at 5:48 AM, Tom Ha wrote:

able
to display it in the view, for each “book”.

Is this possible in my case?

If you add these to the class:

def calc_number_of_pages
@page_count = (your code to determine page count)
end

def number_of_pages
@page_count
end

Then you can do:

@books.each do |book|
book.calc_number_of_pages
end

Then in your view you can have

<%= book.number_of_pages %>

and it will do what you’ve described.


#6

Great, thanks a lot!