2015-01-27 3 views
1

У меня довольно странная утилита для PaperTrail. В моем сценарии версия основана на физическом событии. Из-за этого версии моей модели создаются только тогда, когда я говорю.Rails показать виды для версий PaperTrail

Из-за вышеизложенного. Я хочу, чтобы эти версии были способны на следующие вещи:

Когда я запускаю что-то вроде Model.all, это должно игнорировать версии, как ожидалось, но в некоторых случаях я хочу, чтобы версии были возвращены как обычно, поэтому мне нужно что-то сделать например Model.withVersions, чтобы вернуть все текущие записи и все связанные версии. Это возможно?

Кроме того, мне нужно иметь возможность создавать страницу для версий. Т.е.: Rails Показать действие и представление.

Как бы это осуществить? Мне нужно создать ссылку на одну из страниц, которая выводит что-то похожее на /model/23, которое приведет вас к странице о конкретной версии этого элемента.

Я знаю, что это своего рода странная проблема, но интересно, есть ли у кого-нибудь какой-либо вклад в эту странную usecase, и как я могу иногда выводить версии на передний план, чтобы действовать как существующие вещи, а в других случаях оставаться на заднем плане как обычно.

ответ

1

В основном мы используем тот факт, что PaperTrail добавляет новый метод к вашей модели под названием versions, который возвращает массив из PaperTrail::Version объектов, по одному для каждой версии модели. На любом из этих объектов версии вы можете позвонить .reify, чтобы получить модель в этой версии.

Теперь я не уверен, как вы хотите, чтобы эти версии были возвращены, так что предположим, что мы создаем массив версий для каждой модели и храним их в хеше с ключевыми ключами каждой модели:

hash = {} 
Model.all.each { |m| hash[m.id] = m.versions.map(&:reify) } 

# so to see the array of all versions of model with id=1 
hash[1] 

На вашей странице показа вам необходимо передать версию в качестве параметра, например. /model/23?version=5, а затем в вашем show действия вы будете делать что-то вроде:

@model = Model.find(params[:id]) 
if params[:version] 
    @model = @model.versions[params[:version]-1].reify 
end 
+0

Это очень очень полезно. Я могу попытаться добавить маршрут участника к моему ресурсу модели, чтобы полностью интегрировать версии в URL-адрес, если таковой существует. – rctneil

+0

Скажите, что я хочу найти мою модель, но хочу вернуть результаты, включая все версии. В настоящее время я использую searchkick и запускаю 'Model.search()'. Полагаю, мне нужно было бы заново подтвердить все версии перед раздачей и каким-то образом добавить их в индекс. Хм, путайте! – rctneil

+0

@rctneil - знаешь, здесь, в StackOverflow, есть еще один способ указать, что ответ был действительно полезен. – smathy

Смежные вопросы