Ruby on Rails - сохранить переключатель, выбранный в режиме редактирования - PullRequest
0 голосов
/ 30 августа 2018

У меня есть форма для создания и форма для редактирования информации на моем сайте. В форме создания пользователь может выбрать некоторые переключатели, такие как «Да» или «Нет», и в моей базе данных эти поля имеют значение Boolean (true или false).

В моем издании формы, как я могу сохранить выбранный переключатель? В настоящее время, если пользователь выбирает какой-либо из параметров, представление редактирования не сохраняет эту информацию и отображает только пустые переключатели.

edit.html.erb

<%= form_tag guide_dog_form_path(@guidedoguser), method: "put" do %>
  <%= radio_button_tag :work, @guidedoguser.work %>
<% end %>

controller.rb

class GuideDogFormsController < ApplicationController

  def create
    @contact = GuideDogForm.new(params[:contact])
    if @contact.save
      GuideDogMailer.delay_for(10.seconds, retry: true).create(@contact)
      render nothing: true, status: 200
    else
      render nothing: true, status: 400
    end
  end

  def edit
    @guidedoguser = GuideDogForm.where(rg: params[:rg]).first
  end

  def update
    @guidedoguser = GuideDogForm.where(rg: params[:rg]).first
    if @guidedoguser.update(work: params[:work])
      redirect_to guide_dog_form_path(@guidedoguser)
    else 
      render 'edit'
    end
  end

end

Как мне показать две опции в переключателях (Да или Нет) и сохранить опции, выбранные при создании?

Спасибо.

1 Ответ

0 голосов
/ 30 августа 2018

Вам не нужно две отдельные формы для этого. Вы можете сделать это только с одним, и используя form_for (https://api.rubyonrails.org/v5.1/classes/ActionView/Helpers/FormHelper.html) вместо form_tag. Если у вас есть модель для работы, вы должны использовать form_for. Form_tag для форм без вспомогательных моделей. В том же духе radio_button_tag - это когда у вас нет вспомогательной модели, а radio_button (https://apidock.com/rails/ActionView/Helpers/FormHelper/radio_button) - когда у вас есть. Поскольку у вас есть модель, вам следует пойти по пути form_tag. Я предлагаю изменить это на (если вы иметь атрибут 'work' в вашей модели GuideDogForm):

edit.html.erb (вы можете скопировать и вставить его в new.html.erb, и он должен работать так, как вы ожидаете для новых записей)

<%= form_for @guidedoguser do do |f| %>
  <%= f.radio_button :work %>
<% end %>

Контроллер:

class GuideDogFormsController < ApplicationController
  def new
    @guidedoguser = GuideDogForm.new
  end

  def create
    @guidedoguser = GuideDogForm.new(guide_dog_params)
    if @guidedoguser.save
      GuideDogMailer.delay_for(10.seconds, retry: true).create(@guidedoguser)
      render nothing: true, status: 200
    else
      render nothing: true, status: 400
    end
  end

  def edit
    @guidedoguser = GuideDogForm.where(rg: params[:rg]).first
  end

  def update
    @guidedoguser = GuideDogForm.where(rg: params[:rg]).first
    if @guidedoguser.update_attributes(guide_dog_params)
      redirect_to guide_dog_form_path(@guidedoguser)
    else 
      render 'edit'
    end
  end

  private

  def guide_dog_params
    # note if you have more fields you want to persist in your model from your form, you will
    # need to add them here after :work
    params.require(:guide_dog_form).permit(:work)
  end
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...