Как начинающий разработчик 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>

<% конец%>

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")

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

0
JW8 25 Авг 2011 в 21:00

2 ответа

Лучший ответ

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

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

1
Marlin Pierce 25 Авг 2011 в 20:48

Рабочее решение Как и предложил Марлин, я проверил значение null, а затем передал мгновенное сообщение [: 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 %>
0
JW8 26 Авг 2011 в 17:37