Using has_many :through for nested has_many relations in Rails

has_many :through is a useful association type of Rails. It's mostly popular and often used as a join model for many-to-many relations.


However, has_many :through is more than a simple join model, because it conducts INNER JOIN(s) on related models. We can also take the advantage of this beha...

Read more

Running Rake Tasks in a Loop

Rake tasks in a loop, will only executed once when they are not re-enabled. Take a look to this example:

namespace :yoksis do
  desc 'fetches all references'
  task :references do
    mapping = {
      get_instruction_language: 'UnitInstructionLanguage',
      get_instruction_type: 'UnitInstructionType'

    mapping.each do |action, klass|
      Rake::Task['yoksis:reference'].invoke(action, klass)

  desc 'fetch an individual reference'
  task :reference, %i[soap_method klass] => [:environment] do |_, args|
    puts args[:soap_method]
    puts args[:klass]

When you run the yoksis:references task, it will only print out {get_instruction_language: 'UnitInstructionLanguage'} and will skip the second item of the mapping hash.

Read more
Date: 04-05-2018

Boolean Type Words in YAML

YAML is a widely used data serialization language. In any software development project, or a random dev-ops task you can come across with YAML. For example Ruby on Rails uses YAML for fixtures, configuration files and localization. CI/CD tools such as CircleCI and Travis also use YAML for configuration. If you ever experienced a strange behaviour with YAML, you may have used the reserved words of YAML. YAML reserves some words such as 'yes', 'no', 'y', 'n', 'off', 'on', etc. for boolean type. For example:

    turkish: evet
    german: ja
    english: yes
    turkish: hayır
    german: nein
    english: no

will be interpreted as:

    turkish: evet
    english: true
    turkish: hayır
    english: false
Read more
Date: 04-05-2018

Rails Instantiated Fixtures

Here we have sample Ruby on Rails fixture file:


  name: sample
  text_message: hello
  phone_number: 0555444332211
  first_name: foo
  last_name: bar

There are two popular ways to use fixtures in your Rails tests. The first one is directly calling the name of fixture file followed by a symbol stating the name of any individual fixture, ie:

class NewsletterTest < ActiveSupport::TestCase
  test 'a sample test' do
    assert newsletters(:tenant_newsletter).valid?
Read more

Running Shell Commands with Rake

We all owe to Jim Weirich (RIP) - the father of the Rake, developer of many great projects such as builder, RubyKoans (I also contributed to this project lately with some PRs) and Git Immersion. I learned a lot from his talks on YouTube and really admire him.

In this post, I'm going to share a small tip about Rake for his memory and his awesome work.

Running shell commands with Rake is actually pretty simple and straightforward. sh followed by some bash commands is what we are going to be using.

Here is a basic example:

task :gs do
  sh "git status"

After defining the task like shown above, just run the task with:

$ rake gs

and you will see exactly the same output as git status does.

Read more