【问题标题】:Using same action to process and receive form in Rails在 Rails 中使用相同的操作来处理和接收表单
【发布时间】:2012-02-03 23:49:10
【问题描述】:

我有这样的动作:

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. 如果表单未附加到模型并且必须在用户提交表单时才显示错误,那么处理这种情况的更好方法是什么?

【问题讨论】:

    标签: ruby-on-rails forms validation


    【解决方案1】:

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

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

    另外,这不是必需的,但请考虑使用:

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

    然后检查字符串“accepted”的 params[:conditions] 的值,即:

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

    【讨论】:

    • 啊,好吧,我会从我最初的解决方案中删除它。我添加了另一个可能的解决方案。
    • 我终于开始尝试这个,问题是闪存哈希持续到下一个请求。由于您没有重定向,因此您需要使用 flash.now
    猜你喜欢
    • 2019-01-17
    • 1970-01-01
    • 2011-08-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-07
    • 1970-01-01
    相关资源
    最近更新 更多