Да, это привело меня к новой ошибке с загрузчиком файла изображения, нуждающимся в case_id. В основном это сводится к тому, что у меня должен быть этот Case Id, и мне также понадобится этот answer_Id в какой-то момент, чтобы сделать это динамически, поэтому я просто упросту это, сделаю это вручную и сохраню свои проверки. Большое спасибо за вашу помощь!
ложенная модель отлично работает на первом уровне. Но у меня сложилось впечатление, что вы можете пройти много уровней, используя accepts_nested_attributes_for. Но когда я пытаюсь выполнить приведенный ниже код, атрибуты «Изображение» присоединяются к модели «Вопрос» верхнего уровня, и она не работает при отправке формы с неизвестным атрибутом «Изображение».
Я мог бы делать вставки вручную, используя данные формы, но если бы Rails мог обрабатывать их автоматически, это было бы лучше по очевидным причинам.
Что я делаю неправильно? Я пытался изменить | af | в "поля для: изображение сделать" его собственное уникальное имя, но это не имело никакого эффекта.
Модели:
class Question < ActiveRecord::Base
has_one :answer
accepts_nested_attributes_for :answer
end
class Answer < ActiveRecord::Base
belongs_to :question
has_one :image
accepts_nested_attributes_for :image
end
class Image < ActiveRecord::Base
belongs_to :answer
end
контроллер:
def new
@question = Question.new
answer = @question.build_answer
image = answer.build_image
@case_id = params[:id]
render :layout => 'application', :template => '/questions/form'
end
def create
question_data = params[:question]
@question = Question.new(question_data)
if @question.save
...
end
Посмотреть:
= form_for @question, :html => {:multipart => true} do |f|
= f.label :text, "Question Text:"
= f.text_area :text, :rows => 7
%br
%br
=f.fields_for :answer, do |af|
= af.label :body, "Answer Text:"
= af.text_area :body, :rows => 7
%br
%br
= f.fields_for :image do |af|
= af.label :title, "Image Title:"
= af.text_field :title
%br
= af.label :file, "Image File:"
= af.file_field :file
%br
= af.label :caption, "Image Caption:"
= af.text_area :caption, :rows => 7
= hidden_field_tag("case_id", value = @case_id)
= f.submit