У меня есть требование upsert, поэтому мне нужно вызвать хранимую процедуру postgres или использовать общее табличное выражение. Я также использую расширение pgcrypto для паролей и хотел бы использовать функции postgres (такие как «crypt» для кодирования / декодирования паролей).
Но я не могу найти способ заставить Ecto поиграть с необработанным sql частично или полностью. Предполагается ли, что ecto будет поддерживать только elixir dsl и не разрешать шелушение на raw sql, когда dsl недостаточно?
Я обнаружил, что могу делать запросы через адаптер (Rocket - это имя приложения)
q = Ecto.Adapters.Postgres.query(Rocket.Repo,"select * from users limit 1",[])
Но не знаю, как это сделать в модели. Я новичок в elixir, и мне кажется, я смогу использовать Ecto.Model.Schem. schema / 3, но это не удается
Rocket.User.__schema__(:load,q.rows |> List.first,0)
** (FunctionClauseError) no function clause matching in Rocket.User.__schema__/3
__schema__(:load, ..., ...)
предназначен для прямого использования ... но ваше решение идеально подходит для текущего кода! - person José Valim   schedule 03.01.2015