我尝试根据228 Sortable Table Columns
进行排序一切都是正确的,但我不知道如何使用其他模型对相关列进行排序。
# Table name: vacations
# id :integer not null, primary key
# start_at :date not null
# end_at :date not null
# person_id :integer not null
我试过用这个:
= sortable "person.first_name", "Employee"
这不正确。
协会
class Vacation < ActiveRecord::Base
belongs_to :person
end
class Person < ActiveRecord::Base
has_many :vacations
end
人员表格架构:
# Table name: people
#
# id :integer not null, primary key
# pesel :string not null
# first_name :string not null
# last_name :string not null
VacationsController 中的当前索引操作。
def index
@vacations = Vacation.order(sort_column + ' ' + sort_direction)
.paginate(page: params[:page], per_page: 20)
end
排序方法。
def sort_column
Vacation.column_names.include?(params[:sort]) ? params[:sort] : 'start_at'
end
def sort_direction
%w(asc desc).include?(params[:direction]) ? params[:direction] : 'asc'
end
更新
Vacation.joins(:person).column_names
返回:
=> ["id", "start_at", "end_at", "free", "reason", "person_id", "accepted"]
答案 0 :(得分:1)
如果您正在关注RailsCast中的指南,您应该有一些代码:
@vocations = Vocation.order(params[:sort] + ' ' + params[:direction])
如果您希望按照另一个模型中的列进行排序,在您的案例Person
模型中,您必须更新查询以加入people
表以使其正常工作。
@vocations = Vocation.includes(:person).order(params[:sort] + ' ' + params[:direction]).references(:people)
在你看来,
= sortable "people.first_name", "Employee"
更新:
您可以更新sort_column
以处理联接表的特殊情况:
JOINED_TABLE_COLUMNS = %w(people.first_name)
def sort_column
if JOINED_TABLE_COLUMNS.include?(params[:sort]) || Vacation.column_names.include?(params[:sort])
params[:sort]
else
'start_at
end
end
答案 1 :(得分:0)
我认为你应该能够解决这个问题:
= sortable "persons.first_name", "Employee"