Мне трудно понять, как это сделать. У меня есть две модели, проект и курс.
#project.rb
belongs_to :course
attr_accessible :course_id, :course
accepts_nested_attributes_for :course, reject_if: lambda { |a| a[:course_id] == 0 }
#course.rb
has_many :projects
На странице Projects#new
(дочерний объект) я хочу ввести имя нового course
и создать родительский объект.
Вот моя попытка просмотра, но, похоже, он работает неправильно.
= form_for [@user, @project] do |f|
# Other fields
= fields_for :course do |builder|
= builder.label :name, 'Course Name'
= builder.text_field :name
= f.submit
Я буду использовать этот родительский объект позже, чтобы создавать больше проектов, но сейчас давайте предположим, что он не существует.
ОБНОВЛЕНИЕ 1
Я изменил мои fields_for, чтобы быть (согласно запросу Райана):
= form_for [@user, @project] do |f|
# Other fields
= f.fields_for :course do |builder|
= builder.label :name, 'Course Name'
= builder.text_field :name
= f.submit
Я использую haml, поэтому должен отображаться =
, но поля для даже не отображаются на странице или в сгенерированном html. Любой ключ к пониманию того, почему это так? (Кнопка подтверждения действительно отображается)
ОБНОВЛЕНИЕ 2
Я нашел потенциальное решение, но я не уверен, что это правильный подход к этому. В контроллере мне нужно построить курс, чтобы поля fields_for могли отображаться.
# ProjectsController
def new
@project = @user.projects.new
@project.build_course
end
# project.rb
attr_accessible :course_attributes
# So yes, I now see what you were talking about, regarding the course_attributes