yurko
9/14/2017 - 1:28 PM

exclude new regex negative look ahead

Rails chunks

Rails.application.routes.recognize_path '/your/path/here'

Rails.applicaion.eager_load!
ActiveRecord::Base.descendants

Sidekiq.redis {|c| c.del('stat:failed') }

puma -t 2:16 -p 3000
# Exclude new
things\/(?!new).*
# add this into application.rb
initializer_file = Rails.root.join('config', 'initializers', 'my_initializer.rb')
reloader = ActiveSupport::FileUpdateChecker.new([initializer_file]) do
  load initializer_file
end
ActiveSupport::Reloader.to_prepare do
  reloader.execute
end
curl -I url -H 'Cache-Purge: 1'

Thing.where.not(image: nil).find_each do |e|
  %i(large small).each do |v|
    url = URI.parse(e.image.send(v).url)
    req = Net::HTTP::Get.new(url.path)
    req.add_field("Cache-Purge", "1")
    res = Net::HTTP.new(url.host, url.port).start do |http|
      http.request(req)
    end
  end
end
https://robots.thoughtbot.com/decorating-activerecord

class Profile < SimpleDelegator
  # to make <%= form_for Profile.new(User.new) do |f| %><% end %> work
  # it relies on profile.model_name.route_key => "users"
  # ActiveModel::Naming defines model_name
  extend ActiveModel::Naming
  
  def to_partial_path
    "profiles/profile"
  end
  
  # to make <%= render profile %> work
  def to_model
    self
  end
end
# Self join
has_many :child_things, -> { order(:id) }, class_name: self.name
belongs_to :parent_thing, class_name: self.name, foreign_key: :thing_id

# LEFT OUTER JOIN with NULL
User.eager_load(:places).where(places: {id: nil})

# Unique index with condition
class CreateUniqueIndexForPayments < ActiveRecord::Migration
  def change
    add_index :payments, [:order_id, :amount, :payment_date, :status] name: 'unique_index_to_avoid_duplicate_payments', where: "status = 'Scheduled'", unique: true
  end
end

# How to make one of "has_many :through" associations primary
# https://coderwall.com/p/tvn4za/how-to-make-one-of-has_many-through-associations-primary
class Place < ActiveRecord::Base
  has_many :place_category_relations
  has_many :categories, through: :place_category_relations
  has_one :primary_category_relation, -> { where(is_primary: true) }, class_name: 'PlaceCategoryRelation'
  has_one :primary_category, through: :primary_category_relation, source: :category
end

class PlaceCategoryRelation < ActiveRecord::Base
  belongs_to :place
  belongs_to :category

  # Make sure only one category is primary per place
  validates :is_primary, uniqueness: true, scope: :place_id
end
group.admins << user
user.admin? # => true
user.editor? # => false

class Group < ActiveRecord::Base
  has_many :memberships
  has_many :users, :through => :memberships

  has_many :admins, :through => :memberships, :source => :user,
    :conditions => "memberships.role = 'admin'" do
      def <<(admin)
        proxy_association.owner.memberships.create(:role => 'admin', :user => admin)
      end
  end

  has_many :editors, :through => :memberships, :source => :user,
    :conditions => "memberships.role = 'editor'" do
      def <<(editor)
        proxy_association.owner.memberships.create(:role => 'editor', :user => editor)
      end
  end
end

class Membership < ActiveRecord::Base
  belongs_to :group
  belongs_to :user
end

class User < ActiveRecord::Base
  has_many :memberships
  has_many :groups, :through => :memberships

  def admin?
    memberships.where(:role => 'admin').first
  end

  def editor?
    memberships.where(:role => 'editor').first
  end
end