У меня есть довольно простое приложение Rails 4, и я использую вложенные формы Cocoon для управления ассоциацией модели has_many... :through
.
class Student < ActiveRecord::Base
has_many :evaluations
has_many :assessments, through: :evaluations
# ... etc
end
class Evaluation < ActiveRecord::Base
belongs_to :student
belongs_to :assessment
# ... etc
end
class Assessment < ActiveRecord::Base
has_many :evaluations
has_many :students, through: :evaluations
accepts_nested_attributes_for :evaluation, reject_if: :all_blank
# ... etc
end
Когда я использую Cocoon в представлении, я хочу использовать представление New Assessment
для предварительного заполнения всех Student
записей, чтобы создать новую Evaluation
для каждой из них. Я не хочу выполнять какую-то хакерскую логику на стороне контроллера, чтобы вручную добавлять новые записи, так как мне структурировать входящий запрос? С Cocoon я вижу, что запросы имеют некоторый номер в пространстве, где будет идти id
(ниже я заменил их на ??
).
{"utf8"=>"✓", "authenticity_token"=>"whatever", "assessment"=>{"description"=>"quiz 3", "date(3i)"=>"24", "date(2i)"=>"10", "date(1i)"=>"2015", "assessments_attributes"=>{"??"=>{"student_id"=>"2", "grade" => "A"}, "??"=>{"student_id"=>"1", "grade" => "B"}, "??"=>{"student_id"=>"3", "grade"=>"C"}}, }}, "commit"=>"Create Assessment"}
В исходном коде Coccoon я вижу, что это каким-то образом генерируется, но я не могу понять, как это работает с движком Rails, чтобы превратить это в новую запись без ID
.
Какой алгоритм я должен использовать (или правила, которым я должен следовать), чтобы заполнить id
выше, чтобы сделать новую запись?
@assessment.new(assessment_params)
, а затем@assessment.save
- person charlie   schedule 24.10.2015new
и использования вложенных форм иaccepts_nested_attributes_for
. Я просто передаю параметры из белого списка методуnew
, и Rails создает родительскийassessment
и связанные с нимevaluation
объекты. - person charlie   schedule 24.10.2015