【问题标题】:Render partial from Helper in Rails 4从 Rails 4 中的 Helper 渲染部分
【发布时间】:2016-12-10 18:24:29
【问题描述】:

我已经阅读了很多指南,但我不明白为什么我的方法不起作用:

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”文件位于students文件夹中。

更新:

在上面的代码中,循环是错误的,永远不会进入。

  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)

但还是不行!

【问题讨论】:

    标签: ruby-on-rails ruby-on-rails-4 helper


    【解决方案1】:

    我认为您的until 循环应该是while 循环。由于i_projectsi_courses 都被初始化为零并且n 将始终大于或等于零,因此您的循环仅在n 为零时执行。

    更新

    问题是您的辅助方法没有返回渲染的部分。正如您的日志所确认的那样,它正在渲染它们,但结果永远不会返回。我确信有更好的方法,但这里有一个解决方案:

    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
    

    【讨论】:

    • 哎呀,太尴尬了!谢谢,我已经更新了帖子,因为尽管日志中的调用已完成,但仍然无法正常工作...
    • 我可以这样调用方法吗:?
    • 是的,把它放在你的视野里。
    • 什么都没有改变...我尝试puts "#{partials}",结果是:[nil, nil, nil]
    • 我认为您应该使用 object: ... 而不是 collection: ...
    猜你喜欢
    • 2013-06-18
    • 2017-05-07
    • 1970-01-01
    • 1970-01-01
    • 2016-11-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多