Вы можете вызвать действие редактирования существующего опроса, передав ему выбранный опрос:
edit_survey_path(@survey)
Затем вы можете загрузить выбранный опрос в этом действии:
def edit
@survey = Survey.find(params[:id])
end
Вв представлении edit
используйте вложенную форму для добавления / удаления вопросов, а затем в действии update
обновление атрибутов опросов также добавит и удалит вопросы.
def update
@survey = Survey.find(params[:id])
@survey.update_attributes(params[:survey])
redirect_to ...
end
Все этобудет работать при условии, что вы установили accepts_nested_attributes_for :questions
в модели survey
.
Мой ответ здесь - это сводка скриншота Райана Бейтса о вложенных формах , который, я думаю, вы уже сделаливидно, исходя из сходства вашего примера и его.
Здесь я хотел бы отметить, что вы можете достичь того, чего хотите, используя точно такой же код, однако используя действия редактирования / обновления в вашей родительской модели вместо новых / создания в дочерней модели.
Редактировать:
Чтобы назначить текущего пользователя для вопроса опроса, выполните явное назначение в действии new
и edit
:
def new
@survey = Survey.new
3.times do
question = @survey.questions.build(:user_id => current_user.id)
end
end
def edit
# find the preselected Survey...
@survey = Survey.find(params[:id])
# This adds a (one) new empty question, consider doing it via Javascript
# for adding multiple questions.
@survey.questions.build(:user_id => current_user.id)
end
В вашей форме для questions
добавьте:
<%= form_builder.hidden_field :user_id %>
Не забудьте заменить form_builder
на ваш реальный объект построения форм.
Теперь всеНовые вопросы будут назначены текущему пользователю, потому что текущий пользователь был отправлен в форме вместе с другими атрибутами для questions
.