Хотя я не уверен насчет варианта использования, вы можете сделать что-то вроде:
@posts = Post.find(1,2) << Post.find(1)
из вас могут определить это в вашей модели Post:
def find_with_array(*args)
posts = []
for arg in args
posts << Post.find(arg)
end
posts
end
Очевидно, что вышеупомянутое неэффективно, так как вы делаете много вызовов SQL. Если вы хотите, чтобы это было эффективно, то вы можете написать код, который выполняет один вызов sql (но не будет возвращать дубликаты), а затем выполнять итерацию по массиву и перегруппировать (с копированием для дубликатов), например (не полностью протестировано):
def find_with_array(*args)
posts_with_no_duplicates = Post.find(args)
posts_with_duplicates = []
for arg in args
for post in posts_with_no_duplicates
if arg == post.id
posts_with_duplicates << post
end
end
end
end
Это должно быть лучше, так как вы делаете только один вызов БД (обычно самая медленная часть), однако это O (N ^ 2). Возможно, есть способ сделать это O (N), если это будет необходимо. Однако это большое улучшение по сравнению с предыдущим вариантом