У меня есть три модели:
class Feed < ActiveRecord::Base
has_many :filters, :dependent => :destroy
has_many :keywords, :through => :filters, :uniq => true
end
class Filter < ActiveRecord::Base
belongs_to :feed
belongs_to :keyword
validates_uniqueness_of :keyword_id, :scope => :feed_id
end
class Keyword < ActiveRecord::Base
has_many :filters, :dependent => :destroy
has_many :feeds, :through => :filters
end
Я хочу, чтобы в базе данных были только уникальные записи для ключевых слов.Например, если два канала имеют ключевое слово «привет», должно быть два фильтра (по одному для каждого канала), указывающих на одно и то же ключевое слово.
У меня возникли проблемы с кодом контроллера.Возможно, я ищу слишком простое решение, но я думаю, что должен быть легкий способ сделать это.Это то, что я имею в своем действии создания до сих пор:
def create
@feed = Feed.find(params[:feed_id])
@keyword = @feed.keywords.create(params[:keyword])
redirect_to feed_keywords_path(@feed), notice: 'Keyword added successfully.'
end
С этим кодом контроллера предыдущий пример приведет к дублированию ключевого слова в базе данных, по одному для каждого канала / фильтра.Есть ли прямое решение для этого, или мне нужно предварительно проверить, есть ли ключевое слово, и в этом случае просто создать фильтр?