在Rails 3中为find_by_id添加附加条件



我在Mac 上使用Rails 3.2.11

我有一个很好的声明:

object= Object.find_by_id(params[:id])

我正试图为该语句添加一个条件,所以我这样做了:

object = Object.where("id = :id AND level <= :level",{:id => params[:id], :level =>     current_user.level})

这种方法会有风险吗?有其他选择吗?

如果ActiveRecord继续维护清除输入的合同,则此语句不会带来任何风险。另一种选择是作用域,但实际上只是用不同的语法做同样的事情。

您可以做的一件事是设置一个定义level限制的默认范围,然后您可以只执行一个标准的find_by_id。但如果这是不可取的,只需正确使用语法:

Object.where(id: params[:id], level: current_user.level)

没有风险,但其定义方式并不容易理解。

简单的语句会起作用:

object = Object.where("id = ? AND level <= ?",{params[:id],   current_user.level})

只要让rails处理值的净化,就不会有任何问题。我的意思是使用用户输入(如)从rails运行sql命令

Object.where("id = #{params[:id]} AND level <= #{current_user.level}")

将容易受到sql注入的攻击

相关内容

  • 没有找到相关文章

最新更新