减法/加法作为参数

时间:2014-06-09 21:49:54

标签: ruby-on-rails ruby ruby-on-rails-4

如何让以下类方法接收一个参数来控制是否应该减去或添加位置(在末尾)1?该值始终为1

def self.update_position(arg)
  self.where(active: true).update_all('position = (position - 1)')
end

1 个答案:

答案 0 :(得分:1)

您可以插入字符串:

def self.update_position(arg)
  self.where(active: true).update_all("position = (position #{arg} 1)")
end

假设您打算致电Class.update_position('-')Class.update_position('+')

就个人而言,我更进一步,通过传递一个不直接内插到字符串中的参数来防止注入风险:

def self.update_position(arg)
  operator = (arg.to_s == 'up' ? '+' : '-')
  self.where(active: true).update_all("position = (position #{operator} 1)")
end

所以这样你就可以调用Class.update_position(:up)来增加,或者减去其他任何东西(Class.update_position(:down))。