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

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

… anybody … ?

On Fri, Nov 7, 2008 at 7:28 AM, Tom Ha
[email protected]wrote:

@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

Rails, RSpec and Life blog…

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?

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.

Great, thanks a lot!