Home > other >  How to make a trigger with Rails 7 and PostgreSQL
How to make a trigger with Rails 7 and PostgreSQL

Time:08-24

I'm using PostgreSQL with Rails in API mode and I have a row called expired with data type Date and I want to make a trigger that identifies if the expired date is equal to the current date and change my is_expired column from false to true, but I don't know where to start.

I've read a bit of Rails documentation or some libraries like hairtrigger and it seems a bit confusing.

this is my table:

class CreateRifs < ActiveRecord::Migration[7.0]
  def change
    create_table :rifs do |t|
      t.string :name
      t.datetime :rif_date
      t.string :award_with_sign
      t.string :award_no_sign
      t.string :plate
      t.integer :year
      t.float :price
      t.integer :numbers
      t.integer :with_signs
      t.date :expired
      t.boolean :is_expired, default: false

      t.timestamps
    end
  end
end

CodePudding user response:

Do you have a specific reason to use a database column for this? Because you could easily write this method on the model:

def expired? # This is actually an override, see next paragraph
  expired <= Date.today
end

Or alternatively, if the expired column only gets populated with a past date after it actually has expired (and doesn't, e.g., represent a future expiry), don't write a method at all. Rails automatically provides you with a predicate for every column: a column? method that returns true if column is populated.

CodePudding user response:

You don't need a trigger for this, maybe a scope to only get expired vs not expired records.

class Rif < ApplicationRecord
  scope :expired, -> { where('expired < NOW()') }
end

You can then use the scope later on

expired_rifs = Rif.expired
  • Related