не уверен, как моделировать в ActiveRecord - PullRequest
0 голосов
/ 16 ноября 2011

Я делаю простую систему событий (например, физические события, а не программные события). Он имеет следующую структуру. Каждое событие будет иметь набор слотов (например, музыкальное событие, вступительный акт, целитель и т. Д.). Каждый слот event_slot будет ссылкой на тег. Сейчас у меня есть следующее, но я думаю, что это не сработает:

class Event < ActiveRecord::Base
  #id primary key
  has_many :event_slots, :order => "sort desc" 
  has_many :tags, :through => :event_slots 
end

# event_slots will be populuated with tag_id
class EventSlot < ActiveRecord::Base
  # event_id, tag_id; will also have a sort value to sort these
  belongs_to :event
  belongs_to :tag
end

проблема в том, что event_slots будет иметь tag_id. Другими словами, мы будем добавлять теги и связывать их на месте (как физически на месте в веб-форме).

class Tag < ActiveRecord::Base
  has_many :event_slots
end

Я не уверен, что это моделирование будет работать. Любые идеи о том, как реализовать / улучшить это это? Has_many: через, кажется, не сделано правильно.

ТНХ

1 Ответ

0 голосов
/ 16 ноября 2011

Это должно работать нормально.Возможно, я бы попытался использовать лучшее имя, чем EventSlots, потому что оно не интуитивно понятно, что оно представляет.Если бы он был нацелен на музыкальный рынок, то что-то вроде Acts, возможно, имело бы больше смысла.

Использование чего-то вроде accepts_nested_attributes_for в модели Event может помочь устранить необходимость в контроллере для второй вложенной модели (Act / EventSlot).Посмотрите на http://railscasts.com/episodes/196-nested-model-form-part-1, если вы еще этого не сделали.

Наконец, я бы не стал использовать вашу собственную систему тегов.Уже есть много хорошо протестированных драгоценных камней, которые вы можете использовать для обеспечения необходимой вам функциональности.Проверьте https://www.ruby -toolbox.com / Categories / rails_tagging.html , чтобы найти тот, который может удовлетворить ваши потребности.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...