Как отобразить список ассоциаций has_many_through с ассоциацией в качестве заголовков столбцов и значение сквозного: как запись в строке таблицы?Отображение has_many через ассоциацию как столбец в Active Admin index
У меня есть 3 модели:
class Jobs
attr_accesor :title
has_many :scores
has_many :factors, through: :scores
end
class Scores
attr_accesor :score
belongs_to :job
belongs_to :factor
end
class Factor
attr_accesor :name
has_many :scores
has_many :jobs, through: :scores
end
Я хочу, чтобы иметь возможность показать, в индексе Работа, строка для каждого задания, название каждого фактора в качестве заголовка столбца, и оценки каждого Иов как значение в ячейке.
Я хотел бы ожидать, чтобы сделать что-то подобное в app/admin/jobs.rb
файле:
index do |jobs|
column :title
jobs.scores.each do |score|
column(score.factor.name) { |score| score.score }
end
end
И получить такой вывод:
Job | Education | Experience | Leadership | ... |
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
CEO | 600 | 720 | 580 | ... |
Admin Assistant | 210 | 200 | 150 | ... |
Но activeadmin не кажется, как jobs.scores.each
линии , давая мне следующую ошибку:
undefined method `scores' for
#<ActiveAdmin::Views::IndexAsTable::IndexTableFor:0x00000104d1dad0>
Я думаю, что Мухаммед Awais прав, я думаю, вам нужно изменить свой подход. Сначала убедитесь, что вы выполняете задания, так что у вас есть job.scores, потому что теперь он не узнает, чтобы найти счет, если вы не выполняете итерации по каждому отдельному объекту. Во-вторых, подумайте об этом как файле erb. Все в AA напечатано - поэтому, когда вы говорите job.scores.each, он фактически распечатывает его, как <% = job.score.each do | score | %> вместо <% job.score.each do | score | %>. Дайте мне знать, если это имеет смысл. – eileencodes
Спасибо Эйлин, второй момент новый, я так не думал об этом. Первое имеет смысл, но мне не удалось выяснить, как перебирать задания, чтобы добраться до 'job.scores' в контексте блока' index'. ЛЮБОЙ помощи в этом отношении было бы здорово. – Tonys