[英]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. 请注意,在协会名称Course
是grade
不grades
课程属于等级所以它是单数。
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.