Я пытаюсь сделать приложение с Rails 4.Rails - Как написать сумму двух атрибутов модели
У меня есть 3 модели.
Project.rb
ProjectInvitation.rb
ProjectStudentEoi.rb
Ассоциации являются:
Project has may project_invitations
Project has many project_student_eois
ProjectInvitation belongs to project
ProjectStudentEoi belongs to project
Я пытаюсь подсчитать, сколько студентов участвуют в проекте. Они могут быть приглашены или выразить интерес (если не приглашены).
В моем проекте.rb я попытался написать метод, чтобы суммировать количество принятых приглашений или одобренных выражений интереса.
В project.rb, у меня есть:
def self.students_participating
ProjectStudentEoi.interested_students.sum.
ProjectInvitation.invitations_accepted
end
Примечание: Я только разделить эту строку на две строки, потому что ТАК не будет отступа так долго линию. Это всего лишь одна строка в моем коде.
В моем projectInvitation.rb у меня есть:
def self.invitations_accepted
@project.project_invitations.where(student_accepted: true)
end
В моем ProjectStudentEoi.rb, у меня есть:
def self.interested_students
@project.project_student_eoi.where
(creator_accepted: true).count
end
Опять же, приведенный выше код разделен на 2 строки в этой должности, так как SO не будет отступать от него в качестве кода, когда это будет долго.
Тогда в моих проектах просмотра папки, у меня есть частичный, который имеет:
<%= @project.students_participating %> students participating
NoMethodError at /projects/2
undefined method `students_participating' for #<Project:0x007ff733333830>
Как вы пишете сумму двух методов подсчета в рельсах?
Я попробовал пример, приведенный в ответ ниже - так в моем Project.rb:
def students_participating
project_student_eois.interested_students.sum +
project_invitations.invitations_accepted
end
Я получаю эту ошибку:
NoMethodError at /projects/2
undefined method `interested_students' for #<ActiveRecord::Associations::CollectionProxy []>
подхватывая предложения Мейера ниже, я попытался переписать мои методы класса как области, так и в ProjectStudentEoi.rb, у меня есть:
scope :creator_accepted, lambda { where(creator_accepted: true)}
в ProjectInvitation.r б у меня есть
scope :student_accepted, lambda { where(student_accepted: true)}
Тогда в project.rb (адаптируя предложение Мейера), у меня есть:
def students_participating
project_student_eois.creator_accepted.count +
project_invitations.students_accepted.count
end
У меня нет функции подсчета в дочерние объекты больше.
Когда я пытаюсь это, я получаю эту ошибку:
NoMethodError at /projects/2
undefined method `creator_accepted' for #<ActiveRecord::Associations::CollectionProxy []>
ТОГДА - с пересмотренным предложением Мейера, я попробовал:
def students_participating
project_student_eois.creator_accepted +
project_invitations.students_accepted.count
end
Я получаю эту ошибку:
NoMethodError at /projects/2
undefined method `creator_accepted' for #<ActiveRecord::Associations::CollectionProxy []>
так что мне не нужны методы подсчета - это два дочерних объекта? – Mel
Hi Meier, я пробовал это, но это не сработало. Вы уверены, что мне сначала не нужно делать счет? – Mel
так интересно_студенты уже подсчитывают. invitations_accepted не учитывает, вам нужно добавить счет к этому. – Meier