HELLO, I’M SERHAT AND THIS IS MY FANCY TITLE.

Rails ve PostgreSQL: Constraint'ler


Not Null Constraint ve Presence Constraint

  • foreign_key türündeki sütunlar için, eğer arada optional: true bir ilişki yoksa null: false kullanın.

  • Integer, boolean ve float türleri için null: false kullanmayın, add_null_constraint kullanın.

  • String türü için null: false kullanmayın, add_presence_constraint kullanın.

Not Null Constraint vs. Not Null Check

PostgreSQL'de NOT NULL durumu hem CONSTRAINT olarak, hem de CHECK olarak tanımlanabiliyor. CONSTRAINT ile CHECK arasında bazı farklar bulunmakta.

  • change_column_null (veya null: false) metodu sütun üzerinde CONSTRAINT tanımlaması yaparken,
  • add_presence_constraint tabloya CHECK tanımlaması yapar.
Continue reading
Date: | Tags: ruby on rails, postgresql | Categories: tech, ruby on rails, database

Rails PostgreSQL Veri Tipleri: Constraint ve Migrasyonlar


Data integrity ve referential integrity konularının epey önemli olduğu bir Rails+PostgreSQL projesinde rein GEM'ini kullanıyoruz. Constraint yönetimini oldukça kolaylaştıran bu aracı kullanırken ekip içerisinde bir takım standartlar da belirledik. İş bu doküman ekip içerisinde kullanılmak üzere yazılmış olup, benzer ihtiyaçları olanlara da faydalı olabilir düşüncesiyle paylaşılmıştır. Constraint'ler için bknz Rails ve PostgreSQL: Constraint'ler.

Boolean

  • boolean alanlar için mutlaka null_constraint eklenmelidir.

  • boolean alanlara mutlaka default bir değer tanımlanmalıdır. Örn: default: false gibi.

  • Boolean bir alanın nil olması beklenen bir durum değildir. Örneğin:

    Student.where(active: nil).count => 50
    Student.where(active: false).count => 40
    Student.where(active: true).count => 60

Bu durumda nil değerini içeren kayıtların tek tek incelenerek düzeltilmesi gerekir.

Continue reading
Date: | Tags: ruby on rails, postgresql | Categories: tech, ruby on rails, database

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)
    end
  end

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

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.

Continue reading
Date: | Tags: ruby, ruby on rails, rake, rake in loop | Categories: tech, ruby, ruby on rails

Rails Instantiated Fixtures


Here we have sample Ruby on Rails fixture file:

test/fixtures/newsletters.yml

tenant_newsletter:
  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?
  end
 end
Continue reading