Frederick Cheung wrote:
>> >> @statcount = table.count(:all, :conditions => statcount_query).to_s
>> ("grocery") that contains: "title", "item1", "item2", "item3", "item4,
>> "item5". It was built behind a scaffold. So the index.rhtml shows all of
>> my lists. Ok, no problem there. Here is example output:
> What I meant by that is what is the structure of your data (columns,
> etables etc.)
> Fred
Here is the format of index.rhtml and database layout:
<table>
<% @listhubs.in_groups_of(3, false) do |row_listhubs| %>
<tr>
<% for listhub in row_listhubs %>
<td><%= listhub.title +
(link_to 'edit', edit_listhub_path(listhub) + '<br>' + listhub.item1 +
'<br>' + listhub.item2 + '<br>' + listhub.item3+ '<br>' + listhub.item4+
'<br>' + listhub.item5+ '<br>' + listhub.item6 + '<br>' + listhub.item7
+ '<br>' + listhub.item8 + '<br>' + listhub.item9 + '<br>' +
listhub.item10 %>
</td>
<% end %>
</tr>
<% end %>
</table>
---------------------------------------------------------------------------
class CreateListhubs < ActiveRecord::Migration
def self.up
create_table :listhubs do |t|
t.column :title, :string
t.column :item1, :string
t.column :item2, :string
t.column :item3, :string
t.column :item4, :string
t.column :item5, :string
t.column :item6, :string
t.column :item7, :string
t.column :item8, :string
t.column :item9, :string
t.column :item10, :string
ah, so a list having 3 apples is represented by 3 of the columns
having value 'apple' ? That's an unusual way of organising your data,
and doing that sort of counting in sql is a nightmare. I would do
things like this:
class Listhub
def values
[item1, item2, item3, item4, item5, item6, item7, item8, item9,
item10].compact
end
end
then look at values. You can use group_by to group identical items, ie
values.group_by {|value| value}
will return values like {"apple"=>["apple", "apple", "apple"],
"banana"=>["banana"], "pear"=>["pear", "pear"]}
and then it is simple enough to use map on that to get counts for each
key, eg
values.group_by {|v| v}.map {|key, items|[key, items.length]}
#=> [["apple", 3], ["banana", 1], ["pear", 2]] (assuming that values
evaluated to ["apple", "pear", "apple", "apple", "banana", "pear"])
Fred