пятница, 1 июля 2011 г.

Re: Счетчик в связующей таблице

  has_many :user_items, :dependent => :destroy do
    def insert_record(record, force = false, validate = true)
      existance = first(:conditions => {:item_id => record.item_id})
      existance ? existance.update_attribute(:quantity, existance.quantity.next) : super
    end
  end

Как-то так.

1 июля 2011 г. 15:05 пользователь a.ognevsky <a.ognevsky@gmail.com> написал:
Имеется глупый вопрос, но я сначала сломал голову себе, а потом и всем окружающим. 

Предположим, что у нас есть пользователь и вещь. Пользователь может покупать вещь (это _не_ очередной ebay, поэтому все намного проще). Ассоциация — has_many through. 

user — user_item — item

На frontend нужно передавать данные о вещах пользователя в виде вещь1 (название, кол-во, цена), вещь2 (название, кол-во, цена). Отсюда вопрос, каким способом бы вы реализовали хранение этих вот вещей. Есть 2 варианта:
1. При покупке вещи в user_item добавлять новый элемент и проблем не знать. Если пользователь купил 20 раз одну и ту же вещь, то в связующей таблице будет 20 одинаковых записей.
2. Вариант, к которому я склоняюсь: хранить в связующей таблице некое поле num, в котором хранить кол-во купленных вещей. Таким образом, на каждую вещь будет только 1 запись и поле, указывающее на кол-во этих записей. 

Ну и таки вопрос, каким образом лучше всего (правильнее, что ли), при добавлении новых элементов инкрементировать счетчик, а при удалении — декрементировать? 

И второй вопрос, как в таком случае отображать все вещи пользователя с счетчиком (он ведь хранится в связующей таблице). 

У кого-нибудь есть идеи? Спасибо!

--
Andrey Ognevsky

--
--
Данное сообщение отправлено Вам, так как Вы являетесь подписчиком группы "RubyOnRails to russian" на группах Google.
FAQ группы находится по адресу: http://ru.wikibooks.org/wiki/RubyFAQ
 
Для того, чтобы отправить сообщение в эту группу, пошлите его по адресу
ror2ru@googlegroups.com
Чтобы отменить подписку на эту группу, отправьте сообщение по адресу: ror2ru-unsubscribe@googlegroups.com
Дополнительные варианты находятся на странице группы http://groups.google.com/group/ror2ru?hl=ru

--
--
Данное сообщение отправлено Вам, так как Вы являетесь подписчиком группы "RubyOnRails to russian" на группах Google.
FAQ группы находится по адресу: http://ru.wikibooks.org/wiki/RubyFAQ
 
Для того, чтобы отправить сообщение в эту группу, пошлите его по адресу
ror2ru@googlegroups.com
Чтобы отменить подписку на эту группу, отправьте сообщение по адресу: ror2ru-unsubscribe@googlegroups.com
Дополнительные варианты находятся на странице группы http://groups.google.com/group/ror2ru?hl=ru

Комментариев нет:

Отправить комментарий