Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Ruby: Базы данных > Первая работа с БД


Автор: Ramira 16.9.2009, 12:22
В БД есть  три таблицы: maillists(id, name), subscribes(id, maillists_id), messages(id, maillists_id). Необходимо вывести на экран таблицу: Имя_рассылки(из maillists)  Кол-во_подписчиков (посчитать в subscribes)  Кол-во_выпусков(посчитать в messages).
Только начала разбирать ruby, работа с БД понимается с трудом. 


Автор: Ramira 16.9.2009, 14:11
Более менее разобралась, сделала след.образом:

<% maillists=Maillist.find(:all, :conditions => "user_id=1") %> <!-- session[:user]-->
<% for m in maillists do %>
    <%= m.name_mailer %>
....
    <% subscribe = Subscribe.count(:all, :conditions => "maillist_id = #{ m.id }") %>
    <%= subscribe %>
    <% message = Message.count(:all, :conditions => "maillist_id = #{m.id}") %>
    <%= message %>
....
<% end %>

может кто-нибудь подскажет, где можно взять литературу о работе с БД в ruby? А то если бы мне не подсказали, в жизни бы не нашла, как это делается...



Автор: fixxer 17.9.2009, 14:25
Код

maillists = Maillist.find_all_by_user_id(1)
for m in maillists do
  subscribe = m.subscribes.count(:all)
  message = m.messages.count(:all)
end


это при условии что в Maillist есть has_many :subscribes, :messages

Автор: source777 19.9.2009, 21:09
Лучше даже:
Код

maillists = Maillist.find_all_by_user_id(1)
for m in maillists do
  subscribe = m.subscribes.size
  message = m.messages.size
end


В таком варианте, если используются http://railscasts.com/episodes/23-counter-cache-column, то запрос к БД будет всего 1, иначе будет эквивалент кода, приведённого fixxer, только чуть короче.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)