ã
Ruby on Railsãçè§£ããããšããèšäºã®ç¶ãã§ã¯ãããŒã¿ããŒã¹ãæäœããŠèšäºã®ã«ã¿ãã°ãäœæããæ¹æ³ãåŠç¿ããŸãã
ãã©ã°ã€ã³ã®äœææ¹æ³ãåŠã³ãAJAXã䜿çšããŠã¿ãŠããã¹ãã£ã³ã°ã«ã¢ããªã±ãŒã·ã§ã³ããããã€ããéã®ããã€ãã®åé¡ãæ€èšããŸãã
ããŒã¿ããŒã¹ããå§ããŸãããã
ç§ã¯MySQLã䜿çšããŠãããããã€ã³ã¹ããŒã«äŸãMySQLã«äœ¿çšãããŸãã
WindowsãŠãŒã¶ãŒã¯ã
MySQL-5.0ãããŠã³ããŒãããŠã€ã³ã¹ããŒã«ããå¿
èŠããããŸãã
LinuxïŒUbuntuïŒãŠãŒã¶ãŒã®å Žåãããã«ç°¡åã§ãïŒ
<code class = 'sh' lang = 'sh'> $> sudo apt-get install mysql-server-5.0 libmysql-ruby </ code>
ã€ã³ã¹ããŒã«åŸããµãŒããŒãæ©èœããŠããããšã確èªããŸãã
<code class = 'sh' lang = 'sh'> $> mysqladmin ping -u root
mysqldã¯åäœããŠããŸã</ code>
é©åãªããŒã¿ããŒã¹ãäœæãããšããæ¥ãŸããã éçºçšãšãã¹ãçšã®2ã€ãå¿
èŠã§ãã
<code class = 'sh' lang = 'sh'> $> mysqladmin create example_development -u root
$> mysqladmin create example_test -u root </ code>
ããã§ã¯
config/database.yml
ãã¡ã€ã«ãèŠãŠã¿ãŸãããã 以äžã¯ãããŒã¿ããŒã¹ã«æ¥ç¶ããããã®ãã©ã¡ãŒã¿ãŒã§ãã éåžžãäœã倿Žããå¿
èŠã¯ãããŸãããããã©ã«ãã§ã¯ãmysqlã¯ãã¹ãŠã®æš©éãšãã¹ã¯ãŒããªãã§rootãŠãŒã¶ãŒãäœæããŸãã
ããŒã¿ããŒã¹ãšã¢ããªã±ãŒã·ã§ã³ã®æ¥ç¶ããã¹ãããããã«æ®ããŸãã ã¢ããªã±ãŒã·ã§ã³ãã©ã«ããŒã«ç§»åããŠå
¥åããŸã
<code class = 'sh' lang = 'sh'> $>ã¬ãŒã</ code>
ãšã©ãŒã¡ãã»ãŒãžã衚瀺ãããå Žåãæ¥ç¶èšå®ã®ã©ããã§ééããç¯ããããšã確èªããŠãã ããã
ããŒã¿ããŒã¹ã®æäœã®æŠèŠã
Railsã§ã®ãªããžã§ã¯ããšããŒã¿ããŒã¹ã®æ¥ç¶ã¯ã
ActiveRecordãšåŒã°ãã
ORããããŒã䜿çšããŠå®è¡ãããŸãã 圌ã¯ãããŒã¿ããŒã¹ããŒãã«ãããªããžã§ã¯ãã®ãã£ãŒã«ããžã®ãã£ãŒã«ãã®ãããã³ã°ãä¿ååã®ãªããžã§ã¯ãã®æ€èšŒããªããžã§ã¯ãéã®é¢ä¿ã衚ãã³ãŒãçæãæ±ããŸãã
æ°ããã¢ãã«ãäœæããã«ã¯ã
ActiveRecord::Base
ã¯ã©ã¹ããç¶æ¿ããã ãã§ååã§ãã
<code class = 'ruby' lang = 'ruby'> class Article <ActiveRecord :: Base
çµäº</ code>
ããã©ã«ãã§ã¯ãActiveRecordã¯ã¯ã©ã¹ãšããŠãååãä»ããããããŒãã«ãè€æ°åœ¢ã§ã®ã¿äœ¿çšããŸãã ç§ãã¡ã®å Žåãèšäºã
ããŒãã«å
ã®ãã¹ãŠã®ãã£ãŒã«ãã«ã¯ãåãååã®ã¡ãœããã䜿çšããŠã¢ã¯ã»ã¹ã§ããŸãã
<code class = 'ruby' lang = 'ruby'>ïŒArticlesããŒãã«ã«ã¿ã€ãã«ãã£ãŒã«ããããããã«ãã
Article.createïŒïŒtitle => 'Hello WorldïŒ'ïŒ
article = Article.findïŒ1ïŒ
article.titleãå°å·
ïŒ=> Hello WorldïŒ</ code>
ActiveRecordã¯ããæ§æããèŠçŽãã®ååã®æ¬è³ªãæç¢ºã«ç€ºããŠããŸããããã°ã©ã ãæ©èœãããããã«ã³ãŒããèšè¿°ããå¿
èŠã¯ãããŸãããããã°ã©ã ãéåžžã©ããæ©èœããªãå Žåã«ã®ã¿ã³ãŒããå¿
èŠã§ãã äŸïŒ
- å¥ã®ååã®ããŒãã«ã䜿çšããå¿
èŠããããŸã-ã¯ã©ã¹ã«è¡
set_table_name "mytablename"
ã远å ããŸã - ããŒãã«å
ã®ãã£ãŒã«ããæ²ãã£ãŠãã-ãããããã£ãŒã«ãã®éåžžã®ååã§ã¢ã¯ã»ã¹ã¡ãœãããæžãæ¹ãè¯ãã§ããã
- 1ã€ã®ãªããžã§ã¯ããè€æ°ã®ããŒãã«ã«ãããã³ã°ãããŸã-ORMãäœæããå¿
èŠããããŸã:)
ActiveRecordã«ã¯å€ãã®äŸ¿å©ãªæ©èœããããŸããããã®ãã¡ã®ããã€ãã以äžã«ç€ºããŸãã
Article.find(id)
èšäºãæ€çŽ¢ããŸãïŒããŒã¿ããŒã¹å
ã®äž»ããŒãéåžžã¯æŽæ°ã§ãïŒArticle.find(:all)
-ãã¹ãŠã®èšäºãéžæArticle.find_by_title('Hello World!')
-ã¿ã€ãã«ããHello WorldïŒãã®èšäºãæ€çŽ¢ããŸãArticle.create(:title => 'Hello World!')
-èšäºãäœæããŠããŒã¿ããŒã¹ã«ä¿åããarticle.update(:title => 'Goodbye World!')
-ããŒã¿ããŒã¹å
ã®èšäºãæŽæ°ããŸãarticle.destroy
ããŒã¿ããŒã¹ããèšäºãåé€ãã
ActiveRecordããã³ã€ã³ã¹ããŒã«ãããŠããä»ã®gemã®ããã¥ã¡ã³ãã衚瀺ããã«ã¯ãå®è¡ããå¿
èŠããããŸã
<code class = 'sh' lang = 'sh'> `$> gem_server` </ code>
ãã©ãŠã¶ã§éããŸã
httpïŒ// localhostïŒ8808 /次ã«ããã£ã¬ã¯ããªãäœæããŠã¿ãŸãããã
script/generate
ã䜿çšããŠããã£ã¬ã¯ããªã®ã¢ãã«ãã³ã³ãããŒã©ãŒããã¥ãŒãäœæããŸãã
<code> $> rubyââã¹ã¯ãªãã/ scaffold_resourceã®èšäºãçætitleïŒstring body_formatïŒstring bodyïŒtext </ code>
ããã¹ãã«ãœãŒã¹ã³ãŒããå«ããªãã®ã§ãèšäºãèšããŸããªãããã«ã
ãªã³ã©ã€ã³ã§
衚瀺ã§ããŸããããŸããŸãªã³ãŒããå¿
èŠãªçç±ã説æããŸãã
Railsã¯ããã€ãã®ãã¡ã€ã«ãçæããŸããããã®ãã¡ã®ããã€ããèŠãŠãã ããã
app/models/article.rb
èšäºã®ã¢ãã«app/controllers/articles\_controller.rb
èšäºãã£ã¬ã¯ããªã管çããããã®ã³ã³ãããŒã©ãŒconfig/routes.rb
è¡map.resources :articles
远å map.resources :articles
app/views/articles/...
...-èšäºãäœæãç·šéã衚瀺ããããã®ãã¥ãŒapp/views/layouts/articles.rhtml
ãã£ã¬ã¯ããªãæäœããããã®ããŒãžãã³ãã¬ãŒãdb/migrate/001_create_articles.rb
ããŒã¿ããŒã¹å
ã®èšäºã®ããŒãã«ãäœæãã
ã¢ãã«ã§ã¯ããã¹ãŠãæç¢ºã§ãããšæãã®ã§ãã³ã³ãããŒã©ãŒãèŠãŠã¿ãŸãããã ã³ã³ãããŒã©ãŒã«ã¯7ã€ã®ã¡ãœããããããŸãã
index
ããŒãžã«ã¯èšäºã®ã³ã¬ã¯ã·ã§ã³å
šäœã衚瀺ãããŸãshow
ããŒãžã«1ã€ã®èšäºã衚瀺ãããŸã- new-æ°ããèšäºãäœæããããã®ããŒãž
edit
-æ¢åã®èšäºãç·šéããããã®ããŒãžcreate
æ°ããèšäºãäœæããããã®ãã©ãŒã ã®ãã¹ããã³ãã©ãŒupdate
-èšäºç·šéãã©ãŒã ã®æçš¿ãã³ãã©ãŒdestroy
èšäºã®åé€ãªã¯ãšã¹ããã³ãã©ãŒ
config/routes.rb
map.resources :articles
è¡ã«ã¯ãå¿
èŠãªURLã«ãŒãã£ã³ã°ã«ãŒã«ã远å ãããŠããŸãã äœæãããURLã¯æ¬¡ã®ããã«ãªããŸãã
/articles (GET)
-ã€ã³ããã¯ã¹/articles/:id (GET)
ïŒïŒid-èšäºã®èå¥åïŒ/articles;new (GET)
-æ°èŠ/articles/:id;edit (GET)
-ç·šé/articles (POST)
-äœæ/articles/:id (PUT)
-æŽæ°/articles/:id (DELETE)
-destroy
PUTããã³DELETEã¯ãGETãPOSTãªã©ã®HTTPã¡ãœããã§ãã
ãããã£ãŠãã³ã¬ã¯ã·ã§ã³ã管çããããã«å¿
èŠãªãã¹ãŠã®ã¡ãœãããããŠãŒã¶ãŒãçè§£ã§ããå°ããªURLã»ããã«åããããšãã§ããŸããã
ã¢ããªã±ãŒã·ã§ã³ããªãœãŒã¹ã»ããã«åå²ãããªãœãŒã¹ã«ã¢ã¯ã»ã¹ããããã®æ±çšåœ¢åŒïŒURLãäœæããæ¹æ³ïŒãæäŸããåçã¯
RESTãšåŒã°ããŸãã ã¢ã€ãã¢ã¯ããªãœãŒã¹ã®æäœã«ã¹ããŒãã¬ã¹ãããã³ã«ã䜿çšããããšã§ãïŒå¿
èŠãªæ
å ±ã¯ãã¹ãŠURLã«å«ãŸããŠããŸãïŒãããã«ãããã¢ããªã±ãŒã·ã§ã³ã®ã¹ã±ãŒã©ããªãã£ãåäžãããã£ãã·ã¥ãç°¡çŽ åãããŸãã
ãªãœãŒã¹ã¯URLã«ãã£ãŠæç¢ºã«èå¥ããããããã¢ããªã±ãŒã·ã§ã³ã®äž»ãªäœæ¥ã¯2ã€ã®ã¿ã¹ã¯ã«åæžãããŸããURLã§ç€ºããããªãœãŒã¹ããŠãŒã¶ãŒããŒãžã«æäŸãããªãœãŒã¹ããããªãã¯ã§ãªãå Žåã¯ã¢ã¯ã»ã¹æš©ã確èªããŸãã ãããã£ãŠãRESTã¹ã¿ã€ã«ã®Webã¢ããªã±ãŒã·ã§ã³ã®äœæãšä¿å®ã¯éåžžã«ç°¡åã§ãã
çµæãèŠãŠã¿ãŸãããããµãŒããŒãèµ·åããŸã
<code class = 'sh' lang = 'sh'> `$> rubyââ script / server` </ code>
ãããŠè¡ã
httpïŒ// localhostïŒ3000 /èšäºç§ã¯ãã®ãšã©ãŒãåãåããŸããïŒ
<code> Mysql ::ãšã©ãŒïŒããŒãã« 'example_development.articles'ã¯ååšããŸããïŒSELECT * FROMèšäº</ code>
ããŒã¿ããŒã¹ã«ã¯
articles
ããŒãã«ããããŸãã;ããªãã¯ãããäœæããªããã°ãªããŸããã
Railsã®ããŒã¿ããŒã¹ããŒãã«ãžã®å€æŽã¯ãç§»è¡ã¡ã«ããºã ã«ãã£ãŠè¡ãããŸãã Railsã¯ã
articles
ããŒãã«ïŒ
db/migrate/001_create_articles.rb
ïŒãäœæããããã«1ã€ã®ç§»è¡ãçæããŸããã ããŒã¿ããŒã¹ã«é©çšããã¢ããªã±ãŒã·ã§ã³ãã©ã«ããŒã«ç§»åããŠå®è¡ããå¿
èŠããããŸã
<code> $> rake dbïŒç§»è¡</ code>
ç§»è¡ã®çµæãarticlesããŒãã«ãããŒã¿ããŒã¹ã«äœæãããF5ãã©ãŠã¶ãŒãã¯ãªãã¯ããŠã¢ããªã±ãŒã·ã§ã³ã詊ãããšãã§ããŸãã
Rakeã«ã€ããŠäžèšã
Rakeã¯ã
make
ã
ant
ã
maven
ãªã©ã®ãŠãŒãã£ãªãã£ã®ä»£æ¿åã§ãã
Rakeãç§ãã¡ã®ããã«ã§ããããšãç¥ãã«ã¯ã次ã®ããšãããŠãã ããã
<code class = 'sh' lang = 'sh'> $> rake -T </ code>
Rakeã§å®è¡ã§ããã¿ã¹ã¯ã®é·ããªã¹ããå
¥æããŠãã ããã ã¿ã¹ã¯ã¯Rubyã§èšè¿°ããã
Rakefileãã¡ã€ã«ã«ãããŸãã æåã¯ããã¡ã€ã«ã«ã¯
require 'tasks/rails'
ã䜿çšããŠæ¥ç¶ãããŠããæšæºã®ã¿ã¹ã¯ã»ããã®ã¿ãå«ãŸããŠããŸãã
db:migrate
ã¿ã¹ã¯ã®èª¬æã®äŸã次ã«ç€ºããŸãã
<code class = 'ruby' lang = 'ruby'> descãdb / migrateã®ã¹ã¯ãªããã䜿çšããŠããŒã¿ããŒã¹ãç§»è¡ããŸããVERSION= xã§ç¹å®ã®ããŒãžã§ã³ãã¿ãŒã²ããã«ããŸãã
ã¿ã¹ã¯ïŒç§»è¡=>ïŒç°å¢do
ActiveRecord :: Migrator.migrateïŒ "db / migrate /"ãENV ["VERSION"]ïŒENV ["VERSION"]ãTo_iïŒnilïŒ
Rake ::ã¿ã¹ã¯["dbïŒschemaïŒdump"]ãActiveRecordã®å Žåã«åŒã³åºã:: Base.schema_format ==ïŒruby
çµäº</ code>
Rakeã®çŽ æŽãããç¹ã¯ãã¿ã¹ã¯ã®èª¬æãéåžžã®Rubyã³ãŒãã§ããããšã§ãã ããã«ããã
ant
ãŸãã¯
maven
ãšæ¯èŒããŠãæ°ããã¿ã¹ã¯ã®è¿œå ã倧å¹
ã«ç°¡çŽ åãããŸãã
Martin Fowlerã«ã¯
ã Rakeã«é¢ãã
åªããèšäºããããŸãã
å¿
èŠã«å¿ããŠãRakeã«ã€ããŠç¥ãããšãã§ããŸãã ããã§ã
db:migrate
ã¿ã¹ã¯ãç§»è¡ãããªã¬ãŒãã倿Žãé©çšããã³ããŒã«ããã¯ã§ããããšããã§ã«ããããŸããã
db/migrate/001_create_articles.rb
ãèŠããšã
CreateArticles
ã¯ã©ã¹ã«ã¯upãšdownã®2ã€ã®ã¡ãœãããããããšã
db/migrate/001_create_articles.rb
ã ãããã®ã¡ãœããã¯ãç§»è¡ãé©çšãããããã«å¿ããŠããŒã«ããã¯ããããšãã«åŒã³åºãããŸãã ãã¡ã€ã«åã®çªå·
001
ã¯ç§»è¡ã®ã·ãªã¢ã«çªå·ã§ãããç§»è¡ã®é©çšé åºã決å®ããããã«äœ¿çšãããŸããäžæ¹ãã¬ãŒã«ã¯1åã®ç§»è¡ãæ°åé©çšããªãããã«ããŒã¿ããŒã¹ã«ããŒãžã§ã³ãä¿åããŸãã ããŒã¿ããŒã¹ãç¹å®ã®ããŒãžã§ã³ã«
db:migrate
ã¯ã
db:migrate
ãVERSIONãã©ã¡ãŒã¿ãŒã§å®è¡ããå¿
èŠããããŸãã
<code> $> rake dbïŒmigrate VERSION = 0 </ code>
ãã®çµæãããŒãã«ããŸã äœæãããŠããªãå ŽåãããŒã¿ããŒã¹ã¯ããŒãžã§ã³0ã«ç§»è¡ããŸãã ããã¯ãã¢ããªã±ãŒã·ã§ã³ã詊ããåŸã«ããŒã¿ããŒã¹ãã¯ãªã¢ãã䟿å©ãªæ¹æ³ã§ãã ãã®åŸã
db:migrate
ãåŒã³åºãããšãã§ããŸã
db:migrate
ãã©ã¡ãŒã¿ãŒãªãã§å床移è¡ãããšããã¹ãŠã®ç§»è¡ãé©çšãããŸãã
ã«ã¿ãã°ã¯çŽ æŽãããã§ãããèšäºã¯ãã©ãŒããããããŠããŸããã
ãã§ã«ã«ã¿ãã°ãèŠãŠãããã確èªããŠãã ããã ã¢ããªã±ãŒã·ã§ã³ã®äž»ãªã¿ã¹ã¯ã«åãçµãæé-èšäºã®ãã©ãŒãããã
æžåŒèšå®ã®ããã®ã³ãŒãã¯ãã§ã«ãããŸãããä»ã§ã¯ãã®äœ¿ç𿹿³ãçè§£ããå¿
èŠããããŸãã æåã®ããŒãžã§ã³ã§ã¯ãã³ã³ãããŒã©ãŒãããªãã£ããããã³ãŒããçŽæ¥é
眮ããã
Article
ã¢ãã«ã衚瀺ãããããã«ãªããŸããããã³ãŒããã¢ãã«ã«é
眮ãããšãæžåŒèšå®ãç¹å®ã®ã¢ãã«ã«å³å¯ã«é¢é£ä»ããããã³ãŒããåå©çšã§ããªããªããšããäºå®ã«ã€ãªãããŸãããã©ãŒããããããã¢ãã«ã«äŸåããŸãããã
ãã©ã°ã€ã³ãäœæããŸãã
Railsã§ã¯ãããã¯ã¢ããªã±ãŒã·ã§ã³ã«æ©èœã远å ããèªç¶ãªæ¹æ³ã§ãã ãã®å ŽåãæžåŒèšå®ã³ãŒãã¯ã¢ãã«ããåé¢ãããä»ã®ã¢ããªã±ãŒã·ã§ã³ã§äœ¿çšã§ããããã«ãªããŸãã
ãã©ã°ã€ã³ããããšãã°æ¬¡ã®ãããªäžèŠãªåèªãªãã§ãã©ãŒãããã®ãµããŒããæäŸããããã«ããŸãã
<code>ã¯ã©ã¹Article <ActiveRecord :: Base
acts_as_formattedïŒbody
çµäº</ code>
ãã®å ŽåããœãŒã¹ããã¹ãã¯
body
ãã£ãŒã«ãã«ããã
body_as_html
ã¡ãœããã䜿çšããŠèšäºã®ãã©ãŒããããããããã¹ããååŸã§ããŸãã èšäºãèšè¿°ããã圢åŒã¯ã
body_format
ãã£ãŒã«ãã«ãããŸãã
å§ããŸãããã ãŸãæåã«ããã©ã°ã€ã³ã¹ã±ã«ãã³ãäœæããããã«ã¬ãŒã«ãä¿¡é ŒããŸãã
<code> $> rubyââ script /ãã©ã°ã€ã³acts_as_formattedãçæ</ code>
vendor/plugins
ã¯ã
vendor/plugins
ãã©ã«ããŒã«è¡šç€ºãããŸãã äžèº«ã¯äœã§ããïŒ
lib
ãã®ãã©ã«ããŒã«ã¯ã³ãŒããå«ãŸããŠããŸãlib/acts_as_formatted.rb
ãã©ã°ã€ã³ã³ãŒãããããŸãtasks
-ãã©ã°ã€ã³ã¯ãRakeã®ã¿ã¹ã¯ã远å ã§ããŸãããããã¯äžè¬ãªã¹ãã«è¡šç€ºãããŸãtest
-ãã©ã°ã€ã³ã¯ååã«ãã¹ãããå¿
èŠããããŸãinit.rb
ãã®ãã¡ã€ã«ã¯ããŒãæã«å®è¡ãããããããlib
ãããã©ã°ã€ã³ãã¡ã€ã«ãå«ãŸããŸãinstall.rb
ã uninstall.rb
ãããã®ãã¡ã€ã«ã¯ãã©ã°ã€ã³ã®ã€ã³ã¹ããŒã«ããã³åé€äžã«å®è¡ãããŸãããå¿
èŠãããŸããRakefile
ãã©ã°ã€ã³ã®Rakeã¿ã¹ã¯ãå«ããã¡ã€ã«ïŒãã¹ãã®å®è¡ãšããã¥ã¡ã³ãã®çæïŒ
çŸåšããã©ãŒãããçšã®ã³ãŒããèšè¿°ããActiveRecordã«ãµããŒãã远å ããŸãã
ã©ããã£ãŠããã®ïŒ ã¿ã¹ã¯ã¯ã
acts_as_formatted
ã¡ãœããã
ActiveRecord::Base
ã«è¿œå ããããšã§ãã ãã®ã¡ãœããã§ã¯ããã©ãŒãããããµããŒãããããã«å¿
èŠãªã³ãŒããçæããŸãã ãããè¡ãã«ã¯ãRubyã§ãããè¡ãæ¹æ³ãç¥ãå¿
èŠããããŸãã
Rubyã®æ¢åã®ã¯ã©ã¹ã«æ©èœã远å ããæ¹æ³ã
Rubyã§ã¯ããã¹ãŠããã®åçŽãªããã°ã©ã ã®ãªããžã§ã¯ãã§ãã
<code class = 'ruby' lang = 'ruby'> print "Hello WorldïŒ" </ code>
ãªããžã§ã¯ãã®ã¡ãœãããåŒã³åºãããŸãã ã©ã®ãªããžã§ã¯ãã§ããïŒ ããã¯ã¿ã€ãã¢ãžã¥ãŒã«ïŒåå空éãããã±ãŒãžã®ã¢ããã°ïŒã®ãªããžã§ã¯ãã§ãããã°ããŒãã«ã¢ãžã¥ãŒã«ã¯ã«ãŒãã«ãšåŒã°ããŸãã ã¢ãžã¥ãŒã«ã¯ã¯ã©ã¹ã«äŒŒãŠããŸãããã¡ãœããã宿°ãããã³ä»ã®ã¢ãžã¥ãŒã«ãšã¯ã©ã¹ã®ã¿ãå«ããããšãã§ãããšããç¹ã§ç°ãªããŸãã åæã«ãrubyã䜿çšãããšãã¢ãžã¥ãŒã«ãä»ã®ã¢ãžã¥ãŒã«ãšã¯ã©ã¹ã«ããã¯ã¹ïŒããã¯ã¹ã€ã³ïŒã§ããŸããããã¯ãã¢ãžã¥ãŒã«ãšã¯ã©ã¹ã®
extend
ããã³çµã¿èŸŒã¿ã¡ãœããã䜿çšããŠè¡ãããŸããããšãã°ã
<code class = 'ruby' lang = 'ruby'> class MyClass
åæå¯èœãæ¡åŒµãã
çµäº</ code>
ãŸãã¯
<code class = 'ruby' lang = 'ruby'> class MyClass
çµãã
MyClass.extendïŒåæå¯èœïŒ</ code>
åæã«ã
Enumerable
ã¢ãžã¥ãŒã«ã§å®çŸ©ãããŠãããã¹ãŠã®ã¡ãœããã宿°ãã¯ã©ã¹ãããã³ã¢ãžã¥ãŒã«ã
MyClass
ã¯ã©ã¹ã«è¡šç€ºãã
Enumerable
ã
ãã©ã°ã€ã³ãäœæããŠããŸãã
ã»ãšãã©ãã¹ãŠã®ãã©ã°ã€ã³ã³ãŒãã¯ã
acts_as_formatted.rb
ãã¡ã€ã«ã«ãããŸãã
ãã©ã°ã€ã³ã¯2ã€ã®ã¢ãžã¥ãŒã«ã§æ§æãããŸãã
ActiveRecord::Acts::ActsAsFormatted::Formatting
-ãã©ãŒããããæ
åœããã³ãŒãActiveRecord::Acts::ActsAsFormatted::ClassMethods
å¯äžã®ã¡ãœããã¯acts_as_formatted
ããã®ã¢ãžã¥ãŒã«ã¯ActiveRecord::Base
远å ãããŸã
acts_as_formatted
ã¡ãœããã®
acts_as_formatted
èŠãŠã¿ãŸãããã
æåã«ããµããŒããããŠãã圢åŒãšäœ¿çšããããã£ãŒã«ãã確èªãïŒãã®å Žåã
body
ã
body_format
ã
body_as_html
ïŒãæ¬¡ã«æ€èšŒã«ãŒã«ã远å ããŠã圢åŒãã£ãŒã«ãã«æå¹ãªåœ¢åŒãå«ãŸããŠããããšã確èªãïŒæ€èšŒã倱æãããšãªããžã§ã¯ããä¿åã§ããŸããïŒã2ã€ã®ã¡ãœãããã¯ã©ã¹ã«è¿œå ããŸããµããŒããããŠãããã©ãŒããããšãã©ãŒãããããããã£ãŒã«ãïŒ
supported_formats
ãš
body_as_html
ïŒã
body_as_html
ããŸãã
ãã¹ãŠã®ãã©ãŒãããäœæ¥ã¯ã
ActiveRecord::Acts::ActsAsFormatted::Formatting
ã¢ãžã¥ãŒã«ã§è¡ãããŸãã ããã¹ãããã©ãŒãããããã¡ãœããããããŸãïŒ
format
ã
format_markdown
ããã³
format_textile
ãããã³ã¢ãžã¥ãŒã«å
ã®ã¡ãœããã«åºã¥ããŠãµããŒãããããã©ãŒããããæ±ºå®ããsupported_formatsã¡ãœããã
ããã§ã
init.rb
ã«åæåã³ãŒãã远å ããŸãã
<code class = 'ruby' lang = 'ruby'> require 'acts_as_formatted'
ActiveRecord :: Base.extendïŒActiveRecord :: Acts :: ActsAsFormatted :: ClassMethodsïŒ</ code>
ãããŠãããªãã¯ããžãã¹ã§ãã©ã°ã€ã³ã詊ãããšãã§ããŸãã æžåŒèšå®ãããããã¹ãã衚瀺ããã«ã¯ããã¥ãŒãä¿®æ£ããå¿
èŠããããŸãã
ãã¥ãŒãããŸãªããã¬ãã¥ãŒããŸã
ãŸããæ°ãããã©ãŒã ãšç·šéãã©ãŒã ã§ã³ãŒãã®éè€ãåãé€ããèšäºã®äœæãšç·šéã«äœ¿çšã§ãã1ã€ã®ãã©ãŒã ãäœæããŸãã ãã©ãŒã éã®å¯äžã®éãã¯ãURLãšéä¿¡æ¹æ³ã§ãã ãããã£ãŠããã©ãŒã ã®äœ¿ç𿹿³ã«å¿ããŠãç·šéãèšäºã®äœæã®ããã«ãURLãšã¡ãœãããæ±ºå®ããè£å©ã¡ãœãããäœæãããšäŸ¿å©ã§ãã
è£å©ã¡ãœããã®å Žåãã¬ãŒã«ã¯ãã«ããŒã¢ãžã¥ãŒã«ã«ãã£ãŠäœæãã
app/helpers/application_helper.rb
ãã³ãŒãã¯
app/helpers/application_helper.rb
ã
edit_form_for
ã¡ãœããã¯ãã¢ãã«ãæ¢ã«ä¿åãããŠãããã©ããã倿ããããã«å¿ããŠãã¢ãã«ãäœæãŸãã¯æŽæ°ããããã®ãã©ãŒã ãçæããŸãã
submit_edit
ããã³
cancel_edit
ã¯ããã©ãŒã ãéä¿¡
cancel_edit
ããã®ãã¿ã³ãšããã©ãŒã ããæ»ãããã®ãªã³ã¯ãäœæããŸãã
次ã«ããã©ãŒã ã®ãã¥ãŒãäœæããŸãã ã¬ãŒã«å
ã®åå©çšå¯èœãªãã¥ãŒã®éšåã¯ãããŒã·ã£ã«ãšåŒã°ããŸãã éšåçãªãã¡ã€ã«åã¯ã¢ã³ããŒã¹ã³ã¢ã§å§ãŸããŸãã éåžžããããã¯
ãããã䜿çšãããã¥ãŒãšåãå Žæã«ãããŸã ã
ãã®ãããªãªãã¡ã¯ã¿ãªã³ã°ã®åŸã
new
ãã¥ãŒãš
edit
ãã¥ãŒã®ã³ãŒãã¯éåžžã«åçŽã«ãªãã1è¡ã«ãªããŸãã
<code class = 'ruby' lang = 'ruby'> <ïŒ
= renderïŒpartial => 'article' ,: object => @ articleïŒ
> </ code>
ãã¬ãã¥ãŒã远å ããŸãã ãããè¡ãã«ã¯ãèšäºã®æžåŒèšå®ãããããã¹ããè¿ã
ã³ã³ãããŒã©ãŒã§
preview
ã¡ãœãããäœæããŸãã
<code class = 'ruby' lang = 'ruby'> def preview
article = Article.newïŒparams [ïŒarticle]ïŒ
render_text article.body_as_html
çµäº</ code>
次ã«ãã«ãŒãã£ã³ã°ããŒãã«ã«ã«ãŒã«ã远å ããŸãã
<code class = 'ruby' lang = 'ruby'> map.resourcesïŒèšäºã
ïŒã³ã¬ã¯ã·ã§ã³=> {ïŒãã¬ãã¥ãŒ=>ïŒä»»æ} </ code>
2è¡ç®ã¯ãurl
/articles;preview
ã«ãŒã«ã远å ã
/articles;preview
ã
:collection
ã¯ãã©ã®URLã§ãã¬ãã¥ãŒãçæããããã¯éèŠã§ã¯ãªããããã³ã¬ã¯ã·ã§ã³URLïŒ
/articles
ïŒã䜿çšãããããšãæå³ããŸãã
:collection
代ããã«ã
:collection
:member
ã䜿çšã§ããŸããURLã¯ç¹å®ã®èšäºïŒ
/articles/:id
ïŒã«ãªããŸãããã®å Žåãäœæãããèšäºããã¬ãã¥ãŒããããšã¯ã§ããŸããã
:any
ã¯ãä»»æã®HTTPã¡ãœããã䜿çšããŠåŒã³åºãããšãã§ããããšãæå³ããŸãããã®å Žåãäœææã«POSTã䜿çšãããç·šéæã«PUTã䜿çšãããŸãã
次ã«ããã©ãŒã ã«ãµããŒãã远å ããŸãã ã³ãŒãã§ãã¥ãŒãç
©éã«ããªãããã«
ãè£å©ã¡ãœãããäœæããŸãã ãã®ã¡ãœããã¯ãã¿ã³ãäœæããŸããã¯ãªãã¯ãããšããã©ãŒã ãéåæã§ãµãŒããŒã«éä¿¡ãããã¡ãœããã«æž¡ãããèŠçŽ ã«å¿çã衚瀺ãããŸãã
ãã¥ãŒã«ãã©ãŒããããããèšäºã衚瀺ããããã®ãã¿ã³ãšèŠçŽ ã远å ããããšã¯æ®ã£ãŠã
ãŸã ã
ãã¬ãã¥ãŒãã¿ã³ã¯
ãããã¿ã€ãã©ã€ãã©ãªã䜿çšããŠãªã¯ãšã¹ãããµãŒããŒã«éåæçã«éä¿¡ãããã
ãããŒãžãã³ãã¬ãŒãã«ãã®èªã¿èŸŒã¿ã远å ããå¿
èŠããã
ãŸã ã
<code class = 'ruby' lang = 'ruby'> <ïŒ
= javascript_include_tag 'prototype'ïŒ
> </ code>
ããã§ã2çªç®ã®ããŒãžã§ã³ã®æ©èœã¯å®äºãããšèŠãªãããšãã§ããŸãã
ããã§ãæåã®ããŒãžã§ã³ããæ®ã£ãŠããã³ãŒããåé€ã§ããŸãã
<code>ã¹ã¯ãªãã/ã³ã³ãããŒã©ãŒå
¥åãã¬ãã¥ãŒãç Žæ£</ code>
ãããŠæåŸã«ã
ãã¹ãã£ã³ã°äºæ¥è
ãžã®ã¢ããªã±ãŒã·ã§ã³ã®ã€ã³ã¹ããŒã«ã«ã€ããŠå°ã説æããŸãã
èªå®
ã§ãã¹ãŠãããªãã®ããã«åãããšãèµ·ãããããããŸããããæåºãšããŠãã¹ãã£ã³ã°ãæåŠããŸãã å€ãã®çç±ããããããããŸãããããããã®æãäžè¬çãªã®ã¯ãããã€ãã®å®ç³ãèŠã€ãããªããããã¹ãã®ããŒãžã§ã³ãééã£ãŠããããšã§ãã ããã¯ãã¬ãŒã«èªäœãšãã¢ããªã±ãŒã·ã§ã³ãäŸåããgemã®äž¡æ¹ã«é©çšãããŸãã
ãŸããã¬ãŒã«ãžã®äŸåãæ±ããŸãã ã¢ããªã±ãŒã·ã§ã³ããã¹ãã£ã³ã°ã«ã¢ããããŒãããåã«ã次ã®ããšãè¡ããšéåžžã«äŸ¿å©ã§ãã
<code> $>ã¬ãŒãã¬ãŒã«ïŒfreezeïŒgems </ code>
ãã®çµæãã¢ããªã±ãŒã·ã§ã³ãéçºããŠããRailsã®ã³ããŒã
vendor/rails
ãã©ã«ããŒã«è¡šç€ºããããµãŒããŒãããã䜿çšããããããã¹ãã®ããŒãžã§ã³ãæ°ã«ããå¿
èŠããªããªããŸãã
ã¬ãŒã«ã«å ããŠãã¢ããªã±ãŒã·ã§ã³ã¯å€ãã®å Žåãããã€ãã®å®ç³ã«äŸåããŸãããã®äŸã§ã¯ãRedClothãšMarukuã§ãã ãããã®äŸåé¢ä¿ã®åé¡ã解決ããããã«ã
Nicå士ã¯ãã°ããããã©ã°ã€ã³
-Gems on RailsãæžããŸããã åãåçã§åäœããŸã-gemã®ããŒã«ã«ã³ããŒãäœæããŸãã ãããã€ã³ã¹ããŒã«ããŠäœ¿ç𿹿³ãåŠã³ãŸãããïŒ
<code> $> gem install gemsonrails </ code>
ã¢ããªã±ãŒã·ã§ã³ã®ãããã©ã«ããŒã«ç§»åããŠå®è¡ããŸã
<code> $> gemsonrails
gems_on_rails 0.6.4ã./vendor/plugins/gemsonrailsã«ã€ã³ã¹ããŒã«ããŸãã</ code>
ããã§ã
Gems on Railsãã©ã°ã€ã³ãã€ã³ã¹ããŒã«ãããRakeã«åœ¹ç«ã€ã¿ã¹ã¯ã远å ãããŸããã
<code> $> rake -T
...
rake gemsïŒfreezeïŒRubyGemããã®Railsã¢ããªã±ãŒã·ã§ã³ã«åºå®ããŸãã init.rbã¯èµ·åæã«ããŒããããŸãã
rake gemsïŒlinkïŒRubyGemããã®Railsã¢ããªã±ãŒã·ã§ã³ã«ãªã³ã¯ããŸãã init.rbã¯èµ·åæã«ããŒããããŸãã
rake gemïŒunfreezeïŒãã®Railsã¢ããªã±ãŒã·ã§ã³ããRubyGemãããªãŒãºè§£é€/ãªã³ã¯è§£é€ããŸã
... </ code>
gems:link
ã¢ããªã±ãŒã·ã§ã³ã®ããŒãæã«gemãããŒãããvendor/gems
ã³ãŒãã远å ããŸãvendor/gems
ããªãå Žåãã¢ããªã±ãŒã·ã§ã³ã¯ããŒããããŸããïŒgemãååšããªãããšãæäœäžã«ã§ã¯ãªããããã«ç¥ãã®ã䟿å©ã§ãïŒgems:freeze
-gemã®ããŒã«ã«ã³ããŒãäœæããŸãããã®ã³ããŒã¯ã¢ããªã±ãŒã·ã§ã³ã§äœ¿çšãããŸãgems:unfreeze
- gems:link
ã«ãã£ãŠçæãããããŒã«ã«ã³ããŒãšã³ãŒããåé€ããŸã
ã¢ããªã±ãŒã·ã§ã³ã«å¿
èŠãªgemã®ããŒã«ã«ã³ããŒãäœæããŸãããã
<code> $> rake gemsïŒããªãŒãºGEM = maruku
$>ã¬ãŒãå®ç³ïŒããªãŒãºGEM = redcloth </ code>
maruku-0.5.6
ããã³
RedCloth-3.0.4
ãã©ã«ããŒãã
vendor/gems
ãã©ã«ããŒã«è¡šç€ºãããŸããã
以äžã§ãã 質åãããŠã
ããã¥ã¡ã³ãã
ã¬ãŒã«ã«é¢ããæ¬ãèªãã§ãã ããã
äž»ãªããšã¯ãã³ãŒããæžãããšã§ãïŒ
PSã æåŸã®è¡ãæžããŠãããšãã«ãã¬ãŒã«ã«é¢ãã
ã¹ã¯ãªãŒã³ãã£ã¹ããããè峿·±ã
ãµã€ãã«åºäŒããŸããã