2012-02-03 16 views
0

我有一個這樣的動作:使用相同的操作來處理和接受形式的Rails

def add_credit_card 
    if request.post? 
     unless params[:conditions] 
     flash[:error] = 'You need to accept!' 
     end 
    end 
end 

這個動作呈現以下幾種觀點:

<%= form_tag do %> 
    <fieldset> 
     <%= check_box_tag "conditions"%> I agree to the <%= link_to "Terms and Conditions", consumer_terms_and_conditions_url, :target => "_blank" %> 
    </fieldset> 
    <%= submit_tag "Submit" %> 
<% end %> 

當我做一個GET到行動沒有顯示錯誤。當我使用該框進行提交時,沒有顯示錯誤。當我做第一次提交沒有檢查框時顯示錯誤,但是當我做了另一次提交併且複選框未被選中時,問題就出現了,錯誤仍然存​​在。

我的問題是:

  1. 這是爲什麼發生?
  2. 什麼是更好的方法來處理這種情況,一個表格不附加到模型上,並且錯誤必須在用戶提交表單時顯示?

回答

0

由於您使用的是相同的操作,因此您需要使用flash.now,以便閃存散列不會持續到下一個操作。

flash.now[:error] = 'You need to accept!' 

此外,它不是必需的,但可以考慮使用:

<%= check_box_tag 'conditions', 'accepted' %> 

,然後檢查則params的值:條件] 「接受」 的字符串,即:

unless params[:conditions]=='accepted' 
    flash.now[:error] = 'You need to accept!' 
end 
+0

我編輯過。我錯誤地輸入了它,對不起。這不是問題... – Nobita 2012-02-04 00:25:12

+0

啊好吧,我會從我最初的soln中刪除。我添加了另一個可能的soln。 – miked 2012-02-04 00:26:39

+0

我終於嘗試了這一點,問題是閃存散列堅持下一個請求。既然你不重定向,你會想用flash.now – miked 2012-02-04 01:39:46

相關問題