ruby-on-rails - 在rails activeadmin中对多个连接table_for进行排序
问题描述
嗨,我尝试在 rails 上对列进行排序,activeadmin。代码就是这样。
# app/admin/users.rb
show do
tab do
table_for do
# here comes my columns
我可以从Sort a table_for in rails activeadmin 中找到一个好的排序解决方案。所以我尝试了这段代码,它可以工作。
# app/admin/users.rb
show do
tab do
table_for user.supports.order(params[:order].gsub('_', ' ')), sortable: true do
column 'step', sortable: :step do |support|
support.step
end
但是如何在同一个 table_for 中对这一列进行排序?
# app/admin/users.rb
column 'date', sortable: 'payment.date' do |support|
support.payment.date
end
我尝试了很多东西,但无法做到。我的型号代码如下。
# app/models/payment.rb
class Payment < ApplicationRecord
belongs_to :support
# app/models/support.rb
class CampaignSupport < ApplicationRecord
belongs_to :user
has_many :payment
# app/models/user.rb
class User < ApplicationRecord
has_many :support
谢谢
解决方案
这是您可以做的事情的一个例子(即使它不理想......):
# app/admin/users.rb
show do
tab do
# Use `split` in case you have columns like `created_at` (which won't work with `gsub('_', ' ')`)
# In case `params[:order]` isn't defined, `step DESC` is the default order
split_order = params[:order]&.split('_') || ['step', 'desc']
order_direction = split_order.pop
order_column = split_order.join('_')
supports =
user
.supports
.joins('LEFT JOIN payments ON payments.support_id = supports.id')
.order(order_column => order_direction)
table_for supports, sortable: true do
column 'step', sortable: :step { |support| support.step }
column 'date', sortable: 'payments.date' { |support| support.payment.date }
end
end
end
推荐阅读
- node.js - 我的全栈 vue express 应用程序登录应用程序错误
- python - 用“INF”替换 NaN 值
- c++ - QWebSocket Hello World 示例
- android - 单击后退按钮转到上一个活动
- python - 为创建的过滤列设置特定值
- angular - 在 url 字符串中插入模板值
- python - 在python中导入邮递员集合
- remote-access - openvpn 主机到主机访问子网家庭到远程
- javascript - 如果完全在视图中(大于视口),intersectionObserver 获得比率 1
- python-3.x - 如何使用python将xml块添加到原始xml结构中