Rails 3 - проверка форм только с одним набором радиокнопок - PullRequest
0 голосов
/ 25 августа 2011

Как начинающий разработчик Ruby on Rails 3, я ищу рекомендации о том, как лучше всего проверить форму с помощью всего одного набора переключателей. Эта конкретная форма является частью веб-приложения с несколькими формами - моим контроллером для направления потока в разные формы в зависимости от выбранного ответа.

Мой фрагмент html.erb:

<%= form_for @selection do |f| %>
<%= f.error_messages %>
<div class="field">
  <%= f.radio_button :answer, 'Y' %>
  <%= f.label :answer, 'Y' %>
  <br/>
  <%= f.radio_button :answer, 'N' %>
  <%= f.label :answer, 'N' %>
</div>

<div class="action">
  <%= submit_tag 'Save', :name => 'save_button' %>
  <%= submit_tag 'Continue', :name => 'submit' %>
</div>

<% end%>

Selection.rb (модель):

require 'active_model'

class Selection
  include ActiveModel::Validations
  include ActiveModel::Conversion
  extend ActiveModel::Naming

  attr_accessor :answer

  validates_presence_of :answer

  def initialize(attributes = {})
    attributes.each do |name, value|
      send("#{name}=", value)
    end
  end

  def persisted?
    false
  end
end

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

@selection = Selection.new(:answer => "N")

Я решил использовать решение по умолчанию, которое избавило от необходимости проверки, но мне было интересно, есть ли лучший способ настроить мое приложение, если мои пользователи не хотят предварительно выбранный ответ.

Ответы [ 2 ]

1 голос
/ 26 августа 2011

Это может зависеть от того, что вы хотите, чтобы он делал.

Вы можете проверить ноль самостоятельно, а когда ноль, перенаправить обратно в форму с сообщением об ошибке во flash [: error].

0 голосов
/ 26 августа 2011

Рабочий раствор Как и предположил Марлин, я проверил нулевое значение, а затем передал мгновенное сообщение [: error].

Фрагмент контроллера

if params[:answer].nil?
  flash[:error] = "Please make a selection"
  redirect_to selections_path
end

Просмотр фрагмента

<% unless flash[:error].blank? %>
    <div id="notification_error"><%= flash[:error] %></div>
<% end %>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...