Skip to content

Instantly share code, notes, and snippets.

@charly
charly / document.rb
Last active January 16, 2018 17:44
How to join associated models of a PgSearch Document to apply dynamic filter
class PgSearch::Document
belongs_to :article, -> {where("searchable_type = 'Article'")},
foreign_key: 'searchable_id'
belongs_to :info, -> {where("searchable_type = 'Info'")},
foreign_key: 'searchable_id'
end
@searched = PgSearch.multisearch(@query).
with_pg_search_highlight.
@charly
charly / gist:89bca978b6f9c0154c4c
Created October 21, 2014 15:34
One Script ActiveRecord Bug Report (from rails)
# Activate the gem you are reporting the issue against.
gem 'activerecord', '4.0.0'
require 'active_record'
require 'minitest/autorun'
require 'logger'
# Ensure backward compatibility with Minitest 4
Minitest::Test = MiniTest::Unit::TestCase unless defined?(Minitest::Test)
# This connection will do for database-independent bug reports.
@charly
charly / gist:8114471
Last active January 1, 2016 07:49 — forked from Serabe/gist:990667
require 'matrix'
def regression x, y, degree
x_data = x.map {|xi| (0..degree).map{|pow| (xi**pow) }}
mx = Matrix[*x_data]
my = Matrix.column_vector y
((mx.t * mx).inv * mx.t * my).transpose.to_a[0].reverse
end

Combining Scopes & Ransack thanks to Virtus & Siphon

There's a common feature request on the [ransack][2] issue page and that's to integrate your usual ActiveRecord scopes within the search. Indeed ransack is a fantastic tool to quickly setup a form for selecting table rows depending on column values. But it falls a little short when you want more complex, relational searches. So you almost naturally add a scope in your ransack powered search form before you realize it doesn't work and there's no clear way to do it.

Ransack won't take it all

The problem with that attractive and somewhat obvious feature request is [ransack][2] relies on the typecasting activerecord performs on its attributes, to coerce all the string values of the parameter's hash into their real value. When params[:user][:age_gt] => "18" barges into your model it knows "18" should be an Integer (because the corresponding DB column says so) and will pursue accordingly.

On the flip side your model has no reason to know what's the ar

@charly
charly / uploader_fu.rb
Created March 8, 2011 15:39
a nice little module to help migrate from attachment_fu to carrierwave
# Helps you migrate from attachment_fu
# put it in your /lib dir and include it your xxxx_uploader.rb
module UploaderFu
def partition_dir
("%08d" % model.id).scan(/\d{4}/).join("/")
end
def model_dir
"#{model.class.to_s.underscore}/#{mounted_as}/"
module Mongoid
def self.included(base)
base.extend NoProxyAssociation
end
# This little piece of codes creates an author method in Book
# which instanciates an anonymous class with Author included!
# def author
# klass = Class.new do
# include Book::Author
require "rubygems"
require "xml/libxml"
#require "active_support"
def traverse(node)
children = node.children.select {|a| a.element?}
txt = "<h1>HTML output</h1><ul>"
last_depth, depth = 1, 1
class Asset < ActiveRecord::Base
acts_as_taggable_on :tags, :people
# FIRST ATTEMPT
def tag_list=(new_tags)
set_tag_list_on('tags',new_tags.downcase)
end
def person_list=(new_tags)
set_tag_list_on('people',new_tags.downcase)
module MyTransaction
def save
Transaction.instance_eval do
@@save = instance_method(:save)
remove_method :save
end
body = "my transaction! + " + super
Transaction.module_eval do
require "rubygems"
require "uninclude"
module Core
def save; "saved" end
end
module Dirty
def save; "clean + " + super end
end