Pergunta

Eu estou usando Saquear o sort_link na minha trilhos de projeto para exibir uma lista de taxas para o meu pagamento modelo.No entanto, 'fee_amount' não é um atributo do pagamento o modelo, mas em vez disso, um método de classe do projeto de lei modelo (que pertence ao pagamento).O que eu tenho atualmente é:

<%= sort_link @pesquisar :bill_fee_amount, "Taxa de Conveniência" %>

o que deve acessos projeto de lei do atual pagamento e chamada "fee_amount' método em que projeto de lei, o que faz alguns cálculos e retorna um float.É com estes carros alegóricos que eu estou esperando para procurar por.

Isso pode ser feito, ou que eu só posso classificar por atributos do modelo que eu estou lidando com isso?

Foi útil?

Solução

Saquear é o sucessor de MetaSearch, e de acordo com o MetaSearch documentação, você pode criar pesquisas personalizadas.Aqui está o link:

https://github.com/ernie/meta_search

Eu acho que algo como isso funciona:

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')

A pergunta não foi clara sobre o que o cálculo é exatamente por isso eu achava que era apenas uma soma de um campo chamado fee_amount.Infelizmente, é, provavelmente, muito pior do que isso e eu acho que o desagradável SQL cálculo precisará ser incluído no Payment modelo.

O ponto chave que eu acho é que o SQL precisa incluir a coluna que você está classificando em então você precisa ter o SQL calculá-lo e incluí-lo com o nome que Saquear deseja pesquisar.

Espero que ajude.

Outras dicas

Você não pode com Ransack como se trata, mas verifique Esta questão .Parece que algumas pessoas fizeram patches para esta funcionalidade, mas eu não os tentei.

Ransack , internamente, está sempre usando o modelo conforme definido no banco de dados, e eu não pudefaça isso use as tabelas temporárias criadas pelos escopos.

pd: retrabalhou o comentário como uma resposta como sempre volto a esta pergunta: p

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top