简体   繁体   English

如何根据关联模型的属性排序记录-Rails 4

[英]How to order records according to an attribute from associated model - Rails 4

I have a Grade model and a Course model with the following associations: 我有一个具有以下关联的Grade模型和Course模型:

class Grade < ActiveRecord::Base
    resourcify
    has_many :courses
end


class Course < ActiveRecord::Base
    resourcify
    belongs_to :grade
    has_many :chapters, dependent: :destroy
    has_many :packages, dependent: :destroy
    belongs_to :subject
end

I have a grade_number column in my Grade table, and I would like it so that when I display all courses in course index page, they are ordered by grade_number in descending order. 我的成绩表中有一个grade_number列,所以我希望在我在课程索引页面中显示所有课程时,它们按grade_number降序排列。 Here is my course#index: 这是我的课程编号索引:

      def index
       @grades = Grade.all
       @subjects = Subject.all
       @courses = Course.includes(:grades).order("grade.grade_number DESC")
      end

Which is giving me the following error: 这给了我以下错误:

Association named 'grades' was not found on Course; 在课程中找不到名为“成绩”的协会; perhaps you misspelled it? 也许您拼错了?

and index.html.erb : 和index.html.erb:

        <% @courses.each do |course| %>
          <div class="col-md-4">
            <div class="course_info">
              <div class="top_titles">Grade <%= course.grade.grade_number %></div>
              <div class="subject"><%= course.subject.name if course.subject and course.subject.name%></div>  
              <div class="semester"><%= course.semester %> Semester</div>
              <div class="button_wrapper"><%= link_to "View Course", [course.grade, course], :class => "course_button" %></div>
              <% if can? :update, :destroy, @course %>
                <div class="admin-links">
                  <%= link_to 'Edit', edit_grade_course_path(course.grade, course) %> |
                  <%= link_to 'Destroy', [course.grade, course], method: :delete, data: { confirm: 'Are you sure?' } %>
                </div>
              <% end %>
            </div>
          </div>
        <% end %>
  def index
       @grades = Grade.all
       @subjects = Subject.all
       @courses = Course.includes(:grade).order("grades.grade_number DESC")
  end

Please note that Association name in Course is grade not grades Course belongs to grade so it is singular. 请注意,在协会名称Coursegradegrades课程属于等级所以它是单数。

removes s in :grades 删除:grades中的s

@courses = Course.includes(:grade).order("grades.grade_number DESC")

it will work. 它会工作。 try like this. 尝试这样。

Thanks @tadman 谢谢@tadman

includes should take association name and order should take table name ie includes应采用关联名称,而order应采用表名称,即

courses = Course.includes(:grade).order("grades.grade_number DESC")

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM