Я новичок в рубине и рубинах. Мне нужно реализовать сложную мечению двигатель:Rails: has_many: через ассоциацию только с одной стороны
каждый тег может иметь 0 или больше синонимов (да, так же, как на SO)
должна быть иерархией тегов: то есть суб -tags и супер-теги. Скажем, у меня три тэга:
programming
,ruby
иc
. Затемprogramming
является супер-тегом какruby
, так иc
, и когда я вводил теги для элемента о рубине, нет необходимости вводить тегprogramming
, я могу пометить его толькоruby
. Когда я ввожу теги, все супертеги должны быть добавлены рекурсивно. (На самом деле это странно, я никогда не видел какой-либо теги двигателя с помощью этой функции, я действительно чувствую отсутствие)каждого пользователь должен иметь свой собственный набор тегов, то есть каждый
Tag
belongs_to
User
. Теги не являются общедоступными для всех, они являются частными для своего владельца.
Кажется, я не могу использовать acts_as_taggable_on
драгоценный камень, верно? Поэтому я должен реализовать свою собственную. На самом деле я уже внедрил класс Tag
, который поддерживает иерархию, синонимы и материалы пользователей, кажется, работает. Но есть много вопросов, как сделать что-то с этим.
Я пытаюсь декомпилировать acts_as_taggable_on
, это действительно сложно для новичка, как я ..
Итак, есть много вопросов, но я собираюсь быть более точным в настоящее время:
Предположим, у меня есть класс Item
, который я хочу быть помеченным. Насколько я понимаю, я должен использовать ассоциацию has_many :through
, как на Item
, так и на стороне Tag
. И поэтому создайте промежуточную таблицу с полями item_id
и tag_id
.
BUT: Я хочу, чтобы мой механизм маркировки был универсальным! Поэтому я не хочу добавлять к Tag
модели, связанные с Item
.
Итак, единственный реальный вопрос: это вообще нормально, чтобы создать has_many :through
ассоциацию только на Item
стороне?
И, во-вторых, если у кого-то есть предложения по тому, что я объяснил, я был бы рад их видеть.
Большое спасибо за подробное объяснение. –