News for hackers. Stuff that matters.
Re:To ORM or Not to ORM by localhostdotdev on Tuesday May 07, 2019 @01:42PM (#19851673)

    rails g model Post published_at:datetime title content:text
    rails g model Comment post:references author published_at:datetime content:text
    rails g model Tag name
    rails g model PostTag post:references tag:references

    class Post < ApplicationRecord
      has_many :comments
      has_many :post_tags
      has_many :tags, through: :post_tags
    end

    class Tag < ApplicationRecord
      has_many :post_tags
      has_many :posts, through: :post_tags
    end
from there it's just regular rails:

    Tag.find_by(name: "something").posts
    Post.joins(:tags).where(tags: { name: "something" })
    Tag.create(name: "something")
    Post.create(...)
    Tag.first.posts << Post.all.sample(2)
made a little repo if people want to play with it: https://github.com/localhostdotdev/bug/tree/orm-or-not-orm
Re:To ORM or Not to ORM by davidcuddeback on Tuesday May 07, 2019 @01:50PM (#19851755)
You forgot to add an index on tags.name and null constraints on the rest of the columns.

> from there it's just regular rails

That's the problem. Examples like this focus on the first few minutes of development. Not the subsequent years of maintenance.

Re:To ORM or Not to ORM by vinceguidry on Tuesday May 07, 2019 @02:18PM (#19852027)
> Not the subsequent years of maintenance.

You're gonna have to pry the Rails from my cold dead fingers if you want me to maintain a web app's database abstraction layer long-term. No other tool works half as well as ActiveRecord. You could maybe convince me to try out https://rom-rb.org/ but only on a brand new project and only if Rails isn't appropriate.

If it's a project that wasn't built with Rails, I'm going to want https://github.com/jeremyevans/sequel if ActiveRecord is too much trouble to introduce.

Re:To ORM or Not to ORM by oogway8020 on Wednesday May 08, 2019 @09:54AM (#19858802)
I have been lucky to be able to pick what I want to use, so I pick non-rails stack (Sinatra/Padrino and now Roda + Sequel). No other tool works as half as Sequel. You're gonna have to pry Sequel from my cold dead fingers.
Re:To ORM or Not to ORM by vinceguidry on Wednesday May 08, 2019 @12:03PM (#19860156)
Don't get me wrong, I love Sequel. But ActiveRecord is far more polished. And that starts to matter once you start needing to go 'off-script'.
Re:To ORM or Not to ORM by djupblue on Wednesday May 08, 2019 @12:01PM (#19860134)
Adding an index on tags.name is likely not very useful on its own but adding an index with an uniqueness constraint to prevent duplicates is probably a good idea. Assuming there are just a few different tags records (<1000) then a sequential scan is generally either insignificantly slower or even faster than an index scan.

>Not the subsequent years of maintenance.

I'd much rather maintain this example than a code base replicating the same behavior without an ORM.

Re:To ORM or Not to ORM by localhostdotdev on Tuesday May 07, 2019 @01:52PM (#19851775)
I stayed close to what the author did.

adding an index:

    add_index :tags, :name
adding a null constraint:

    change_column :tags, :name, :string, null: false
    validates :name, presence: true # for proper validations
https://github.com/localhostdotdev/bug/commit/3765237008c36c...
Re:To ORM or Not to ORM by davidcuddeback on Tuesday May 07, 2019 @02:47PM (#19852267)
> I stayed close to what the author did.

Fair enough. I’ll concede that wasn’t a fair comparison to the OP. My point remains that examples focusing on the initial setup are uninteresting (to me) because that’s not where the bulk of the work is.

Re:To ORM or Not to ORM by blueplanet200 on Tuesday May 07, 2019 @01:52PM (#19851777)
Rails is also fine to maintain down the road. Certainly easier than any data layer most engineers would make by hand.