Ruby on rails 按“所属对象”关系中的父项订购“活动管理”列
我有两种型号:Ruby on rails 按“所属对象”关系中的父项订购“活动管理”列,ruby-on-rails,ruby,ruby-on-rails-4,activerecord,activeadmin,Ruby On Rails,Ruby,Ruby On Rails 4,Activerecord,Activeadmin,我有两种型号:show\u request和show。show\u请求属于show,而show有许多show\u请求。在active\u admin中的show\u request页面上,我想通过show的创建的值来订购show\u requests。以下是我目前的代码: ActiveAdmin.register ShowRequest do controller do def scoped_collection end_of_association_chain.inc
show\u request
和show
。show\u请求
属于show
,而show
有许多show\u请求
。在active\u admin中的show\u request
页面上,我想通过show
的创建的值来订购show\u requests
。以下是我目前的代码:
ActiveAdmin.register ShowRequest do
controller do
def scoped_collection
end_of_association_chain.includes(:show)
#I also tried ShowRequest.includes(:show)
end
end
index do
column 'Show', sortable: "shows.created_at_asc" do |show_req|
link_to show_req.show.name, admin_show_path(show_req.show)
end
end
end
以下是服务器日志:
Started GET "/admin/show_requests" for 127.0.0.1 at 2015-09-18 09:35:36 -0400
Processing by Admin::ShowRequestsController#index as HTML
AdminUser Load (0.3ms) SELECT "admin_users".* FROM "admin_users" WHERE "admin_users"."id" = 1 ORDER BY "admin_users"."id" ASC LIMIT 1
(1.2ms) SELECT COUNT(*) FROM "show_requests" WHERE (not_going_to_show = 'f' OR i_want_my_horse_to_compete = 't')
(0.2ms) SELECT COUNT(*) FROM "show_requests"
(0.2ms) SELECT COUNT(*) FROM "show_requests" WHERE (not_going_to_show = 't' AND i_want_my_horse_to_compete = 'f')
(0.3ms) SELECT COUNT(count_column) FROM (SELECT 1 AS count_column FROM "show_requests" WHERE (not_going_to_show = 'f' OR i_want_my_horse_to_compete = 't') LIMIT 30 OFFSET 0) subquery_for_count
CACHE (0.0ms) SELECT COUNT(count_column) FROM (SELECT 1 AS count_column FROM "show_requests" WHERE (not_going_to_show = 'f' OR i_want_my_horse_to_compete = 't') LIMIT 30 OFFSET 0) subquery_for_count
CACHE (0.0ms) SELECT COUNT(*) FROM "show_requests" WHERE (not_going_to_show = 'f' OR i_want_my_horse_to_compete = 't')
CACHE (0.0ms) SELECT COUNT(count_column) FROM (SELECT 1 AS count_column FROM "show_requests" WHERE (not_going_to_show = 'f' OR i_want_my_horse_to_compete = 't') LIMIT 30 OFFSET 0) subquery_for_count
ShowRequest Load (2.0ms) SELECT "show_requests".* FROM "show_requests" WHERE (not_going_to_show = 'f' OR i_want_my_horse_to_compete = 't') ORDER BY "show_requests"."id" desc LIMIT 30 OFFSET 0
Show Load (9.7ms) SELECT "shows".* FROM "shows" WHERE "shows"."id" IN (2, 1)
User Load (0.4ms) SELECT "users".* FROM "users" WHERE "users"."id" = $1 LIMIT 1 [["id", 2]]
User Load (0.2ms) SELECT "users".* FROM "users" WHERE "users"."id" = $1 LIMIT 1 [["id", 1]]
CACHE (0.0ms) SELECT "users".* FROM "users" WHERE "users"."id" = $1 LIMIT 1 [["id", 1]]
Show Load (0.2ms) SELECT "shows".* FROM "shows"
User Load (0.2ms) SELECT "users".* FROM "users"
这是行不通的。这根本不会影响列的顺序。如何修复此问题?查看日志的这一部分:
ShowRequest Load (2.0ms) SELECT "show_requests".* FROM "show_requests" WHERE (not_going_to_show = 'f' OR i_want_my_horse_to_compete = 't') ORDER BY "show_requests"."id" desc LIMIT 30 OFFSET 0
Show Load (9.7ms) SELECT "shows".* FROM "shows" WHERE "shows"."id" IN (2, 1)
您可以看到,ShowRequest
s和Show
s在单独的查询中加载sortable
在这里不起作用,因为在没有联接的情况下,不能按一个表的字段对另一个表进行排序。修复方法应该是告诉ActiveRecord您需要在查询中引用shows
表:
controller do
def scoped_collection
super.includes(:show).references(:shows)
end
end
index do
column :show, sortable: 'shows.created_at'
end
引用
仅适用于包含
,并在加载时强制Rails执行连接 查看日志的这一部分:
ShowRequest Load (2.0ms) SELECT "show_requests".* FROM "show_requests" WHERE (not_going_to_show = 'f' OR i_want_my_horse_to_compete = 't') ORDER BY "show_requests"."id" desc LIMIT 30 OFFSET 0
Show Load (9.7ms) SELECT "shows".* FROM "shows" WHERE "shows"."id" IN (2, 1)
您可以看到,ShowRequest
s和Show
s在单独的查询中加载sortable
在这里不起作用,因为在没有联接的情况下,不能按一个表的字段对另一个表进行排序。修复方法应该是告诉ActiveRecord您需要在查询中引用shows
表:
controller do
def scoped_collection
super.includes(:show).references(:shows)
end
end
index do
column :show, sortable: 'shows.created_at'
end
引用
仅适用于包含
,并在加载时强制Rails执行连接 阿萨,我试过了,但没用。没有任何更改。如果从可排序行中删除\u asc
部分,会发生什么情况。更改如下列'Show',可排序:“shows.created_at“do | Show|u req |
谢谢,尝试过,但也没有任何效果。有趣的是,无论我写什么,都没有效果。例如,如果我写show.created_at_fdskjfsdlkj
则没有区别。hmmm根据文档关联排序,如果您添加此super.includes:show
在范围的_集合
操作中,在show列中执行此操作列“show”,可排序:“show.created_at”
它应该可以工作,它只是试图从协会访问那个专栏。阿萨,我试过了,但什么也没做。没有任何更改。如果从可排序行中删除\u asc
部分,会发生什么情况。更改如下列'Show',可排序:“shows.created_at“do | Show|u req |
谢谢,尝试过,但也没有任何效果。有趣的是,无论我写什么,都没有效果。例如,如果我写show.created_at_fdskjfsdlkj
则没有区别。hmmm根据文档关联排序,如果您添加此super.includes:show
在范围的_集合
操作中,在show列中执行此操作列“show”,可排序:“show.created_at”
它应该可以工作,它只是试图从协会访问该专栏。谢谢?应该是:show还是:show?Includes与:show不兼容,因此我将其更改为:show。但是它仍然不会影响订单,虽然它正在更改服务器日志您是对的,它应该是:show
,对于包括,但是仍然是:show
,对于引用
。它应该是显示。在处创建。对于references和sortable,您都引用了表名。感谢Ahmaclod,尝试了这个方法,但没有更改,只是服务器日志现在不同了。不过,它不允许我将日志放在评论中。上面说它们太长了。有没有别的办法把它们挂起来?谢谢?应该是:show还是:show?Includes与:show不兼容,因此我将其更改为:show。但是它仍然不会影响订单,虽然它正在更改服务器日志您是对的,它应该是:show
,对于包括,但是仍然是:show
,对于引用
。它应该是显示。在处创建。对于references和sortable,您都引用了表名。感谢Ahmaclod,尝试了这个方法,但没有更改,只是服务器日志现在不同了。不过,它不允许我将日志放在评论中。上面说它们太长了。有没有别的办法把它们放上去?