After modifying an object and after saving to the database, or within after_save:
| Rails <= 5 | Rails >= 5.1 |
|---|---|
| attribute_changed? | saved_change_to_attribute? |
| changed? | saved_changes? |
| changes | saved_changes |
| attribute_was | attribute_before_last_save |
| #!/bin/bash | |
| parents_of_dead_kids=$(ps -ef | grep [d]efunct | awk '{print $3}' | sort | uniq | egrep -v '^1$'); echo "$parents_of_dead_kids" | xargs kill |
| # If you get "Inappropriate ioctl for device" when decrypting | |
| # Thanks to https://github.com/keybase/keybase-issues/issues/2798 | |
| export GPG_TTY=$(tty) | |
| #!/bin/bash | |
| sudo kextunload /System/Library/Extensions/AppleHDA.kext | |
| sudo kextload /System/Library/Extensions/AppleHDA.kext |
| def real_csrf_token(token) | |
| Base64.strict_decode64(token) | |
| end | |
| def xor_byte_strings(s1, s2) | |
| s2_bytes = s2.bytes | |
| s1.each_byte.with_index { |c1, i| s2_bytes[i] ^= c1 } | |
| s2_bytes.pack("C*") | |
| end |
| # [amplitude.com] | |
| amplitude.com | |
| amplify.amplitude.com | |
| analytics.amplitude.com | |
| api.amplitude.com | |
| cdn.amplitude.com | |
| discourse.amplitude.com | |
| events.amplitude.com | |
| go.amplitude.com | |
| info.amplitude.com |
| ruby '2.7.1' | |
| gem 'rails', github: 'rails/rails' | |
| gem 'tzinfo-data', '>= 1.2016.7' # Don't rely on OSX/Linux timezone data | |
| # Action Text | |
| gem 'actiontext', github: 'basecamp/actiontext', ref: 'okra' | |
| gem 'okra', github: 'basecamp/okra' | |
| # Drivers |
| # Here's a contrived example of a LEFT JOIN using ARel. This is an example of | |
| # the mechanics, not a real-world use case. | |
| # NOTE: In the gist comments, @ozydingo linked their general-purpose ActiveRecord | |
| # extension that works for any named association. That's what I really wanted! | |
| # Go use that! Go: https://gist.github.com/ozydingo/70de96ad57ab69003446 | |
| # == DEFINITIONS | |
| # - A Taxi is a car for hire. A taxi has_many :passengers. | |
| # - A Passenger records one person riding in one taxi one time. It belongs_to :taxi. |
| module ActiveRecordExtension | |
| extend ActiveSupport::Concern | |
| module ClassMethods | |
| # Simple left join taking advantage of existing Rails & Arel code | |
| def left_joins(*args) | |
| inner_joins = self.joins(*args).arel.join_sources | |
| left_joins = inner_joins.map do |join| | |
| Arel::Nodes::OuterJoin.new(join.left, join.right) | |
| end |
| See question on stack overflow: http://stackoverflow.com/questions/28595636/rails-4-how-to-give-alias-names-to-includes-and-joins-in-active-record-que | |
| - Model Student and model Teacher are both STI models with super class model User | |
| - Model Story is a STI model with super class model Task | |
| - includes() and joins(), both fails | |
| Rails alias naming convention (includes() and joins()) | |
| - One model as parameter | |
| - is base model (includes(:users)) |