ruby on rails 3-rails 3中的重构



我的控制器中有4个操作,并且我有一些条件检查每个动作内部。最好的方法是什么?例如,每个动作要检查的条件都低于

if params[:id] == $boy.id
    @rec = $boy.name
  elsif params[:id] == $girl.id
  @rec = $girl.name
  else
    render :json=>{"Error"=> "Person with #{params[:id]} does not
exists"}  and return
  end

这里有两个选项:

  1. 编写一个方法来检查条件,并将结果返回给调用它的操作
  2. before_filter,但如果您向控制器添加更多操作,则必须为不需要检查条件的操作添加跳过before_filter

示例1:

 def check 
    if params[:id] == $boy.id
      @rec = $boy.name
    elsif params[:id] == $girl.id
      @rec = $girl.name
    else
      @json = {"Error"=> "Person with #{params[:id]} does not exists"}
      return @json
    end
 end
 def some_action
   result = check
   # Use your result in action 
 end 

示例2:

 before_filter: check, :only => [:some_action,:some_action2] //You can as well use except if you want this check to be avoided only for certain actions
  # Use the same definition of check here

 def some_action
    if @rec
      // you code here
    else @json
      // you code here
    end
 end

唯一的区别是,如果您遵循步骤一,那么无论您想在哪里检查条件,都必须调用check方法。如果使用第二个选项,则指定将使用顶部右侧before_filter的操作。

希望这能有所帮助。

在Rails控制器中,如果要在执行多个操作之前/之后执行一些代码,可以使用过滤器。在您的情况下,您可以在筛选前使用。代码看起来像这个

before_filter :check_id
...
private:
 def check_id
  if params[:id] == $boy.id
    @rec = $boy.name
  elsif params[:id] == $girl.id
   @rec = $girl.name
  else
   render :json=>{"Error"=> "Person with #{params[:id]} does not exists"}  and  return
  end
 end

相关内容

  • 没有找到相关文章

最新更新