Я новичок в рельсах и извиняюсь, если это вопрос n00b.
Я делаю обязательный сайт управления рецептами и хочу, чтобы у каждого рецепта был список тегов (где тег db просто содержит строку с именем "name"). Вот мои модели, чтобы дать вам некоторый контекст:
class Recipe < ActiveRecord::Base
has_many :links
has_many :tags, :through => :links
validates :name, :ingredients, :directions, :presence => true
accepts_nested_attributes_for :tags,
:allow_destroy => true,
:reject_if => :reject_tag
def reject_tag(a)
...
end
end
class Tag < ActiveRecord::Base
has_many :links
has_many :recipes, :through => :links
end
class Link < ActiveRecord::Base
belongs_to :recipe
belongs_to :tag
end
По сути, каждый рецепт имеет список тегов в таблице соединительных ссылок и наоборот. Форма рецепта принимает вложенные атрибуты для тегов. Я хочу, чтобы дублированные теги не вводились в таблицу тегов, а просто создавалась новая ссылка, указывающая на уже существующий тег. Поэтому, если у меня есть тег с именем «Здоровый», введите новый рецепт и добавьте к нему тег «Здоровый», я не хочу дублировать теги «Здоровый» в таблице тегов. Все, что нужно, - это новая запись в таблице ссылок, связывающая новый рецепт со старым тегом.
Что такое «рельсовый» подход к этому. Прямо сейчас я пытаюсь взломать его, передав recipe_id из скрытого поля ввода в: reject_if lambda и сохранив там новую ссылку. Он работает для редактирования существующего рецепта, но не для создания нового, так как recipe.id еще нет. Это похоже на плохой подход, и я просто не знаю, как это сделать. Любая помощь приветствуется.