J'ai besoin d'effectuer ces SQL ci-dessous, mais je n'ai pas pu obtenir le résultat.SQL personnalisé ActiveRecord dans Ruby
newid=Header.find_by_sql(
"SELECT coalesce(max(transaction_id),0)+1 AS id
FROM transaction_headers
WHERE transaction_year = #{Time.now.year} AND
transaction_type='#{fields[:transaction_type]}'"
)
Mais je n'arrive pas à obtenir le résultat à newid. La seule valeur que j'ai eu était [# < En-tête >] Quelqu'un peut-il m'aider à créer la déclaration correcte pour Ruby?
EDIT: Tableau des champs
----------------------------------------------------------------------------------- | transaction_type | transaction_year | transaction_id | customer_id | uid | date | -----------------------------------------------------------------------------------
Merci.
Merci. Je pense que j'ai fait un pas en avant. J'ai essayé ça, et j'ai récupéré l'objet Header, mais quand j'ai essayé de collectionner, j'ai obtenu [néant, néant, néant]. Je suis sûr que la requête est correcte. Il devrait retourner 1 champ avec l'identification de nom. Une idée? EDIT: J'ai ajouté des champs de table – Magician
Donc, votre clé primaire pour le modèle est en réalité transaction_id? Ensuite, essayez ceci: têtes = Header.find_by_sql ( « SELECT COALESCE (max (transaction_id), 0) +1 AS transaction_id DE transaction_headers OÙ transaction_year = # {} Time.now.year ET TRANSACTION_TYPE = '# { champs [: TRANSACTION_TYPE]} » ) header_ids = headers.collect (&: transaction_id) Je ne sais pas si cela va aider, mais peut-être la peine d'essayer – rainkinz
Oh .. ok .. merci .. vais essayer maintenant . En fait, les clés primaires sont les suivantes: transaction_id, transaction_type et transaction_year. Et Ruby a continué à envoyer la clause ORDER par ces clés et à supprimer les conditions du champ transaction_type. J'ai donc dû recourir au SQL manuel. – Magician