11175
(-- --)
November 6, 2008, 8:28pm
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:
Mikel1
(Mikel)
November 7, 2008, 11:07am
3
@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
11175
(-- --)
November 7, 2008, 11:48am
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
<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.