У меня есть пользователь, микропост и модель ответа.
У пользователя много микропостов и много ответов.
У микросообщений есть теги, использующие действия в качестве тегируемого драгоценного камня.
Мне нужно найти количество ответов пользователя на микросообщения, помеченные определенным тегом. Чтобы было ясно, например, сколько ответов дал пользователь 1 на микросообщения о «упражнении».
Есть некоторый базовый синтаксис ruby и логика отношений, которые мне не хватает. Это то, что я имею в своей пользовательской модели.
def user_responses_on_topic tag
microposts = self.microposts.tagged_with(tag, :on => :tags)
responses_count = 0
microposts.each do |micropost|
count = micropost.responses.where("user_id = :user_id", user_id: self.id).size
responses_count = responses_count + count
end
end
Это дает мне ценность, но я знаю, что это неправильно, потому что, когда я добавляю ответы на определенную тему, ценность пользователей не увеличивается.
Я уверен, что есть простой "рубиновый" способ получить это с помощью
responses = user.microposts.responses
Но мне нужно знать, как вставить тегированную логику микросообщений в этот код.
Я немного подтянул его, но все равно не повезло. Отдельные компоненты этого кода работают, но я не могу заставить все это работать вместе.
def user_responses_on_topic(interest)
microposts = Micropost.tagged_with(interest, :on => :tags, :any => true)
responses ||= 0
microposts.each do |micropost|
responses += micropost.responses.where("user_id = :user_id", user_id: self.id).size
end
end
РЕДАКТИРОВАТЬ:
Это работает
def user_responses_on_topic(interest)
microposts = Micropost.tagged_with(interest, :on => :tags, :any => true)
count = 0
microposts.each do |micropost|
responses = micropost.responses.size
count = count + responses
end
count
end
Но должен быть лучший способ Rails (это пахнет PHP)
Любые идеи?