在 rails activeadmin 中对多个连接 table_for 进行排序
Sort multiple joins table_for in rails activeadmin
您好,我尝试对 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
您好,我尝试对 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