我有一组id,存储在一些外部存储(rails cache或redis)中.在控制器的操作中,我获取此数据并使用它选择对象,即
ids = [5, 1, 17, 84] # really fetched from external source
result = MyModel.where(:id => ids)
Run Code Online (Sandbox Code Playgroud)
我也希望它的顺序与array_of id中的id相同:
ids == result.map(&:id) # => true
Run Code Online (Sandbox Code Playgroud)
作为解决方法,我使用mysql FIELD函数排序:
MyModel.where(:id => ids).order("FIELD(id, #{ids.join ', '})")
Run Code Online (Sandbox Code Playgroud)
但我不喜欢这种方法,因为它是特定于mysql的,并且在大ids数组的情况下创建非常长的查询.有没有更好的,与DB无关的方法呢?从数据库获取未分类的数据并在ruby端进行排序是不可取的,因为它资源昂贵并且难以与分页一起使用.
谢谢.
可能重复:
Emacs ruby-mode缩进行为
我有一长串参数的方法.我想把它们移到另一条线上.问题是,如果括号出现,emacs只会缩进它们
my_method(arg1,
arg2,
arg3
)
Run Code Online (Sandbox Code Playgroud)
但如果我不使用括号,我会得到
my_method arg1,
arg2,
arg3
Run Code Online (Sandbox Code Playgroud)
我在vim中尝试了相同的代码片段,它的行为与预期的一样:
my_method arg1,
arg2,
arg3
Run Code Online (Sandbox Code Playgroud)
是否有可能在emacs中做同样的事情?
编辑:答案在这里:Emacs ruby模式缩进行为
是否可以仅针对特定模式/缓冲区使用defadvice修改函数的行为?我希望mouse-yank-primary插入额外的文本,但只有在我处于特定模式时.对于mouse-yank-primary,我试过'defadvice',但是一旦激活它也可以在所有其他缓冲区中运行.
我认为可以通过在模式挂钩中将鼠标按钮重新绑定到我自己的函数来解决,但是elisp手册说最好使用defadvice.