在我的 Rails 应用程序中,我想验证filter
and post_type
params.
两者都是可选的,但如果它们存在,则它们必须具有一个值,并且必须具有与有效值数组中的一个相匹配的值。
在我的控制器中,我有两种检查它们的方法:
def validate_filter
if params.has_key?(:filter)
if params[:filter].present?
if ['popular', 'following', 'picks', 'promoted', 'first-posts'].include?(params[:filter])
return true
else
return false
end
else
return false
end
else
return true
end
end
def validate_post_type
if params.has_key?(:post_type)
if params[:post_type].present?
if ['discussions', 'snaps', 'code', 'links'].include?(params[:post_type])
return true
else
return false
end
else
return false
end
else
return true
end
end
然后在我的主控制器方法中我这样做:
def index
raise ActionController::RoutingError.new('Not Found') unless validate_filter && validate_post_type
...
所以这意味着post_type=
and post_type=cam
会返回 404 但是post_type=snaps
会返回true。
有没有更好的方法来验证传递的参数是否有效,但对于空参数和密钥本身是否存在。仅使用blank?
and present?
在这种情况下还不够。
我可能会将此逻辑移至模型中,但如果您确实希望在控制器中使用它,则可以简化它。
def validate_filer
return true unless params.has_key?(:filter)
['popular', 'following', 'picks', 'promoted', 'first-posts'].include?(params[:filter])
end
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)