Rails在控制器动作中对条件参数进行最佳实践

时间:2010-04-18 03:08:27

标签: ruby-on-rails

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

1)如果参数列表中不存在foo,则必须使用 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

1 个答案:

答案 0 :(得分:-1)

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

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

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

恕我直言最佳方式将是此代码

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