如果无效,如何 'drop' 一个 POST 请求

How to 'drop' a POST request if it is invalid

如果请求被视为无效,您如何编写一个忽略请求的前置过滤器?

最简单的设计是检查传入请求中是否存在所有字段。如果其中之一不是,我希望 Rails 应用程序 return 提供足够的信息,以便我可以测试验证。

现在,我有一个很简单的想法:

class ListenerController < ApplicationController
  skip_before_filter :requires_login, :requires_employee
  before_filter :validate
  protect_from_forgery except: :create

  def create
    render nothing: true
    Listener.process(params)
  end

  private

  def validate
    return_invalid unless params[:id].present?
    return_invalid unless params[:content].present?
    return_invalid unless params[:summary].present?
    return_invalid unless params[:displayName].present?
    true
  end

  def return_invalid
    #do something to return simple message
  end
end

谢谢。

您可以呈现 400 状态代码。

def return_invalid
  head(400)
end

Rails 将立即 return 在过滤器的末尾并呈现状态代码。

如果您想要更用户友好的内容(例如一条消息),则重定向到一个操作(相同或 "new")并将消息作为 flash 消息传递。

def return_invalid
  redirect_to { action: "new" }, alert: "Something is wrong"
end