新手问题 代码优化

jacksv123 · 2013年05月03日 · 最后由 jacksv123 回复于 2013年05月03日 · 2855 次阅读

flash[:notice] = '操作错误!' and redirect_to params[:rt] if topic.nil? flash[:notice] = '操作错误 1!' and redirect_to params[:rt] if topic1.nil? flash[:notice] = '操作错误 2' and redirect_to params[:rt] if topic2.nil?

以上代码不符合 RUBY 的优雅设计

redirect_to params[:rt] 用了 3 次,大家有什么好的代码编写方法?

topics = [topic,topic1,topic2] redirect_to params[:rt] if topics.any?{|x| x.nil?}

#1 楼 @chenge 如果我判断条件不同呢?例如@user.age == 16, 或者其他呢?看看大家的思路

反正最后都是 redirect_to params[:rt] 那把他单独写在最后不久可以了么

err = '操作错误!'  if topic.nil?
err = '操作错误1!' if topic1.nil?
err = '操作错误2!' if topic2.nil?

redict_to params[:rt], notice: err if err

代码还有些问题:

  1. 貌似是用 rails 的,推荐用 blank? 代替 nil?
  2. redirect_to_params[:rt] 可能有安全漏洞

#4 楼 @qhwa 有怎么的安全漏洞,请教一下,还有,redirect_to params[:rt] 不可以单独写出来,后面还有代码的,只是我不贴出来

#5 楼 @jacksv123 攻击者可以写一个钓鱼网站地址,所以通常要做一下域名白名单校验

#2 楼 @jacksv123 基本原则就是把共用的部分抽出来,判断条件不同要结合上下文来优化,例如你可以把每个条件都定义成一个 lambda. 在判断的时候 call 一下。但要注意代码优化和程序易读性的平衡。有些时候用 CASE WHEN 或 IF ELSE END 反而更好。

#6 楼 @qhwa param[:rt] 不是存进或读取数据库的,是上一个本站页面传过来的,本人菜鸟,请问有什么机会写钓鱼网址吗?

#8 楼 @jacksv123 钓鱼网址不需要存到数据库也能发挥作用。把 url 发给别人,诱骗点击。

<a href="http://yoursite.com/controller/action?rt=http://badsite.com">美女图</a>

或者把这个地址在 QQ 上发给别人

#9 楼 @qhwa 域名白名单怎么弄,RAILS 已经有方法解决了吗?

需要 登录 后方可回复, 如果你还没有账号请 注册新账号