[英]Rails 4, order in has_many :through. It simply does nothing
我有这种情况:
class Student < ActiveRecord::Base
has_many :tickets
has_many :movies, through: :tickets
end
class Movie < ActiveRecord::Base
has_many :tickets
has_many :students, through: :tickets
end
class Ticket < ActiveRecord::Base
belongs_to :movie, counter_cache: true
belongs_to :student
end
class Cinema < ActiveRecord::Base
has_many :movies, dependent: :destroy
has_many :students, through: :movies
end
我在我的( movie_controller.rb )控制器中有这个代码:
def show
@tickets = @movie.tickets.includes(:student)
end
现在在我的网格( show.html.erb )中我遇到这种情况:
<% @tickets.each do |ticket| %>
<tr>
<td><%= ticket.student.id %></td>
<td><%= ticket.student.code %></td>
<td><%= ticket.student.last_name %> <%= ticket.student.first_name %></td>
<td><%= ticket.hours %></td>
<td><% if ticket.payed %>Yes<% else %>No<% end %></td>
</tr>
<% end %>
现在我想通过他们的“last_name,first_name”命令学生,但如果我在我的控制器中使用此代码:
@tickets = @movie.tickets.includes(:student).order('students.last_name')
在我的控制台中,我有一个像这样的SQL查询:
"AS t0_r0 .... AS t0_r1 ..."
等等......这是正常的吗?
我的逻辑错了吗?
如果我在我的模型中使用这样的代码:
class Movie < ActiveRecord::Base
has_many :tickets
has_many :students, -> { order('last_name, first_name') }, through: :tickets
end
什么都行不通 我的列表不是按姓氏和名字排序,而是默认(id)。
怎么做得更好?
更新 :
我从模特“儿童”改为“学生”。
“”AS t0_r0 .... AS t0_r1 ......“等等......这是正常的吗?”
是的,包已经实现为外连接,因此order by可以应用于从ticket表返回的行。
要使用范围这一点,你会想要做的事,如 :
student.rb
def self.by_last_name
order(:last_name)
end
ticket.rb
def self.by_student_last_name
joins(:student).merge(Student.by_last_name)
end
... 然后 ...
@tickets = @movie.tickets.by_student_last_name
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.