как вызвать функцию модели для контроллера, как во вложенных ресурсах в рельсах? - PullRequest
0 голосов
/ 07 октября 2018

У меня есть 2 ресурса, оба реализованы вложенными ресурсами.Маршрут выглядит следующим образом: /students/:id/monitorings/inscribir

Мне нужно вызвать из контроллера мониторинга функцию модели, которая находится в students.

PD: у мониторинга нет модели, так какне имеет базы данных, поскольку это действие для ресурса students

. Код функции модели студента следующий:

def self.calc_credits(id_student)
    credits = 0
    notes = Note.where(student_id: id_student)
    notes.each do |v|
        credits = credits + v.subject.creditos
    end
    return credits
end

Код контроллера мониторинга:следующее:

def inscribir
    @student = Student.find(params[:student_id])
    @groups = Group.all
    encontrado = false
    @mensaje = ""

    @groups.each do |s|
        if s.subject_id == params[:codigo_materia] and s.student_id = nil
            encontrado = true
        end
    end
    if !encontrado
        @mensaje = "No se ha encontrado ninguna materia disponible"
    end
    creditos = calc_credits(params[:student_id])
    puts creditos
end

Спасибо.

Ответы [ 2 ]

0 голосов
/ 07 октября 2018

В контроллере мониторинга замените эту строку creditos = calc_credits(params[:student_id]) на creditos = @student.calc_credits

И в своей модели учеников измените метод calc_credits на:

def self.calc_credits
    credits = 0
    notes = Note.where(student_id: self.id)
    notes.each do |v|
        credits = credits + v.subject.creditos
    end
    return credits
end
0 голосов
/ 07 октября 2018

Хм, если я вас понял, вы пытаетесь получить доступ к методу студента модели внутри мониторинга * контроллера 1004 * и inscribir action?Если это так, то вы должны сначала получить значение для экземпляра студента, как вы делаете здесь.

@student = Student.find(params[:student_id])

Следующее, что нужно вызвать этот метод, как:

@student.thatmethod

здесь вы должны проверить, есличто за метод внутри студент модель общедоступный ?Если он находится ниже приватной строки в контроллере, он не будет доступен для этого места.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...