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:

... anybody ... ?

@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

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
<stuff>
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?

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!