2016-08-04 2 views
0

Я прочитал много руководств, но я не могу понять, почему это мой метод не работает:Рендер парциальное от Helper в Rails 4

module StudentsHelper 
    def get_training_projects 
     @training_projects_student = TrainingProject.where(student_id: @student.id) 
     @training_projects_student.count 
    end 

    def get_training_courses 
     @training_course_student = TrainingCourse.joins(:courses_students).where(courses_students: { student_id: @student.id }) 
     @training_course_student.count 
    end 

    def storico_studente 
     n = get_training_courses + get_training_projects 
     i_projects = 0 
     i_courses = 0 
     until i_courses + i_projects < n 
      if @training_course_student[i_courses].data_inizio < @training_projects_student[i_projects].data_inizio 
       render partial: "training_course", collection:@training_course_student[i_cousers] 
       i_courses += 1 
      else 
      render partial: "training_project", collection: @training_course_student[i_projects] 
      i_projects += 1 
      end 
     end 
    end 
end 

«_training_project.html.erb» и «_training_course.html .erb "находятся в папке студентов.

Update:

В приведенном выше коде, цикл был не прав, никогда не входит.

def storico_studente 
     n_training_courses = get_training_courses 
     n_training_projects = get_training_projects 
     n = n_training_courses + n_training_projects 
     i_projects = 0 
     i_courses = 0 
     while i_courses + i_projects < n 

      if @training_course_student[i_courses].nil? 
       render partial: 'students/training_project', collection: @training_course_student[i_projects] 
       i_projects += 1 if i_projects < n_training_projects 

      elsif @training_projects_student[i_projects].nil? 
       render partial: 'students/training_course', collection: @training_course_student[i_courses] 
       i_courses += 1 if i_courses < n_training_courses 

      elsif @training_course_student[i_courses].data_inizio < @training_projects_student[i_projects].data_inizio 
       render partial: 'students/training_course', collection: @training_course_student[i_courses] 
       i_courses += 1 if i_courses < n_training_courses 
      else 
       render partial: 'students/training_project', collection: @training_course_student[i_projects] 
       i_projects += 1 if i_projects < n_training_projects 
      end 

     end 

    end 

теперь рабочий цикл нормально, я могу видеть правильный вызов в журналах:

Rendered students/_training_course.html.erb (0.0ms) 
    Rendered students/_training_project.html.erb (0.0ms) 
    Rendered students/_training_course.html.erb (0.0ms) 

файлы содержат только (на данный момент)

<div>ptoject</div> 

конец

<div>course</div> 

это объясняет время загрузки (0,0ms)

Но это все еще не работает!

ответ

1

Я думаю, что ваша петля until должна быть петлей while. Поскольку i_projects и i_courses оба инициализируются до нуля, а n всегда будет больше или равно нулю, ваш цикл будет выполняться только тогда, когда n равен нулю.

UPDATE

Проблема заключается в том, что ваш вспомогательный метод не возвращает визуализированная партиалы. Это их рендеринг, подтвержденный вашими журналами, но результат никогда не возвращается. Я уверен, что есть лучший способ сделать это, но вот решение:

def storico_studente 
    n_training_courses = get_training_courses 
    n_training_projects = get_training_projects 
    n = n_training_courses + n_training_projects 
    i_projects = 0 
    i_courses = 0 

    partials = [] 

    while i_courses + i_projects < n 
    if @training_course_student[i_courses].nil? 
     partials << render(partial: 'students/training_project', collection: @training_course_student[i_projects]) 
     i_projects += 1 if i_projects < n_training_projects 
    elsif @training_projects_student[i_projects].nil? 
     partials << render(partial: 'students/training_course', collection: @training_course_student[i_courses]) 
     i_courses += 1 if i_courses < n_training_courses 
    elsif @training_course_student[i_courses].data_inizio < @training_projects_student[i_projects].data_inizio 
     partials << render(partial: 'students/training_course', collection: @training_course_student[i_courses]) 
     i_courses += 1 if i_courses < n_training_courses 
    else 
     partials << render(partial: 'students/training_project', collection: @training_course_student[i_projects]) 
     i_projects += 1 if i_projects < n_training_projects 
    end 
    end 

    safe_join partials 
end 
+0

oops, это неловко! Спасибо, я обновил сообщение, потому что, несмотря на то, что вызов в журнале завершен, все равно не работает ... –

+0

Эй, мое обновленное решение работает для вас? – dhouty

+0

Могу ли я вызвать метод следующим образом: <% = storico_studente%>? –

Смежные вопросы