ActiveAdmin has_many 具有自定义收集顺序

glm*_*lm4 1 activerecord ruby-on-rails activeadmin

鉴于以下模型:

class WorkoutProgram < ApplicationRecord
  has_many :workouts, dependent: :destroy
end

class Workout < ApplicationRecord
  belongs_to :workout_program
end
Run Code Online (Sandbox Code Playgroud)

有没有办法在 ActiveAdmin has_many 输入中设置自定义顺序?我不想启用拖放,所以sortable不是一个选项。这个想法是按照编辑 .csv 文件时添加的相同顺序显示锻炼WorkoutProgram

作为一种解决方法,WorkoutProgram仅为此目的使用另一个 has_many 关系。所以我添加到模型中:

has_many :ordered_workouts, -> { ordered_by_id },
           class_name: Workout.to_s, dependent: :destroy, inverse_of: :workout_program
Run Code Online (Sandbox Code Playgroud)

然后在 ActiveAdmin 页面中使用它,如下所示:

form.has_many :ordered_workouts, allow_destroy: true do...
Run Code Online (Sandbox Code Playgroud)

chu*_*off 5

你可以这样做:

form.has_many :workouts, for: [:workouts, form.object.workouts.ordered_by_id] #, ...
Run Code Online (Sandbox Code Playgroud)