4 ms·
> 1. Ecto is simply the best DB library I've encountered in any language. I'd almost recommend learning Elixir just to be able to use Ecto. It's interesting, p
by ch4s3 6y ago
> 1. Ecto is simply the best DB library I've encountered in any language. I'd almost recommend learning Elixir just to be able to use Ecto.
It's interesting, people always talk about Phoenix, which is nice, but Ecto is really special. I often recommend it to anyone who is feeling burned by Active Record implementations.
- dpeck 6y agoChangesets are beautiful. And they're great for general structure validation outside of databases as well.
- ch4s3 6y agoOh yeah, absolutely. They're great for building API clients.
- i_s 6y agoI thought so too, at first, but now I'm really down on it. Ecto Changesets work fine for flat data, but when you have to deal with nested data, it becomes a nightmare, because you have to use these special functions to read and update the data. Doing that in a nested context just gets really clunky, especially coming from Clojure, where I would just do something trivial, like (assoc-in changeset [:children 1 :title] "New title")
- sooheon 6y agoClojure sets an unfairly high bar for data manipulation with core, transducers, libraries like supdate and specter.
- ch4s3 6y agoThat is indeed a bit of a pain point. From what I understand, it's a bit intentional and the library authors want you to prefer flatter data structures. Now of course not all structures CAN be flat so you can hit a bit of an impedance mismatch. However, I think Ecto is amazing for more common (for me at least) cases.
- pmontra 6y agoHaving worked for years with both Ecto and Ruby's ActiveRecord I really prefer ActiveRecord. It's less flexible but so much easier to use. Ecto is somewhat closer to SQL and still suffers from the "I have to relearn how to do SQL in yet another language" syndrome and it's a particularly difficult case of it. A lot of boilerplate to represent database tables and a lot of not obvious code to do easy queries. Definitely the part of Elixir I like less, by a large margin. Ecto and the deployment system are what stop me from using Elixir in my personal projects.
- sgadimbayli 6y agoI have a huge dislike to ActiveRecord because its high abuse rate. Beginners will most certainly will have highly inefficient start with it. There are others in Ruby world which needs more praise such as Sequel and ROM(which is what Hanami uses also). With Rails having the monopoly and most gems having AR as dependency, it's hard to see where we will go regarding ORMs in Ruby world.
- ch4s3 6y agoI can definitely see where this criticism comes from. There is a lot of extra data description, and an abstraction that leans towards SQL. However, that "boilerplate" makes data access and return values super clear. It also allows you to segregate Ecto queries by domain, meaning in a User context you may only have access to certain fields, whereas in a data processing context other fields may be available. This is great for coarse table access control, and you get it almost for free. It also allows you to very easily validate data at the edges of the system. As for the query language, I can say for sure that there's a learning curve but it's close enough that your 1st guess is usually correct in my experience, and it removes a lot of foot guns like n+1 queries by default. TL;DR there's some learning curve and extra LOC to write, but you get a lot in return.