2011-08-25 89 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 %>