Hi everyone,
I’m prototyping some queries that I would need at work should we decide to go with Elixir and I wanted to see how Elixir, Ecto, Plug, and Cowboy would feel to me in real world context.
I’m getting this error when doing a Enum.sort_by/3
and I’m not understanding what I’m doing wrong. Here’s my Ecto schema (abbreviated):
@primary_key {:id, :integer, source: :RefID}
schema "Supplier" do
field :company_id, :integer, source: :CompanyID
field :supplier_id, :integer, source: :SupplierID
# ...
field :last_modified, :naive_datetime, source: :LastModified
I’m auto-generating all Schema from a C# Linq-To-SQL DBML (but that’s a story for a later post). I’d like to migrate to Elixir from outdated 15-20 years old C# legacy business web application.
This is the function I created that I’m running from IEx:
defmodule Data.Test do
import Ecto.Query
alias DB.HiddenName.Supplier
alias DB.HiddenName.Repo
def report(id) do
sup = Supplier
|> where([s], s.company_id == ^id)
|> order_by([s], desc: s.last_modified)
|> select([s], s)
|> Repo.all()
sup
|> Enum.group_by(fn x -> x.supplier_id end)
|> Enum.map(fn {_k, v} -> Enum.take(v, 4) end)
|> Enum.sort_by(&(&1.last_modified), {:desc, NaiveDateTime})
end
end
The error I’m getting:
** (ArgumentError) you attempted to apply :last_modified on [%DB.HiddenName.Supplier{supplier_id: 123, company_id: 6, last_modified: ~N[2019-06-18 15:32:00]], :last_modified, [])
When I comment out the last Enum.sort_by
there’s no error. I tried replacing the &1.last_modified
with the primary key id
and just use :desc
as the 3 argument, but I’m getting the same error with :id
instead of the NaiveDateTime :last_modified
.
In short, I just want to sort by that field, and I’ll be completely honest I’m not very sure what &(&1.last_modified)
does exactly (I’m in my day 2 with Elixir),
Probably basics question but I’m not phrasing that properly to get any answer myself.
Thanks for your time and help.