【问题标题】:Rails best practice on conditional parameters in a controller actionRails 控制器动作中条件参数的最佳实践
【发布时间】:2010-04-18 03:08:27
【问题描述】:

我有一个控制器创建操作在以下规则集中查找一个或多个参数。假设我们有两个参数,foo 和 bar。规则如下:

1) 如果参数列表中不存在 foo,则必须使用 bar。
2) 如果参数列表中不存在 bar ,则 foo 必须。
3)它们可以共存。它们不能都被省略(这与我上面的规则是多余的:))

任何人都可以在 Rails 中展示如何在控制器中处理此问题的示例吗?我应该使用 before_filter 吗?希望得到一些指导,因为这不是 ActiveRecord 验证的东西。所以我需要直接从控制器逻辑而不是模型逻辑向用户构建错误消息。

对于加分,我以 XML 格式输出错误,所以如果您能说明这是如何完成的,那就太好了。假设我们将资源称为“Lorem”,因此它是通过http://foo/lorem.xml 创建的,并且我们有 lorem_controller.rb。

我正在尝试这样的事情,希望有更清洁的方法:

  def create
    logger.info("request bootstrap: #{params}")
    if params[:foo].nil? && params[:bar].nil?
      @errors = [] ||= << "Must include foo or bar."
      respond_to do |format|
        format.xml { render :layout => false,
                      :xml => @errors.to_xml }
      end
    end
  end

【问题讨论】:

    标签: ruby-on-rails


    【解决方案1】:

    您可以使用 OR 运算符。 例如,如果您将参数作为一个哈希传递。比你可以使用条件

    parameters.key?(:foo ) || parameters.key?(:bar)
    

    如果您可以从您的代码(或描述)中显示更多(您如何传递参数),我可以推荐不太常见的解决方案。

    恕我直言,最好的方法是这段代码

    if params.key?(:foo) || params.key?(:bar)
    

    【讨论】:

    • 不,||这里没有意义。 && 是正确的逻辑。再次阅读我的业务逻辑。这也没有回答最初提出的问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多