如何让以下类方法接收一个参数来控制是否应该减去或添加位置(在末尾)1
?该值始终为1
。
def self.update_position(arg)
self.where(active: true).update_all('position = (position - 1)')
end
答案 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)
)。