Ktouth Brand. on Web

¤±¡Á¤¯¤ó¤³¤È K.Ktouth ¤Î¤À¤é¤À¤é¤·¤¿Æü¾ï¤ÈÆÍȯŪ¤Ëºî¤ë¥×¥í¥°¥é¥à¤äÆÉ¤ßʪ¤È¤«¤Î»¨Â¿¥µ¥¤¥È



[2007ǯ09·î27Æü]

rails¤ÇCREATE VIEW¤Ï»È¤¨¤ë¤«¡©

2007ǯ09·î28Æü 11:24¹¹¿· É®¼Ô:K.Ktouth

7·î¤«¤érails¤ÎÎý½¬¤ò¥¬¥·¥¬¥·¿Ê¤á¤Æ¤ë¡Ä¡Ä¤Ä¤â¤ê¤Ç¤¹¤¬¡¢Á´Á³·Á¤Ë¤Ê¤ê¤Þ¤»¤ó(¤©
rails¤Ï¶¯ÎϤÀ¤±¤É¡¢¤ä¤Ï¤ê¸Ä¿Í¤Ç(SQL¤È¥»¥Ã¥È¤Ç)ÊÙ¶¯¤·¤Ê¤¬¤é¤À¤È·ë¹½»þ´Ö¤¬¤«¤«¤ë¡Ä¡Ä¤à¤¥¡¢Çº¤Þ¤·¤¤¤²¡¼

¤Ç¡¢¤¤¤¯¤Ä¤«¤Î´ØÏ¢¤¬»ØÄꤵ¤ì¤¿¥â¥Ç¥ëA¤ËÂФ·¤Æ¹Ê¤ê¹þ¤ß¤ò¤Ç¤­¤ë¤è¤¦¤Ê¥¯¥¨¥ê¤òºîÀ®¡£
¥µ¥Ö¥¯¥¨¥ê¤ò6ÃʤۤÉÁȤ߹ç¤ï¤»¤ë¾å¤Ë¡¢¥â¥Ç¥ëA¤ÎÆÉ¤ß¹þ¤ß¼«ÂÎ :include ¥ª¥×¥·¥ç¥ó¤Ç3¤Ä¤Î´ØÏ¢¥â¥Ç¥ë¤òƱ»þÆÉ¤ß¡£
·ë²Ì¤È¤·¤Æ1²ó¤Î¥¯¥¨¥ê¤ÎŤµ¤¬ÁêÅö¤Ê¤â¤Î¤Ë¡£ÆÉ¤ß¤Å¤é¤¤(¾Ð)

¤È¤ê¤¢¤¨¤º¸¡º÷¤Ç»È¤¦¥µ¥Ö¥¯¥¨¥ê¤ò¥Ó¥å¡¼¤È¤·¤ÆÅÐÏ¿¤·¤¿¤¤¤Î¤À¤±¤É¡Ä¡Ä²¿¤«¥¹¥Þ¡¼¥È¤ÊÊýË¡¤Ï¤Ê¤¤¤«¤È»î¹Ôºø¸í¡£
°ì±þrails¾å¤Ç´ÉÍý¤Ç¤­¤ë·Á¤ÇCREATE/DROP VIEW¤Ç¤­¤ë¤è¤¦¤Ë¤Ê¤ê¤Þ¤·¤¿¡£¤«¤Ê¤êÎ϶ȤÀ¤±¤É(¤©

¤Þ¤º¤ÏMigration

Ä̾ï¤Î¥â¥Ç¥ëÍѤΥơ¼¥Ö¥ëƱÍÍ¡¢MigrationÍѤΥե¡¥¤¥ë¤òºîÀ®¤·¤Æ¤½¤³¤ÇºîÀ®¡¦ºï½ü¤Î¥³¡¼¥É¤òÅÐÏ¿¤¹¤ë»ö¤Ë¡£
¤È¤Ï¤¤¤¨¥Æ¡¼¥Ö¥ë¤È°ã¤Ã¤ÆMigrate¤Ç¤ÎÄêµÁ¼þ¤ê¤Ë¥Ó¥å¡¼ÄêµÁµ¡Ç½¤Ï¤Ê¤¤¤Î¤Ç¡¢execute¤Çľ¤Ëµ­½Ò¡£

def self.up
¡¡execute <<-ENDE
¡¡¡¡CREATE VIEW example_view AS
¡¡¡¡¡¡SELECT * FROM examples, taggings, tags WHERE (ÃæÎ¬);
¡¡ENDE
end

def self.down
¡¡execute <<-ENDE
¡¡¡¡DROP VIEW example_view;
¡¡ENDE
end

¤³¤ì¤À¤±¤Ç¡¢rake db:migrate ¤¹¤ë¤È¤­¤Á¤ó¤È¥Ç¡¼¥¿¥Ù¡¼¥¹¤Î¹¹¿·¤¬¤¦¤Þ¤¯¤¤¤¯»ö¤ò³Îǧ¡£

¤À¤±¤É¡¢¤³¤Î¥Æ¡¼¥Ö¥ë¤ò¥Æ¥¹¥È¤Ç»ÈÍѤ¹¤ë¤È¤¦¤Þ¤¯¤¤¤«¤Ê¤¤¡£
½èÍý¤ò¸«¤Æ¤ë¤È¡¢¤Þ¤º¥Æ¥¹¥ÈÍѤΥǡ¼¥¿¥Ù¡¼¥¹¤òºÇ½é¤ËºîÀ®¤·¤Æ¤ëºÝ¤Ë¾åµ­¥³¡¼¥É¤¬¼Â¹Ô¤µ¤ì¤Æ¤¤¤Ê¤¤ÌÏÍÍ¡£
¤É¡¼¤â¡¢db:schema:dump¥¿¥¹¥¯¤ÇÀ¸À®¤µ¤ì¤ë¥¹¥­¡¼¥Þ¥Õ¥¡¥¤¥ë¤ò»ÈÍѤ·¡¢migrate¥Õ¥¡¥¤¥ë¤Ï»È¤Ã¤Æ¤Ê¤¤¤È¤¤¤¦»ö¤é¤·¤¤¡Ä¡Ä

ActiveRecord::SchemaDumper ¥¯¥é¥¹¤ò¤¤¤¸¤ì!

¥¹¥­¡¼¥Þ¥Õ¥¡¥¤¥ë(schema.rb)¤òÀ¸À®¤·¤Æ¤¤¤ë¤Î¤ÏAR::SchemaDumper¤È¤¤¤¦¥¯¥é¥¹¤é¤·¤¤¡£
¤½¤Î¥¯¥é¥¹¤ÎÄêµÁ¤µ¤ì¤¿¥³¡¼¥É¤ò¸«¤Æ¤Ó¤Ã¤¯¤ê¡£¥¹¥­¡¼¥Þ¥Õ¥¡¥¤¥ë¤ÎÆâÍÆ¤Ï¡¢¥Ç¡¼¥¿¥Ù¡¼¥¹¤ÎÆâÍÆ¤«¤éµÕ»»¤·¤Æ»»½Ð¤·¤Æ¤Þ¤·¤¿¤Ó¤Ã¤¯¤ê
¤Á¡¢Î϶ȤÀ¡Ä¡Ä

½ÅÍפʤΤϡ¢¤½¤Î½èÍý¤Ç¤Ï¤¢¤¯¤Þ¤Ç¤â¥Æ¡¼¥Ö¥ëÄêµÁ¤À¤±¤ò¼èÆÀ¤·¤Æ¤¤¤ë¤¿¤á¡¢¤½¤ì°Ê³°¤ÎSQL¤Ï¥¹¥­¡¼¥Þ¥Õ¥¡¥¤¥ë¤Ë½ñ¤­¹þ¤Þ¤ì¤Ê¤¤¤È¸À¤¦»ö¡£
¤³¤Î¤¢¤¿¤ê¤Î½èÍý¤òAR::SchemaDumper¤Ç¼ÂÁõ¤·¤Æ¤¤¤ë¤Î¤Ç¡¢¤½¤Î°ìÉô¤ò¼«Á°¤Î½èÍý¤Ç¾å½ñ¤­¤·¤Æ¤ä¤ë»ö¤Ë¡£

require 'active_record/schema_dumper'

class ActiveRecord::SchemaDumper
# ¸µ¤Î¥³¡¼¥É
#¡¡def trailer(stream)
#¡¡¡¡stream.puts 'end'
#¡¡end
#
# ¢­
#
¡¡def trailer(stream)
¡¡¡¡if @info['version'].to_i >= (¥Þ¥¤¥°¥ì¡¼¥·¥ç¥óÈÖ¹æ)
¡¡¡¡¡¡stream.puts ' execute <<-ENDE rescue nil'
¡¡¡¡¡¡stream.puts (¥Ó¥å¡¼ºîÀ®SQL)
¡¡¡¡¡¡stream.puts ' ENDE'
¡¡¡¡end
¡¡¡¡stream.puts 'end'
¡¡end
end

¥Þ¥¤¥°¥ì¡¼¥·¥ç¥óÈÖ¹æ¤Ï¡¢Àè¤Û¤Éºî¤Ã¤¿Migration¤ÈƱ¤¸ÈÖ¹æ¤ò»ØÄê¡£¥³¥ì¤¬¤Ê¤¤¤È¥Ð¡¼¥¸¥ç¥ó»ØÄê¤Ç¸Å¤¤¥¹¥­¡¼¥ÞÀ¸À®¤·¤¿ºÝ¤Ë¤âºî¤Ã¤Æ¤·¤Þ¤¦¡£
¥Ó¥å¡¼ºîÀ®SQL¤ÏMigration¤Çexecute¤·¤¿¤â¤Î¤ÈƱ¤¸¡£ÄêµÁ¤òÊ£¿ô¤Î¾ì½ê¤Ç½ñ¤¯¤Î¤Ï˾¤Þ¤·¤¯¤Ê¤¤¤Î¤Ç¡¢¼ÂºÝ¤ÎSQL¤ÏMigration¦¤«¤éÃê½Ð¤·¤ÆÊÌ¥Õ¥¡¥¤¥ë¤Ë¤·¤Æ¤¤¤Þ¤¹¡£

¥³¥ì¤â¤«¤Ê¤êÎ϶ȡ£
¥Æ¡¼¥Ö¥ëƱÍÍ¥¹¥­¡¼¥Þ¤«¤éÃê½Ð²Äǽ¤À¤È»×¤¦¤Î¤Ç¡¢²Ë¤¬¤¢¤Ã¤¿¤é¤³¤ÎÊÕºî¤êÂØ¤¨¤Æ¤ß¤Þ¤¹¡£
¤Ç¡¢¤³¤Î¥Õ¥¡¥¤¥ë¤òÆÉ¤Þ¤»¤Æ¤ä¤ì¤Ð¤¤¤¤¤ó¤Ç¤¹¤¬¡¢¤Þ¤Àºî¶È¤Ï»Ä¤Ã¤Æ¤Þ¤¹¡£

db:schema:dump ¥¿¥¹¥¯¤ò²þ¤

¼ÂºÝ¤Î¥¹¥­¡¼¥Þ¤ÎÀ¸À®¤Ï db:schema:dump ¥¿¥¹¥¯¤Ç¹Ô¤ï¤ì¤Æ¤¤¤Þ¤¹¡£
¤³¤Î¥¿¥¹¥¯¤ÎÃæ¤Ç 'active_record/schema_dumper' ¥é¥¤¥Ö¥é¥ê¤òÆÉ¤ß¹þ¤ß¡¢¥¤¥ó¥¹¥¿¥ó¥¹¤òÀ¸À®¤·¤Æ½ÐÎϡġĤȤ¤¤¦½èÍý¤ò¹Ô¤Ã¤Æ¤¤¤Þ¤¹¡£

¤È¤³¤í¤¬¡£
¥é¥¤¥Ö¥é¥êÆÉ¤ß¹þ¤ß¤«¤é¥¤¥ó¥¹¥¿¥ó¥¹À¸À®¤Þ¤Ç¤Ë³ä¤ê¹þ¤à;ÃϤ¬¤Ê¤¤¡£¤µ¤Æº¤¤Ã¤¿¤²¡¼¡£

¤Þ¤º¡¢¼«Á°¤Î¥¿¥¹¥¯¤ÎÄÉ²Ã¤Ï rails ¤Ç¥µ¥Ý¡¼¥È¤·¤Æ¤¤¤Þ¤¹¡£
¤³¤Î¾ì¹ç¡¢"#{RAILS_ROOT}/lib/tasks" °Ê²¼¤Ë³ÈÄ¥»Ò .rake ¤Î¥Õ¥¡¥¤¥ë¤òºîÀ®¤·¤Æ¤ª¤±¤Ð rake ¤¬¼«Æ°¤ÇÆÉ¤ß¹þ¤ó¤Ç¤¯¤ì¤Þ¤¹¡£rails ɸ½à¤Î¤â¤Î¤Î¸å¤Ë¡£
¤µ¤é¤Ë rake ¤ÎƱ̾¥¿¥¹¥¯¤ÎÄɲýèÍý¤Ï¾ï¤Ë¸åÉÕ¤ÎÌÏÍÍ¡£

¤½¤³¤Ç¤³¤ó¤Ê¥¿¥¹¥¯¤ò½ñ¤¤¤Æ¤ß¤Þ¤·¤¿¡£

namespace :db do
¡¡namespace :schema do
¡¡¡¡# ÄɲýèÍý¤Ï¥é¥¤¥Ö¥é¥ê¤òÆÉ¤ß¹þ¤à¤À¤±
¡¡¡¡task :dump => :environment do
¡¡¡¡¡¡require "#{RAILS_ROOT}/lib/(SchemaDumper²þ¤¥é¥¤¥Ö¥é¥ê)"
¡¡¡¡end
¡¡¡¡# ̵ÍýÌðÍý¥¿¥¹¥¯¤Î½çÈÖ¤òÆþ¤ìÂØ¤¨¤ë
¡¡¡¡task(:dump).instance_eval do
¡¡¡¡¡¡@actions[-2], @actions[-1] = @actions[-1], @actions[-2]
¡¡¡¡end
¡¡end
end

SchemaDumper²þ¤¥é¥¤¥Ö¥é¥ê¤Ï¾åµ­¤Î¤ä¤Ä¤òµ­½Ò¤·¤¿¥é¥¤¥Ö¥é¥ê¤Ç¤¹¡£
require ¤ÏƱ̾¤Î¥é¥¤¥Ö¥é¥ê¤Î¥í¡¼¥É¤Ï¥¹¥­¥Ã¥×¤¹¤ë¤Î¤Ç¡¢É¸½à¥¿¥¹¥¯¤ÎÁ°¤Ë³°Éô¥é¥¤¥Ö¥é¥ê¤òÀè¤ËÆÉ¤ó¤Ç¤ª¤¯¤À¤±¤ÇOK¡£
¤È¤Ï¤¤¤¨¡¢Äɲä·¤¿¤À¤±¤Ç¤Ï½çÈÖ¤¬¸åÉդʤΤǡ¢¥¿¥¹¥¯¥¤¥ó¥¹¥¿¥ó¥¹¤ÎÆâÉô¤ò¤¤¤¸¤Ã¤Æ¡¢½èÍý¤Î½çÈÖ¤òÆþ¤ìÂØ¤¨¤Æ¤¤¤Þ¤¹¡£

¥³¥ì¤Ç¤è¤¦¤ä¤¯½ÐÎϤµ¤ì¤ë¥¹¥­¡¼¥Þ¥Õ¥¡¥¤¥ë(schema.rb)¤Ë¥Ó¥å¡¼¤ÎÄêµÁ¤¬´Þ¤Þ¤ì¤ë¤è¤¦¤Ë¤Ê¤ê¤Þ¤·¤¿¡£
¥Æ¥¹¥È¤Ç¤â¥Ó¥å¡¼¤¬»ÈÍѤǤ­¤ë¤è¤¦¤Ë¤Ê¤Ã¤¿¤Î¤Ç¡¢¤È¤ê¤¢¤¨¤º´°À®¤Ç¤¹¡£

¡Ä¡Ä¼±¼Ô¤Ê¤é¤â¤Ã¤È¥¹¥Þ¡¼¥È¤Ë¤ä¤ë¤ó¤À¤í¤¦¤Ê¡Ä¡Ä¤¢¤»

ËÜÆü¤Î¥ê¥ó¥¯¸µ
¥¢¥ó¥Æ¥Ê
¤½¤Î¾¤Î¥ê¥ó¥¯¸µ
¸¡º÷