Используйте Ransack sort_link для поиска неатрибутов

StackOverflow https://stackoverflow.com//questions/12675470

  •  12-12-2019
  •  | 
  •  

Вопрос

Я использую Ransack's sort_link в моем проекте rails, чтобы отобразить список сборов за мой оплата модель.Однако 'fee_amount' не является атрибутом оплата модель, но вместо этого классовый метод из законопроект модель (которая относится к оплате).То, что у меня есть в настоящее время, это:

<%= sort_link @search, :bill_fee_amount, "Плата за удобство" %>

который должен получить доступ к законопроект из текущего оплата и вызовите метод 'fee_amount' для этого законопроект, который выполняет некоторые вычисления и возвращает значение с плавающей точкой.Именно по этим поплавкам я надеюсь провести поиск.

Можно ли это сделать, или я могу сортировать только по атрибутам модели, с которой имею дело?

Это было полезно?

Решение

Ransack является преемником MetaSearch, и, согласно документации MetaSearch, вы можете создавать пользовательские поисковые запросы.Вот ссылка:

https://github.com/ernie/meta_search

Я думаю, что что-то подобное сработало бы:

scope :sort_by_bill_fee_amount_asc, joins(:bill).select('sum("bills"."fee_amount") AS bill_fee_amount').order('bill_fee_amount ASC')
scope :sort_by_bill_fee_amount_desc, joins(:bill).select('sum("bills"."fee_amount") AS bill_fee_amount').order('bill_fee_amount DESC')

В вопросе не было ясно, что именно представляет собой вычисление, поэтому я предположил, что это просто сумма поля с именем fee_amount.К сожалению, это, вероятно, намного хуже, чем это, и я думаю, что неприятные вычисления SQL должны быть включены в Payment модель.

Ключевым моментом, я думаю, является то, что SQL должен включать столбец, по которому вы сортируете, поэтому вам нужно, чтобы SQL вычислил его и включил с именем, по которому Ransack хочет выполнить поиск.

Я надеюсь, что это поможет.

Другие советы

Вы не можете с RANSACK, так как он приходит, но проверьте Эта проблема .Кажется, некоторые люди сделали патчи для этой функциональности, но я их не пробовал.

ransack , внутренне, он всегда использует модель, как определено в базе данных, и я не могЗаставьте его использовать временные таблицы, созданные принципами.

pd: переработал комментарий как ответ, как я всегда возвращаюсь к этому вопросу: P

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top