我的控制器中有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
这里有两个选项:
- 编写一个方法来检查条件,并将结果返回给调用它的操作
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