�uActiveRecord�v�̊�{�ƃf�[�^�̎Q���FRuby on Rails3�Ŋw��Web�J���̃L�z���i3�j�i2/2 �y�[�W�j

» 2011�N04��12�� 00��00�� ���J
[���J�q, �͖�\�s, ������C������Ж��t]
�O�̃y�[�W�� 1|2 �@�@�@�@�@�@

�}�C�O���[�V�����Ƃ�

�@�}�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

}CO[Vt@CɂJҊԂł̋Ƃ̊TO} �}�C�O���[�V�����t�@�C���ɂ��J���ҊԂł̋�����Ƃ̊T�O�}

�@�}�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
[db/migrate/20110403005910_create_users.rb]

�@�}�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

  • :string
  • :text
  • :integer
  • :float
  • :decimal
  • :datetime
  • :timestamp
  • :time
  • :date
  • :binary
  • :boolean

�@���̂悤�Ȓ��ۉ����ꂽ�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

CREATE TABLE "users" ("id" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, "name" varchar(255), "email" varchar(255), "birthday" date, "number" integer, "created_at" datetime, "updated_at" datetime);

�@������̒����́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

�v���C�}���L�[�̖��O��ς���

�@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

�f�t�H���g�Œlj������^�C���X�^���v

�@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

�}�C�O���[�V�����ł悭�g�����̑��̃��\�b�h

�@�e�[�u���̍쐬�^�폜�̂ق��A�}�C�O���[�V�����ł́A�����̃e�[�u���ɑ΂���J�����̑������������ʂ��悭����܂��B�J��������̂��߂̃��\�b�h�Ƃ��Ă͈ȉ����p�ӂ���Ă��܂��B

  • add_column
  • rename_column
  • change_column
  • change_column_default
  • remove_column

�@�܂��A�C���f�b�N�X�Ɋւ��郁�\�b�h���p�ӂ���Ă��܂��B

  • add_index
  • rename_index
  • remove_index

�@�}�C�O���[�V�����ł́Aexecute���\�b�h��SQL�𒼐ڎ��s���邱�Ƃ��ł���̂ŁA�p�ӂ��ꂽ���\�b�h�ł͎����ł��Ȃ��悤�ȏ������s�����Ƃ��ł��܂��B

��{�̌�����Arel

�@�����܂ł́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�Ƃ̈Ⴂ

�@�Ⴆ��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�[�ɂ�錟��

�@�v���C�}���L�[�ɂ�錟���ɂ�find���g���܂��B

> User.find(1)
=> #<User id: 1, name: "jugyo", �c&gt

�@�f�[�^�����݂��Ȃ������Ƃ��͗�O�iActiveRecord::RecordNotFound�j���������܂��B

first��last�Ńf�[�^��1�������擾

�@first�ōŏ��̃f�[�^��1���擾���邱�Ƃ��ł��܂��B

User.first
=> #<User id: 1, name: "jugyo", �c&gt

�@���l�ɁAlast�ōŌ�̃f�[�^���擾���邱�Ƃ��ł��܂��B

User.last
=> #<User id: 3, name: "jugyo3", �c&gt

�@first�Alast�Ƃ��ɁA�f�[�^�����݂��Ȃ������Ƃ���nil���Ԃ�܂��B

�����f�[�^�̎擾

�@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

SELECT "users".* FROM "users" WHERE ("users"."id" >= 0) ORDER BY users.id ASC LIMIT 1000

�@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��

�@�����������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)

�v���[�X�z���_�[�̎g�p

�@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

User.where('age = :age AND name = :name', {:age => 31, :name => 'jugyo'})

Range���g���������w��

�@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

  • order
  • limit
  • offset
  • group
  • having

���\�b�h�ɃJ���������w�肷��u�_�C�i�~�b�N�t�@�C���_�[�v

�@��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

���������ɖ��O��t������u�X�R�[�v�v

�@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

�O�̃y�[�W�� 1|2 �@�@�@�@�@�@

Copyright © ITmedia, Inc. All Rights Reserved.

'; this.insertTarget = document.querySelector('#cmsBody .subscription') || document.querySelector('#cmsBody .inner'); }; BodyAdIMSWithCCE.prototype = Object.create(BodyAdContent.prototype); BodyAdIMSWithCCE.prototype.activate = function () { refreshGam('InArtSpecialLink'); } // global reference window.itm = itm; //entry point BodyAdEventBase.polyfill(); const bodyAdManager = BodyAdManager.getInstance(); bodyAdManager.addEventListener(BodyAdManager.EVENTS.READY, function (ev) { bodyAdManager.loadAdvertise(); }); bodyAdManager.init(); })();
�X�|���T�[����̂��m�点PR

���ڂ̃e�[�}

Microsoft  WindowsőO2025
AI for GWjAO
[R[h^m[R[h Zg by IT - ITGWjArWlX̒SŊ􂷂gD
Cloud Native Central by IT - XP[uȔ\͂gD
�V�X�e���J���m�E�n�E �y�����i�r�zPR
���Ȃ��ɂ������߂̋L��PR

RSS�ɂ‚���

�A�C�e�B���f�B�AID�ɂ‚���

���[���}�K�W���o�^

��IT�̃��[���}�K�W���́A �������A���ׂĖ����ł��B���Ѓ��[���}�K�W�������w�ǂ��������B