У меня есть модель Вопрос с обратным вызовом:Доступ ко всем модель из связанных моделей обратного вызова
class Question < ActiveRecord::Base
has_many :qtags
has_many :tags, through: :qtags
after_save { self.tags.find_or_create(self) }
end
Это проходит вопрос Tag, который должен создать несколько тегов из tag_list
В tag.rb I хотел бы получить доступ ко всем тегам, чтобы проверить, если один уже существует:
class Tag < ActiveRecord::Base
has_many :qtags
has_many :questions, through: :qtags
def self.find_or_create(question)
question.tags.destroy_all
question.tag_list.split(' ').each do |tag|
# Tag.where here can't access all the tags, just the associated ones.
if Tag.where(name: tag).exists? && question.tags.ids.exclude?(Tag.where(name: tag).first.id)
question.tags << Tag.where(name: tag)
elsif Tag.where(name: tag).blank?
question.tags << Tag.create(name: tag)
end
end
end
end
Однако это только проверяет, в тегах, которые имеют соответствующий идентификатор вопросов.
так, когда я добавить консоль монтировки с binding.pry:
5: def self.find_or_create(question)
6: question.tags.destroy_all
=> 7: binding.pry
8: question.tag_list.split(' ').each do |tag|
9: if Tag.where(name: tag).exists? && question.tags.ids.exclude?(Tag.where(name: tag).first.id)
10: question.tags << Tag.where(name: tag)
11: elsif Tag.where(name: tag).blank?
12: question.tags << Tag.create(name: tag)
13: end
14: end
15: end
[1] pry(Tag)> Tag.all
Tag Load (0.1ms) SELECT "tags".* FROM "tags" INNER JOIN "qtags" ON "tags"."id" = "qtags"."tag_id" WHERE "qtags"."question_id" = ? [["question_id", 11]]
Он выбирает только тег с соответствующими вопросами идами.
Как я могу получить доступ ко всем тегам с Tag.all или Tag.where (..), которые не имеют идентификатор вызывающего абонента?
Где такое 'имя тега? –
question.tag_list получает разделение на tag_names, но qustion - это то, почему Tag.all вызывается с идентификатором вопросов, например: [question.id, 11], почему я не могу получить доступ ко всем тегам? –
Прошу прощения, я не понимаю. Можете ли вы добавить свой код на свой вопрос? Части, которые вы заменили на «...», например. –