Отправка данных из переключателя в контроллер для проверки значения вложенного атрибута в Rails - PullRequest
0 голосов
/ 04 мая 2019

Мне нужно отправить значение radio button, выбранное со страницы html, на controller. У меня есть модель Question, которая имеет отношение has_many с моделью Option. То, как я делаю это сейчас, выглядит так:

html.erb

<p>
  <strong>Body:</strong>
  <%= @question.body %>
</p>

<p>
  <strong>Option:</strong>
  <% @question.options.each do |p| %>
    <%= radio_button_tag('option',p.is_answer) %>
    <%= p.body %>       
  <% end %>
</p>
<p><%= link_to 'Check Answer', check_answer_question_path(@question) %></p>
<p>
  <strong>User:</strong>
  <%= @question.user.email %>
</p>

модель

class Question < ApplicationRecord
  belongs_to :user
  has_many :options, dependent: :delete_all, :autosave => true
  serialize :options
  validates_length_of :options, maximum: 4

  accepts_nested_attributes_for :options
end
class Option < ApplicationRecord
  belongs_to :question
  validates_associated :question
end

контроллер

def check_answer
  bool_value = p.is_answer
  if(p.is_answer == true)
    do something
  else
    do something else
  end
end

private
    def set_question
      @question = Question.find(params[:id])
    end   

    def question_params
      params.require(:question).permit(:body, options_attributes: [:id, :body, :question_id, :created_at, :updated_at, :is_answer])
    end

Как я могу получить значение p.is_answer, когда выбрана радиокнопка и нажата кнопка Check Answer в контроллере?

1 Ответ

0 голосов
/ 04 мая 2019
  1. В вашем фрагменте «Проверить ответ» - просто ссылка.Поскольку вы хотите отправить несколько атрибутов при щелчке по нему, вы, вероятно, хотите вместо этого отправить форму.
  2. Второй параметр radio_button_tag - это значение, которое ваш контроллер получит в параметрах.Вместо p.is_answer вы, вероятно, захотите иметь p.id.

Документация для форм

Документация для переключателей

PS о том, почему вы должны вместо этого отправлять идентификатор опции: я не уверен, каков ваш бизнес-вариант использования, но если вы хотите определить, какой вариант выбрал пользователь, вы хотите отправить идентификатор опции, т.е.id из опции.Кроме того, пользователь может отправить этот параметр, не зная, какая опция верна.Если это школьный тест, то ученик может обмануть:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...