�@�}�C�O���[�V�����́A�f�[�^�x�[�X�̃X�L�[�}�̕ύX���v���W�F�N�g�̃��x���ŊǗ�������̂ŁA�X�L�[�}���̊J���҂̊Ԃŋ��L���邱�Ƃ������Ă���܂��B��̓I�ɂ́A�f�[�^�x�[�X�̃X�L�[�}�ɕύX������x�ɁA���̕ύX���f�[�^�x�[�X�ɔ��f���邽�߂�Ruby�R�[�h���L�q���܂��B�܂��A���̕ύX�����������߂̃R�[�h�������}�C�O���[�V�����t�@�C�����ɋL�q���܂��B�ǂ̕ύX�����ۂ�DB�ɔ��f����Ă��邩�̏�Ԃ�schema_migrations�e�[�u���ɕێ�����܂��B����ɂ���āA�ق��̊J���҂��V�����X�L�[�}�ύX��������荞��A�C�ӂ̃o�[�W�����܂ŏ�Ԃ�߂����肷�邱�Ƃ��ł���悤�ɂȂ�܂��B
�@�����̊J���҂̊ԂŁA�ǂ̂悤�Ƀ}�C�O���[�V���������p����邩�̃C���[�W��}�ɂ���ƁA���̂悤�ɂȂ�܂��B�܂��A�X�L�[�}�ւ̕ύX������������A�Ή�����}�C�O���[�V�����t�@�C�����쐬���āA�����̊J�����ɔ��f����ƂƂ��ɁA�\�[�X�R�[�h���Ǘ����邽�߂̃��|�W�g���ɒlj����܂��B�ʂ̊J���҂́A�V�����lj����ꂽ�}�C�O���[�V�����t�@�C�������|�W�g������擾���A�����̊J�����Ń}�C�O���[�V���������s���āA�ύX���f�[�^�x�[�X�ɔ��f���邱�Ƃ��ł��܂��B
�@�}�C�O���[�V�������J�����ɔ��f������ɂ́Arake�R�}���h��p���܂��B�Ȃ��A�I�v�V�����Ȃǂɂ��ẮA�{�A�ڂ̑�1��̉�����Q�Ƃ��Ă��������B
> rake db:migrate
�@����ł́A�}�C�O���[�V�����t�@�C���̓��e�����Ă����܂��傤�B
�@��قǂ�User�N���X�̗�ł́Arails g�R�}���h�Ŏ��̂悤�ȃ}�C�O���[�V�����t�@�C������������܂��B���̃}�C�O���[�V�����t�@�C���́A�uusers�Ƃ����e�[�u�����쐬����v�Ƃ����X�L�[�}�ύX�ɑΉ�����ƂƂ��ɁA�u20110403005910�v�Ƃ����X�L�[�}�o�[�W������\���Ă��܂��B�Ȃ��A���̃o�[�W�����̐����́A�}�C�O���[�V�����t�@�C�����R�}���h�Ő�������ۂɓ��������ƂɎ����ŕt�^����܂��B
class CreateUsers < ActiveRecord::Migration def self.up create_table :users do |t| t.string :name t.string :email t.date :birthday t.integer :number t.timestamps end end def self.down drop_table :users end end
�@�}�C�O���[�V�����t�@�C���̓��e�́Aup��down�̂Q�̃��\�b�h�ō\������܂��Bup�ɂ̓f�[�^�x�[�X�ɂ��̕ύX�f����i���̃X�L�[�}�o�[�W�����ɏグ��j�������Adown�ɂ͂��̕ύX���������i�O�̃o�[�W�����ɖ߂��j�������L�q���܂��B���̗�ł́Aup�ł�create_table�Ƃ������\�b�h���g���ăe�[�u�����쐬���Adown�ł͂��̃e�[�u�����폜���܂��B
�@create_table�ɓn���u���b�N�̒��ł́A����t�ɑ��āAt.string :name �̂悤�ɃJ�������L�q���Ă����܂��B���̂悤�ɁA�}�C�O���[�V�����ł́A�uVARCHAR(20)�v�̂悤�ȃf�[�^�x�[�X�̃f�[�^�^�ڋ�̓I�Ɏw�肷��̂ł͂Ȃ��A���ۉ����ꂽ�f�[�^�^��p���܂��B��{�I�ɂ͈ȉ��̃f�[�^�^���g�p�ł��܂��B
�@���̂悤�Ȓ��ۉ����ꂽ�f�[�^�^���g�����Ƃɂ́A�V���v���Ŋo���₷���A�f�[�^�x�[�X�ɏڂ����Ȃ��Ă��ȒP�ɊJ���ł���Ƃ��������b�g������܂��B����ɁA�f�[�^�x�[�X�̎�ނ��Ƃ̍��ق��z�����Ă���邽�߁A���p����RDBMS��ς��Ă��R�[�h�ɂقƂ�ǎ���������ɍςނƂ������ʂ�����܂��B
�@���Ȃ݂ɁA��L�̃}�C�O���[�V�������A�f�t�H���g��sqlite3�Ŏ��s����ƁA���̂悤�ȃe�[�u�����쐬����܂��Bstring��varchar(255)�Ƀ}�b�s���O����Ă���̂�������܂��ˁB
�@������̒����́A:limit�I�v�V�������w�肷�邱�Ƃŕς��邱�Ƃ��ł��܂��B
t.string :name, :limit => 20
�@�܂��A:decimal�^�̃J�����ɂ� :precision �� :scale �Ő��x�ƃX�P�[����ݒ�ł��܂��B
�@���̂ق��A�f�t�H���g�l��ݒ肵����ANULL�s���ǂ������w�肷��ɂ͎��̂悤�ɂ��܂��B
t.string :name, :default => 'unknown' t.integer :number, :null => false
�@���̂ق��Acreate_table �̋L�q�ɂ��ē��M���ׂ��_�Ƃ��ẮA�v���C�}���L�[�ƃ^�C���X�^���v���������܂��B�����Ă����ɂ��Đ������Ă����܂��B
�@ActiveRecord�ł́A�e�[�u���͊�{�I��id�Ƃ������O�̎������Ԃ̃v���C�}���L�[�����Ƃ����z��ɂȂ��Ă���Acreate_table�̋L�q�œ��ɉ��������Ȃ�����̂悤�ɃX�L�[�}���쐬����܂��B�������K��ɊO�ꂽ�e�[�u������肽����A:id�I�v�V�����Ńv���C�}���L�[�̗L�����A:primary_key�I�v�V�����Ńv���C�}���L�[�̖��O��ς��邱�Ƃ��ł��܂��B�Ⴆ�Ύ��̗�ł̓v���C�}���L�[�̖��O��kaiin_id�ɂ��Ă��܂��B
create_table :users, :primary_key => :kaiin_id do |t| ...��... end
�@�Ȃ��A�e�[�u���̃v���C�}���L�[�̖��O�����ł��邩�Ɋւ�炸�AActiveRecord�I�u�W�F�N�g�ł̓v���C�}���L�[�ɑΉ����鑮�����Ƃ���id���g���܂��B
�@User�N���X�̗�ł́A�}�C�O���[�V������create_table�u���b�N�̍Ō�Ɏ��̂悤�ȋL�q������܂��B
t.timestamps
�@����́A�e�[�u���Ƀ^�C���X�^���v�p�̃J������lj�����Ƃ����Ӗ��ŁA��̓I�ɂ�created_at��updated_at���lj�����܂��B�����̃J������ActiveRecord�ł͓��ʂȈӖ��������Ă��܂��B�V����ActiveRecord�I�u�W�F�N�g���͂��߂�DB�ɕۑ����ꂽ�Ƃ��ɂ�created_at��updated_at�A�X�V���ꂽ�Ƃ��ɂ�updated_at�ɁA�����I�ɂ��̎��_�̓������Z�b�g����܂��B�܂��Acreated_on�Aupdated_on�Ƃ������t�^�̃J����������A�����ł͂Ȃ����t��ۑ����܂��B�����̓���́A�������������O�̃J����������Ύ����I�ɍs���܂��i�]���āAtimestamps���\�b�h�ł͂Ȃ�add_column�Ȃǂł����̃J������lj����Ă��������ʂ������܂��j�B
�@�e�[�u���̍쐬�^�폜�̂ق��A�}�C�O���[�V�����ł́A�����̃e�[�u���ɑ���J�����̑������������ʂ��悭����܂��B�J��������̂��߂̃��\�b�h�Ƃ��Ă͈ȉ����p�ӂ���Ă��܂��B
�@�܂��A�C���f�b�N�X�Ɋւ��郁�\�b�h���p�ӂ���Ă��܂��B
�@�}�C�O���[�V�����ł́Aexecute���\�b�h��SQL�ڎ��s���邱�Ƃ��ł���̂ŁA�p�ӂ��ꂽ���\�b�h�ł͎����ł��Ȃ��悤�ȏ������s�����Ƃ��ł��܂��B
�@�����܂ł́AActiveRecord�̊�{�I�ȍl������A�}�C�O���[�V�����ɂ��ĉ�����܂����B��������́A�ʂ̋@�\�ɂ��ďڂ������Ă����܂��B�X�V�n�╡�G�ȏ����ɂ��Ă͎���ȍ~�ɏ���A�����ActiveRecord���g�����f�[�^�̌������@�ɂ��Č��čs�����Ƃɂ��܂��B
�@Rails3����ActiveRecord������Arel�Ƃ������C�u�������g����悤�ɂȂ�A�ȑO�Ɣ�ׂ�API���傫���ς���Ă��܂��BArel�Ƃ́A�f�[�^�x�[�X�N�G�������邽�߂̃��C�u�����ŁA�v���O�����Ƃ��Ă��_��Ɍ���������g�ݗ��Ă邱�Ƃ��ł���悤�ɂȂ��Ă��܂��B
�@�Ⴆ��Rails2�ł͌����̍ہA�ȉ��̂悤�ɂ��Ă��܂����B
User.all(:conditions => [�eage = ?�f, 31])
�@Rails3��Arel���g���������ł͈ȉ��̂悤�ɂȂ�܂��B
User.where(:age => 31)
�@�܂��A�uorder by�v��ulimit�v���w�肷��ꍇ�ARails2�ł͈ȉ��̂悤���Ă��܂����B
User.all(:conditions => [�eage = ?�f, 31], :order => �ecreated_at desc�f, :limit => 20)
�@Rails3�ł͈ȉ��̂悤�ɂȂ�܂��B
User.where(:age => 31).order(�ecreated_at desc�f).limit(20)
�@���̂悤�ɁA�e���������ԂɓK�p���Ă����Ƃ������������ł��܂��B
users = User.where(:age => 31) users = users.order(�fcreated_at desc�f) users = users.limit(20)
�@User.where(:age => 31)�Ƃ����Ƃ��ɉ����N����̂ł��傤���BUser.where(:age => 31).class�Ƃ���ƁA�Ԃ��Ă���I�u�W�F�N�g��ActiveRecord::Relation�Ƃ����N���X�̃C���X�^���X�ł��邱�Ƃ�������܂��B
> User.where(:age => 31).class => ActiveRecord::Relation
�@����ɁAUser.where(:age => 31).limit(20)�Ƃ����Ƃ��ɕԂ��Ă���̂�ActiveRecord::Relation�I�u�W�F�N�g�ł��B
> User.where(:age => 31).limit(20).class => ActiveRecord::Relation
�@�܂�where��limit�Ȃǂ̃��\�b�h�Ăяo���ɂ���ĘA���I��ActiveRecord::Relation�I�u�W�F�N�g������Ă���̂ł��B�܂��AActiveRecord::Relation�I�u�W�F�N�g������������ł̓f�[�^�x�[�X�ɑ��Č����͍s���܂���B�Ⴆ�Έȉ��̂悤�ɂ��ăf�[�^�𗘗p���悤�Ƃ����^�C�~���O�ŏ��߂Č������s���܂��B
User.where(:age => 31).limit(20).each do |user| p user end
�@�������@�ɂ��ďڂ������čs���܂��傤�B
�@rails console�Ȃǂ��g���Ď茳�̊��Ŏ����ꍇ�Ato_sql���\�b�h�����ɗ����܂��Bto_sql���\�b�h���g����ActiveRecord::Relation���f�[�^�x�[�X�ɑ��Ď��s����SQL���m�F���邱�Ƃ��ł��܂��B�g�����͈ȉ��̒ʂ�ł��B
> puts User.where(:age => 31).limit(20).to_sql SELECT "users".* FROM "users" WHERE "users"."age" = 31 LIMIT 20
�@�v���C�}���L�[�ɂ�錟���ɂ�find���g���܂��B
> User.find(1) => #<User id: 1, name: "jugyo", �c>
�@�f�[�^�����݂��Ȃ������Ƃ��͗�O�iActiveRecord::RecordNotFound�j���������܂��B
�@first�ōŏ��̃f�[�^��1���擾���邱�Ƃ��ł��܂��B
User.first => #<User id: 1, name: "jugyo", �c>
�@���l�ɁAlast�ōŌ�̃f�[�^���擾���邱�Ƃ��ł��܂��B
User.last => #<User id: 3, name: "jugyo3", �c>
�@first�Alast�Ƃ��ɁA�f�[�^�����݂��Ȃ������Ƃ���nil���Ԃ�܂��B
�@find�̈����ɂ�id���w�肷�邱�Ƃ��ł��܂��B
User.find(1, 2) => [#<User id: 1, name: "jugyo", �c>, #<User id: 2, name: "jugyo2", �c>]
�@���ׂẴf�[�^���擾����ɂ�all���g�p���܂��B
User.all.each do |user| �c end
�@all�͂��ׂẴf�[�^����x�Ɏ擾���܂��B��L�̃R�[�h�����s�����ꍇ�A�ȉ���SQL�����s����܂��B
SELECT "users".* FROM "users"
�@�e�[�u���ɑ�ʂ̃f�[�^������ۂɂ�������萔�����o���ď������s�������ꍇ��find_each���g�p���܂��B
User.find_each do |user| �c end
�@find_each���g�����ꍇ�͈ȉ���SQL�����s����܂����B
�@LIMIT���w�肵��1000�����f�[�^���擾���悤�Ƃ��Ă��邱�Ƃ�������܂��B:batch_size�I�v�V�������g���Ĉ�x�Ɏ擾����f�[�^�̌������w�肷�邱�Ƃ��ł��܂��B�ȉ��̗�ł�5000�����擾���Ă��܂��B
User.find_each(:batch_size => 5000) do |user| �c end
�@�����������w�肷��ɂ�where���g���܂��BUser���f������age��31�̃f�[�^����������ꍇ�͈ȉ��̂悤�ɂ��܂��B
User.where(:age => 31)
�@���s�����SQL�͈ȉ��̂悤�ɂȂ�܂��B
SELECT "users".* FROM "users" WHERE "users"."age" = 31
�@�ȉ��̂悤�ɂ���age�ɕ����̒l���w�肷�邱�Ƃ��ł��܂��B
User.where(:age => [31, 32])
�@���̂Ƃ����s�����SQL�͈ȉ��̂悤�ɂȂ�܂��B
SELECT "users".* FROM "users" WHERE "users"."age" IN (31, 32)
�@where�ɂ́ASQL�̈ꕔ�ƂȂ�悤�ȕ�����ڎw�肷�邱�Ƃ��ł��܂��B�܂��A���̍ۂ̓v���[�X�z���_�[���g���Ēl�ߍ��ނ��Ƃ��ł��܂��B
User.where('age = ? AND name = ?', 31, 'jugyo')
�@�Ȃ��A��������w�肷��Ƃ��ɁA�v���[�X�z���_�[���g�킸�� #{} �Ȃǂ��g���Ē��ڃf�[�^�ߍ��ނƁA�f�[�^��SQL�C���W�F�N�V�����̊댯��������ꍇ�ɂ͖��ƂȂ�܂��B�댯��������f�[�^����ɖ��ߍ���Ŏw�肵�����ꍇ�́A�K���v���[�X�z���_�[���g���ׂ��ł��B
�@�v���[�X�z���_�[�Ƃ��āg?�h�̑���ɃL�[���[�h���g�����Ƃ��ł��܂��B
�@Range�I�u�W�F�N�g���g���Ĕ͈͎w����ȒP�ɕ\�����邱�Ƃ��ł��܂��B
User.where(:age => 30..40)
�@���̂Ƃ����s�����SQL�͈ȉ��̂悤�ɂȂ�܂��B
SELECT "users".* FROM "users" WHERE ("users"."age" BETWEEN 30 AND 40)
�@���̑��ɂ�SQL�̊e�푀��ɑΉ������ȉ��̂悤�ȃ��\�b�h����`����Ă��܂��B
�@��L�̕��@�ȊO�ɂ��_�C�i�~�b�N�t�@�C���_�[�ƌĂ��@�\���g���Č������s�����Ƃ��ł��܂��B
�@�Ⴆ�A�ȉ��̂悤�Ȍ������s�������ꍇ�A
User.where(:name => 'jugyo').first
�@�_�C�i�~�b�N�t�@�C���_�[���g���Ƃ��̂悤�ɏ����܂��B
User.find_by_name('jugyo')
�@�ȉ��̂悤�ɕ����̏�����g�ݍ��킹�邱�Ƃ��ł��܂��B
User.find_by_name_and_age('jugyo', 31)
�@���������ɂ���Ă̓_�C�i�~�b�N�t�@�C���_�[�̂ق�����蕪����₷�������܂��B�ɉ����Ďg��������Ɨǂ��ł��傤�B
�@�_�C�i�~�b�N�t�@�C���_�[�́A���炩���߃��\�b�h���p�ӂ���Ă���킯�ł͂Ȃ��A�Ăꂽ�Ƃ��ɂ͂��߂Ďg����悤�ɂȂ�܂��B����́ARuby�̓��I����Ƃ��Ă̓�������ς��܂���������Ă����Ƃ����܂��B�ǂ̂悤�Ɏ�������Ă���̂����ׂĂ݂�Ɩʔ�����������܂���B
�@ActiveRecord�ł́Awhere�Ȃǂ�p���Č����������L�q���邾���łȂ��A����̌��������Ɏ����ōD���Ȗ��O��t���ă��\�b�h�Ƃ��Ďg�����Ƃ��ł��܂��B����̓X�R�[�v�ƌĂ�܂��B
�@�Ⴆ�A�L�����������special�t���O��users�e�[�u���ɂ���Ƃ��܂��B�L������݂̂���������ʏ�̏������͎��̂悤�ɂȂ�܂��B
special_users = User.where(:special => true)
�@�������A���̂悤�ɏ�����\�[�X�R�[�h�͂���ɓǂ݂₷���Ȃ�ł��傤�B
special_users = User.special
�@����́A�ȉ��̂悤�ȃX�R�[�v��User�N���X�ɋL�q���邱�Ƃʼn\�ɂȂ�܂��B
class User < ActiveRecord::Base scope :special, where(:special => true) end
�@�X�R�[�v�́A�d�˂ČĂԂ��Ƃ��ł��܂��B�Ⴆ�A�����̗L����������̂悤�ɍi�荞�ނ��Ƃ��ł���悤�ɂȂ�܂��B�ƂĂ��ǂ݂₷���Ȃ�܂��ˁI
special_users = User.special.women
�@�A�ڑ�3��ƂȂ�{�L���ł́ARuby on Rails�̃��f���w�̕W���̎����ł���ActiveRecord�ɂ��āA��{�I�ȍl�����⑀����@�A�g���n�߂邽�߂ɕK�v�ƂȂ�}�C�O���[�V�����̒m���A�����ĎQ�Ƌ@�\�ɂ��āA��Ɍ��������̑g�ݗ��ĕ��ɏœ_�Ăĉ�����܂����BActiveRecord�̖�����g�����ɐe����ł��炤�ƂƂ��ɁA�f�[�^�x�[�X�̌����������قǏ_��ɓǂ݂₷���L�q�ł��閣�͂��������Ă����������Ȃ�K���ł��B����́A�X�V�n�̋@�\��l�̌��̎d�g�݂ɂ��ďڂ����Љ�Ă����܂��B
Copyright © ITmedia, Inc. All Rights Reserved.