2016-06-29 4 views
0

У меня возникли проблемы с отображением выбранных переключателей в действии edit.Показать выбранные переключатели в режиме редактирования

Приложение позволяет user создать свои собственные forms (обзоры), а затем применить их (ответить на них) к их children.

Вопрос:

При оказании new действия, которое позволяет пользователю answer его формы, forms дисплея хорошо, и сохранить в базу данных должным образом. Назначает выбор содержимого ответа.

С другой стороны, edit action дубликаты варианты, показывающие те, которые были выбраны И новые. Я проверяю ответы id и отсылаю 2 раза каждый ответ.

Любые идеи о том, как исправить это поведение?

Соответствующий код:

_form.html.erb

<%= f.fields_for :answers do |a| %> 

    <% choices.each do |choice| %> 

    <%= a.radio_button :a_content, choice.c_description %> 
    <%= a.label :a_content, choice.c_description, :value => choice.c_description, class: 'no-margin' %> 

    <% end %> 

    <%= a.hidden_field :question_id, :value => question.id %> 

<% end %> 

answered_forms_controller.rb

def new 
    @child = current_user.children.find(params[:child_id]) 
    @form = current_user.forms.find(params[:form_id]) 
    @answered_form = @child.answered_forms.new(form_id: params[:form_id]) 
    @answered_form.answers.build 
    end 

    def create 
    @answered_form = AnsweredForm.create(answered_form_params) 
    if @answered_form.save 
     flash[:success] = "Nuevo cuestionario " + @answered_form.form.f_title + " aplicado!" 
     redirect_to current_user.children.find(params[:child_id]) 
    else 
     render 'new' 
    end 
    end 

    def edit 
    @child = current_user.children.find(params[:child_id]) 
    @form = current_user.forms.find(params[:form_id]) 
    end 

    def update 
    if @answered_form.update_attributes(answered_form_params) 
     flash[:success] = "Cuestionario para paciente actualizado!" 
     redirect_to @answered_form.child 
    else 
     render 'edit' 
    end 
    end 

UPDATE:

Теперь я понял, что дублирование происходит потому, что в действии new я получил @answered_form.answers.build, но если я удалю его, я не вижу поля при создании нового answered_form.

Я знал это, потому что пытался поставить в 2 раза @answered_form.answers.build в new действий, а затем получил дублируется при создании и утроенным при редактировании, так edit всегда добавляет поля еще один раз, чем new действия, если у вас есть что-то вроде @answered_form.answers.build в действии new.

ответ

0

Если вы хотите предварительно выбрать свой переключатель, это означает, что вы уже сохранили логическое значение в своей базе данных для этого поля. Просто вставьте это значение после проверяемой опции внутри вашего помощника:

radio_button_tag («что-то», то, проверенным = значение)

должен работать так же с f.radio_button

+0

Вы уверены, что это ** есть ** быть ** ** логическое значение? Я думал, что это должно быть одинаковое значение, пусть строка, целое число, логическое и т. Д. В любом случае ваш ответ, похоже, не работает. – aleherzko

+0

Моя ошибка: вы правы, это не логическое значение, а второй параметр в radion_button_tag, показанный выше. Просто я сохранил логическое значение в моей базе данных. Допустим, у меня есть 4 радиокнопки под названием Car, с разными значениями: Ford, Fiat, Chrysler, Cadillac. Я не сохранил бренд автомобиля внутри одного поля моей модели, но вместо этого у меня есть 4 поля, каждый из которых заполнен True или False, для каждого возможного бренда. Это индивидуальный выбор. Хотя, сохраняете ли вы фактическое значение в своей базе данных или булево значение. «cheched» может быть присвоено только логическое значение. – Maxence

+0

Я обновлен с прогрессом, вы думаете, что можете помочь мне с новой информацией, которую я предоставил? – aleherzko

1

Я считаю, что вы должны быть в состоянии чтобы сделать что-то вроде:

<%= f.collection_radio_buttons :a_content, choice, :id, :c_description, {}, { checked: choices.selected_response_id } %> 

С этим вы сможете создавать свои переключатели для всех ваших ответов.

PS: у конечного хэша есть условие для проверки выбранного параметра choices.selected_response_id, вы должны изменить его на выбранный ответ в своей модели ответа.

Хотя Rails пытается вывести предварительно выбранный переключатель, это может не всегда работать из-за причины этого финального хэша.

Read more here

+0

Не могли бы вы подробнее рассказать о методе 'selected_response_id'? Я немного потерял это. – aleherzko

Смежные вопросы