2011-08-25 57 views
0

作为Ruby on Rails 3开发人员的开始,我正在寻找关于如何最好使用一组单选按钮来验证表单的建议。这种特殊的形式是一个具有多种形式的网络应用程序的一部分 - 我的控制器根据选择的答案将流程定向到不同的形式。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") 

我选择去的默认值解决方案,没有任何验证需求,但想知道如果我的用户不想要预先选择的答案,是否有更好的方式来设置我的应用程序。

回答

1

它可能取决于你想要它做什么。

你可能会自己检查零,当无,重定向回到窗体,并在flash [:error]中显示错误消息。

+0

谢谢,这工作。 – JW8

0

工作溶液 作为马林的建议,我检查空,然后在闪蒸传递[:错误]消息。

控制器片断

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 %>