Как начинающий разработчик 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")
Я решил использовать решение по умолчанию, которое устранило необходимость в проверке, но мне было интересно, есть ли лучший способ настроить мое приложение, если мои пользователи не хотят предварительно выбранный ответ.
2 ответа
Это может зависеть от того, что вы от него хотите.
Вы можете проверить наличие nil самостоятельно, а когда nil, перенаправить обратно в форму с сообщением об ошибке во flash [: error].
Рабочее решение Как и предложил Марлин, я проверил значение 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 %>
Похожие вопросы
Новые вопросы
ruby-on-rails
Ruby on Rails - это полнофункциональная платформа веб-приложений с открытым исходным кодом, написанная на Ruby. Он следует популярной модели фреймворка MVC и известен своим подходом «соглашение поверх конфигурации» при разработке приложений.