使用相同的操作在Rails中处理和接收表单

时间:2012-02-03 23:49:10

标签: ruby-on-rails forms validation

我有这样的行动:

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. 处理这种情况的更好方法是什么,表单没有附加到模型上,只有在用户提交表单时才会显示错误?

1 个答案:

答案 0 :(得分:0)

由于您正在使用相同的操作,因此您需要使用flash.now,因此Flash哈希不会持续到下一个操作。

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

此外,它不是必需的,但请考虑使用:

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

然后检查字符串&#34的params [:conditions]的值;接受&#34;即:

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