Более общее решение, избегая жесткого кода и заполнения «NA» для отсутствующих данных:
my_dict = {('A1', 'A2'): 0.6, ('A3', 'A1'): 1, ('A2', 'A2'): 1, ('A2', 'A1'): 0.3}
labs = []
for key in my_dict.keys():
for k in key:
if k not in labs:
labs.append(k)
labs = sorted(labs)
print("Table\t" + "\t\t".join(labs))
for i in labs:
print(i, end="\t\t")
for j in labs:
try:
print(my_dict[(i, j)], end="\t\t")
except KeyError:
print("NA", end="\t\t")
print()
Table A1 A2 A3
A1 NA 0.6 NA
A2 0.3 1 NA
A3 1 NA NA
Я считаю, что проблема здесь в том, что синтаксис вашей строки fields_for в вашем представлении.
Измените f.fields_for @participant.student_detail do |student_detail_field|
на f.fields_for :student_detail, @participant.student_detail do |student_detail_field|
Я бы поспорил, если бы вы поместили в свой контроллер оператор binging.pry или put, чтобы увидеть, что ваши параметры student_detail_attributes даже не добраться до ваших параметров. Вы можете просто вставить puts params.inspect
в свой контроллер, чтобы проверить, поступают ли параметры так, как вы ожидаете. Ваш сильный синтаксис params выглядит корректно, как и модели, поэтому я думаю, что это проблема с вашими взглядами.
РЕДАКТИРОВАТЬ
Вот еще несколько вещей, которые можно попробовать. Как я упоминал в своем комментарии, я обычно не делал бы
@participant = Participant.create(participant_params)
Я бы просто сделал:
@participant = Participant.new(participant_params)
if @participant.save
#etc
end
Выше также будет очищать ваш код немного. (Также я заметил, что у вас нет случая в этом действии для того, что делать, когда участник не сохраняет - в качестве примечания вы должны написать некоторый код для обработки этого)
Также, если ни один из этих выше работы, иногда я обнаружив, что с accept_nested_attributes я должен установить модели как "обратные" друг другу. См. Эту статью для получения дополнительной информации: https://robots.thoughtbot.com/accepts-nested-attributes-for-with-has-many-through - о has_many, но я думаю, что он должен также Относитесь к has_one - попробуйте в модели Участника:
has_one :student_detail, :dependent => :destroy, inverse_of: :participant
Посмотрите, получит ли какой-либо из вышеперечисленных (или сочетание обоих) сохранение вложенной модели.