ããã«ã¯èšèªã«é¢ããããã€ãã®èšäºããããŸãããå°é£ãããå Žåã¯ããããèªãã®ã圹ç«ã€ãšæããŸã- ãŠã£ãããã£ã¢ ãèšèªã§æé«ã®æ¬-Rubyã®ããã°ã©ãã³ã° ãã¬ãŒã«ã§æé«ã®æ¬-Railsã§ã®ã¢ãžã£ã€ã«éçº ããããŠè³ªåãããŠãã ããã
RubyãšRailsã®ã€ã³ã¹ããŒã«ãå§ããŸãããã
WindowsãŠãŒã¶ãŒã¯ã ã¯ã³ã¯ãªãã¯Rubyã€ã³ã¹ããŒã©ãŒãããŠã³ããŒãããŠã€ã³ã¹ããŒã«ããå¿ èŠããããŸã ã
LinuxïŒUbuntuïŒãŠãŒã¶ãŒã¯ãRubyãããã«ç°¡åã«ã€ã³ã¹ããŒã«ã§ããŸãã
<code class = 'sh' lang = 'sh'> $> sudo apt-get install rubyââ rubyââgems rake </ code>
RubyãåäœããŠããããšã確èªããŠãã ãã
<code class = 'sh' lang = 'sh'> $> rubyââ -v ruby 1.8.5ïŒ2006-08-25ïŒ[i486-linux] </ code>
ã¬ãŒã«ãé 眮ããŸãã
<code class = 'sh' lang = 'sh'> $> gem install rails --include-dependencies $> rails -v Rails 1.2.3 </ code>
å§ããããã«å¿ èŠãªã®ã¯ãRubyæ§æã®åŒ·èª¿è¡šç€ºãšã³ã³ãœãŒã«ããã³ãã³ããå®è¡ããæ©èœãåããããã¹ããšãã£ã¿ãŒã ãã§ãã
IDEã®ãã¡ã³ã®ããã«ãç§ã¯Aptanaã«ã¢ããã€ã¹ããããšãã§ããŸããç§ã¯ããã«ã³ãŒããæžããŸãïŒç§ã¯ã¡ããã©Eclipseã奜ãã§ã:)ã
ã³ã³ãœãŒã«ã®ãã¹ãŠã®äŸãæäŸããŸããAptanaã§è¡ãã¹ãããšã¯æç¢ºã§ããå¿ èŠããããŸããããã«ã€ããŠã¯å¥ã«èšè¿°ã§ããŸãã
ããã§ããã¹ãŠãæ°ãããããžã§ã¯ããéå§ããæºåãã§ããŸããã
Railsã®ãããžã§ã¯ãã¯ããããžã§ã¯ãã¹ã±ã«ãã³ã®äœæããå§ãŸããŸãã
<code class = 'sh' lang = 'sh'> $> railsã/ projects / example </ code>
ãµã³ãã«ãã©ã«ããŒãäœæããããã®äžã«ãããžã§ã¯ãã¹ã±ã«ãã³ãäœæãããŸãïŒãã¹ãç¬èªã®ãã®ã«çœ®ãæããããšãå¿ããªãã§ãã ããïŒã äžèº«ãèŠãŠã¿ãŸãããã
- ã¢ããª-ããã«ã¢ããªã±ãŒã·ã§ã³ã³ãŒãããããŸãïŒã¢ãã«ããã¥ãŒãã³ã³ãããŒã©ãŒ
- ã³ã³ããŒãã³ãã¯å€ãããŒãžã§ã³ã®ã¬ã¬ã·ãŒã§ãããã³ã³ããŒãã³ãã¯äœ¿çšãããŸãã
- config-ã¢ããªã±ãŒã·ã§ã³æ§æïŒäž»ã«èå³ããã
- ããŒã¿ããŒã¹æ¥ç¶ãã©ã¡ãŒã¿ãŒãšã³ã³ãããŒã©ãŒã¡ãœãããžã®URLã«ãŒãã£ã³ã°
- db-ããŒã¿ããŒã¹ã§äœæãããããŒãã«ã®èšå®ã¯ããã«ä¿åãããŸã
- doc-ã³ãŒãå ã®ã³ã¡ã³ãããçæãããããã¥ã¡ã³ã
- lib-䟿å©ãªã©ã€ãã©ãªã®ã³ãŒããé 眮ã§ããŸã
- log-WebãµãŒããŒã®ãã°
- public-WebãµãŒããŒã®ã«ãŒããã©ã«ããŒãããã«éçã³ã³ãã³ãããããŸãã
- ã¹ã¯ãªãã-éçºã«éåžžã«åœ¹ç«ã€ã¹ã¯ãªãã
- ãã¹ã-ãã¹ã
- tmp-ãŠãŒã¶ãŒã»ãã·ã§ã³ãšpidãã¡ã€ã«ã¯ããã©ã«ãã§ããã«ä¿åãããŸã
- ãã³ããŒ-ããã«äœ¿çšãããã©ã°ã€ã³ããããŸã
WebãµãŒããŒãèµ·åããŠãã¢ããªã±ãŒã·ã§ã³ãåäœããŠããããšã確èªããŸãã ã¢ããªã±ãŒã·ã§ã³ãã©ã«ããŒã«ç§»åããã¬ãŒã«ã«ä»å±ããŠããWebãµãŒããŒãå®è¡ããŸãã
<code class = 'sh' lang = 'sh'> $> rubyââ script / server è¡é ã®ã«ããŒã¯Windowsã§ã®ã¿èšè¿°ããå¿ èŠããããŸãã</ code>
httpïŒ// localhostïŒ3000 /
ãæ°ã«å ¥ãã®ãã©ãŠã¶ã§ãã®ãªã³ã¯ãéããŠãããããããããŒãžãèŠãŠãã ããããã¹ãŠãé 調ã§ããç°¡åãªã¢ããªã±ãŒã·ã§ã³ãäœæããŸãã
ã©ã®ã¢ããªã±ãŒã·ã§ã³ãæžã䟡å€ããããŸããïŒ
äºå®ã人éã®ããŒã¯ã¢ããïŒWikiãMarkdownãTextileïŒã§ããã¹ããæžãããšãã§ããŸãããhabrã¯ããã¹ãã®ããŒã¯ã¢ããã«htmlã®ã¿ããµããŒãããŸããããã¹ããæžããããšãã«htmlãæžãã®ã¯äžäŸ¿ã§ãã
ãããã£ãŠãã¢ããªã±ãŒã·ã§ã³ã¯ããã¹ããhtmlã§ãã©ãŒãããããŸãïŒ
æåã¯éåžžã«ã·ã³ãã«ã§ã2ããŒãžããããããŸãããæåã®ããŒãžã§ã¯ããã¹ããå ¥åã§ãã2çªç®ã®ããŒãžã§ã¯ãã©ãŒãããããã圢åŒã§è¡šç€ºããŠãçµæã®htmlãã³ããŒã§ããŸãïŒããã«æçš¿ããã«ã¯:)
ã³ãŒããæžãå§ããŸãã
æ ãè ã®ããã«ãã¢ããªã±ãŒã·ã§ã³ã®ãœãŒã¹ã³ãŒããã¬ã€ã¢ãŠãããŸããããããã§ãèªåã§ã³ãŒããæžãæ¹ãé¢çœãã§ãã
MVCãã¿ãŒã³ãWebã¢ããªã±ãŒã·ã§ã³ã¢ãŒããã¯ãã£ã®äºå®äžã®æšæºã«ãªã£ãããšã¯èª°ã«ãšã£ãŠãç§å¯ã§ã¯ãªããšæããŸãã RailsãäŸå€ã§ã¯ãããŸãããã¢ããªã±ãŒã·ã§ã³ã¯ã¢ãã«ããã¥ãŒãã³ã³ãããŒã©ãŒã§æ§æãããŠããŸãã
çŸåšããã³å°æ¥ããã¹ãŠã®æ¥åžžçãªäœæ¥ãè¡ãã¹ã¯ãªããã䜿çšããŸããæåã«ç¥ãã®ã¯
generate
ãã³ãŒããçæããŸãã
<code class = 'sh' lang = 'sh'> 2ã€ã®ã¡ãœããïŒãã¥ãŒïŒã§ã³ã³ãããŒã©ãŒïŒformatting_controllerãšåŒã³ãŸãïŒãäœæããŸãã input-ããã¹ããå ¥åãããã ãã¬ãã¥ãŒ-ãã©ãŒããããããããã¹ãã衚瀺ããŸã $> rubyââ script /ã³ã³ãããŒã©ãŒã®ãã©ãŒãããå ¥åãã¬ãã¥ãŒãçæ</ code>
ãã®çµæãã¬ãŒã«ã¯ããã€ãã®ãã¡ã€ã«ãçæããŸãããããã®ãã¡æ¬¡ã®ãã®ãè峿·±ããã®ã«ãªããŸããã
<code class = 'sh' lang = 'sh'> app / controllers / format_controller.rb ã¢ããª/ãã¥ãŒ/ãã©ãŒããã/ input.rhtml app / views / format / preview.rhtml </ code>
çæãããããŒãžããã©ãŠã¶ã§èŠãæ¹æ³ã¯ïŒ
httpïŒ// localhostïŒ3000 /ãã©ãŒããã/å ¥å
httpïŒ// localhostïŒ3000 /ãã©ãŒããã/ãã¬ãã¥ãŒ
ãªããã®ãããªURLãªã®ãïŒ
ã«ãŒãã£ã³ã°ã¢ãžã¥ãŒã«ã¯ãã¬ãŒã«å ã®URLã®è¡šç€ºãæ åœããŸãããã¡ã€ã«å ã§æ§æã§ããŸãã
<code class = 'sh' lang = 'sh'> config / routes.rb </ code>
ã«ãŒãã£ã³ã°ã®è©³çްã«ã€ããŠã¯èª¬æããŸããããããã«ã€ããŠã¯å¥ã®èšäºãæžãããšãã§ããŸãã æ¬¡ã«ããããã®2è¡ã远å ããŠããã®ç®çã説æããŸãã
<code class = 'ruby' lang = 'ruby'> map.connect ''ãïŒcontroller => 'formatting' ,: action => 'input' ,: conditions => {ïŒmethod =>ïŒget} map.preview ''ãïŒcontroller => 'formatting' ,: action => 'preview' ,: conditions => {ïŒmethod =>ïŒpost} </ code>
æ¥ç¶ãšãã¬ãã¥ãŒã¯ã¡ãœããåŒã³åºãã§ãã æåã®åŒæ°ã¯ãã¹ã§ãããã®å Žåããã¹ã¯ç©ºã§ããã€ãŸãããããã¯ãµã€ãã®ã«ãŒãã®ã«ãŒã«ã§ãã 2çªç®ã®åŒæ°ã¯ãã©ã®ã¡ãœãããã©ã®ã³ã³ãããŒã©ãŒã§åŒã³åºãå¿ èŠãããããããã³ã©ã®ãããªæ¡ä»¶äžã§å¿ èŠããå«ãããã·ã¥ã§ãã ã€ãŸãããµã€ãã«ãŒãã®HTTP GETãå°çãããšå ¥åã¡ãœãããåŒã³åºãããHTTP POSTã®å Žåã¯ãã¬ãã¥ãŒããŸãã
æ¥ç¶åŒã³åºãã¯ãã¬ãã¥ãŒã®åŒã³åºããšã©ã®ããã«éããŸããïŒ
æ¥ç¶ã¯ãã«ãŒã¿ãŒã®ã«ãŒã«ã远å ããã¡ãœããã§ããããã¬ãã¥ãŒã¡ãœããã¯ååšããŸããã
ããã¯Rubyã®äžè¬çãªããšã§ããã¡ãœãããååšããªãå Žåã
method_missing
ã
method_missing
ãã
method_missing
䟿å©ãªããšãã§ããŸãã ãã®å Žåãæ¬¡ã®ããšãèµ·ãããŸãã
- connectãåŒã³åºãããã®ããã«ãã«ãŒã¿ãŒããŒãã«ã«ã«ãŒã«ã远å ãããŸãã
-
preview_url
ã¡ãœãããäœæãããã³ã³ãããŒã©ãŒãšãã¥ãŒã§äœ¿çšã§ããŸããããã¯ååä»ãurlãšåŒã°ããŸã
ããã§ããã®ããŒãžã®ä»£ããã«
input
ã¡ãœãããåŒã³åºãããããã«
public/index.html
ãåé€ãŸãã¯åå倿Žããå®éã«åŒã³åºãããããšã確èªããå¿ èŠããããŸãã
èŠèŽè ããã£ãšäŸ¿å©ãªãã®ã衚瀺ãããšãã§ãã
input.rhtml
ããå§ããŸãããããããæ¬¡ã®ã³ãŒãã«çœ®ãæããŸãã
<code class = 'ruby' lang = 'ruby'> <ïŒ form_tag preview_url doïŒ > <ïŒ = text_area_tagïŒtextã@source ,: size => '120x25'ïŒ > <ïŒ = submit_tag 'ãã¬ãã¥ãŒ'ïŒ > <ïŒ endïŒ > </ code>
çµæã¯ããã©ãŒã å ã®ããã¹ãããã¯ã¹ãšéä¿¡çšã®ãã¿ã³ã
preview_url
ã«ã¢ããããŒãããããã©ãŒã ãæã€ããŒãžã§ãã æ¬¡ã«ãå ¥åããããã¹ãã®æžåŒèšå®ã«åãããããŸãããã
æåã«ãå ¥åããããã¹ãã®ãã©ãŒãããæ¹æ³ã決å®ããå¿ èŠããããŸãã ãã®èšäºãããŒã¯ããŠã³ãšããŠãã©ãŒãããããŸããã倿Žã®ããã«ããã¹ã¿ã€ã«ã远å ããããšã«ããŸããã
ããã¹ã¿ã€ã«ãšããŒã¯ããŠã³ããµããŒãããã«ã¯ã RedClothãšMarukuãã€ã³ã¹ããŒã«ããå¿ èŠããããŸã ã
<code> $> gem install redcloth maruku </ code>
次ã«ãããã¹ãããã©ãŒãããããã³ãŒããèšè¿°ããå¿ èŠããããŸãã æ®å¿µãªãããHaberãã³ãŒããã«ããããŠãããããèšäºã«ã³ãŒããé 眮ããããšã¯ã§ããŸããããããã£ãŠã
formatting_controller.rb
ãå¥ã®ãŠã£ã³ããŠã§éããŠãèªã¿ãªããåãæ¿ããŠãã ããã ãªã«ïŒ
- require-å¿ èŠãªgemïŒã¢ãžã¥ãŒã«ãããã±ãŒãžïŒãæ¥ç¶ããŸã
-
before_filter
ã¢ã¯ã·ã§ã³ãåŒã³åºãããåã«åŒã³åºãããset_supported_formats
ã¡ãœããããã£ã«ã¿ãŒset_supported_formats
远å ãset_supported_formats
-
params
ãªã¯ãšã¹ãã§æž¡ããããã©ã¡ãŒã¿ãŒãæã€ããã·ã¥
set_supported_formats
ã¯äœã«
set_supported_formats
ãããããã¹ãŠã®
@
ã©ãããæå³ã§ããïŒ
å é ã«
@
èšå·ãä»ãã倿°ã¯ãã¡ãœãããåŒã³åºããããªããžã§ã¯ããã€ãŸãã³ã³ãããŒã©ãŒã®å€æ°ã§ãã å®éã«ã¯ããã¥ãŒã¯ç¬èªã®å€æ°ã§ãããã®ããã«ãã³ã³ãããŒã©ãŒã®å€æ°ã«ã¢ã¯ã»ã¹ã§ãããããéåžžã¯ã³ã³ãããŒã©ãŒã§å€æ°ãèšå®ããããã¥ãŒã§å€æ°ãã¬ã³ããªã³ã°ã«äœ¿çšãããŸãã
preview.rhtml
ãããã¹ããç·šéã§ããããã«input.rhtml
input.rhtml
ãã¬ã³ããªã³ã°ã
input.rhtml
ãããã£ãŠãäž¡æ¹ã®ãã¥ãŒã§
@supported_formats
ãå¿ èŠã«ãªããŸããã³ãŒããè€è£œããããããã£ã«ã¿ãŒã远å ããããšãã
@supported_formats
ããŸãã
æžåŒã¿ã€ãã®éžæã
input.rhtml
ã«è¿œå ããããšã¯æ®ã
input.rhtml
ã
<code> <ïŒ = select_tagïŒselected_formatãoptions_for_selectïŒ@supported_formatsã@selected_formatïŒïŒ > </ code>
ãããŠã
preview.rhtml
ãå床æžããŸããããã«ã³ãŒããé 眮ã§ããŸããïŒdivããããpreå ã«ãããã©ããã¯é¢ä¿ãããŸãã:)ã
ããŒãžã¯3ã€ã®ãããã¯ã«åãããŠããŸãã
-
preview
-æžåŒèšå®ãããããã¹ãã衚瀺ããŸã -
source
ãœãŒã¹ããã¹ããå«ããã©ãŒã -
formated_text
ãã©ãŒããããããããã¹ããæã€ãã£ãŒã«ã
1ã€ã®å°ããªè©³çŽ°ãæ®ããŸããçµæã®ããŒãžã¯ãWellformed XHTMLãã§ã¯ãªããããã¹ãå ¥åãã©ãŒã ã¯æ²ãã£ãŠèŠããŸãã ãã©ãŠã¶ãé©åã«ãã©ãŒããããããããŒãžãåä¿¡ããããã«ããå¿ èŠããããŸãã
doctype
ã
html
ã
head
ã
body
ãå¿ èŠã§ã
doctype
äžè¬çã«ã¯ãã¹ãŠãå¿ èŠã§ããããã©ãŒã ãcssã§ãšãããŸãã
ãã¥ãŒãã¬ã³ããªã³ã°ããçµæãæ¿å ¥ã§ããããŒãžãã³ãã¬ãŒããå¿ èŠã§ããããã¯railsã§ã
layout
ãšåŒã°ã
layout
ã
ããªããããå¿ èŠãããã®ã¯ã
formatting.rhtml
ã
app/views/layouts
远å ããããšã ãã§ãã
å ¥åãã©ãŒã
style.css
ããå°ãè¯ãæ§æããŠã
public/stylesheets
å ¥ããŸãããã
仿¥ã¯ä»¥äžã§ããæåã®éšåã¯çµããã§ãã
å³å¯ã«å€æããªãã§ãã ãããéåžžã«é·ãéãç§ã¯ãã·ã¢èªã§ãRubyã§ãŸããŸãæžããŠããŸããã§ãã:)
確ãã«ãç§ãæ··ä¹±ãã説æããã¯ãå€ãã®è³ªåãããããšãçè§£ããŠããèšäºã調ã¹ãã®ã§ãããŸãæç¢ºã§ã¯ãããŸããã ããšãã°ã
options_for_select
ãŸãã¯
options_for_select
ãšã¯äœ
options_for_select
ã ããã«æ¬åœã«èå³ããã人ïŒ
- ãªãã¿ã®ãªãåèªã«åºäŒã£ãå Žåã¯ãããã¥ã¡ã³ãã®ããè¯ããµã€ãã«ã¢ã¯ã»ã¹ã ãæ€çŽ¢ã§ãã®åèªãå ¥åããŠãã ãã
- äœããããããªãå Žåã¯ã ã¬ãŒã«ã«é¢ããæ¬ãèªãã§ïŒãšãã¥ã¬ãŒãïŒã質åãããŠãã ãã
markdownã§ããŒã¯ãããããã¹ããã©ã®ããã«èŠããããèŠãã人ã¯ãèšäºã®ãœãŒã¹ãèŠãããšãã§ããŸãã
次ã«äœãã§ããŸããïŒ
- ç§ãè§ŠããŠããªãäž»ãªãã®ã¯ãã¹ãã§ããç§ãã¡ã¯ãããããå§ããŸã
- ãã®ãããªåçŽãªã¢ããªã±ãŒã·ã§ã³ã«ã¯2ããŒãžãå€ãããããã1ããŒãžã«æžããå¿ èŠããããŸãã ãããè¡ãã«ã¯ãAJAXã«ç²Ÿéããã¬ãŒã«ã§javascriptãæäœããæ¹æ³ãåŠã¶å¿ èŠããããŸãã
- ç§ã¯ãªã³ã¯ãå¿é ããããããã¹ãŠãã¯ãªãã¯ããŸãããã1ã€ã¯æ»ãã§ããããšã倿ããŸãããããã¯ãªãã¯ããæ°ã¯ãããŸãããã¯ãªãã¯ããªãããã«ããå¿ èŠããããŸãã
- ããã«ãç§ã¯ã¹ãã«ãå¿é ã§ããã©ã®ãµãŒãã¹ãéåžžã¹ãã«ããã§ãã¯ã§ãããæããŠãã ããããŸã è¡ã£ãŠããªãå Žåã¯ã¬ãŒã«ã«åºå®ããã®ãé¢çœãã§ãããïŒ
- 2çªç®ã®èšäºãç»å ŽãããšããœãŒã¹ããã¹ã¯ãããã«ä¿åããã®ãé¢åã«ãªããŸãïŒæ¢ã«éç¶ãšããŠããŸã:)ã®ã§ãèšäºã®ã«ã¿ãã°ãäœæããå¿
èŠããããŸãã åæã«ãRESTãšã¯äœãããããã¬ãŒã«ãšã©ã®ããã«é¢ä¿ããã®ããåŠã³ãŸãã
AjaxScaffoldã®äœ¿ç𿹿³ã®èª¬æããªãæçš¿ã«æ°ã¥ããã®ã§ãå¿ èŠã«å¿ããŠActiveScaffoldã« WebããŒã¹ã®ãã£ã¬ã¯ããªãäœæã§ããŸã - ãã®æç¹ã§å ±èè ãçŸããŠãèšäºã®å ±åç·šéãæŽçããæ¹æ³ã«æ £ããããšãæ¬åœã«æãã§ããŸãã ã¬ãŒã«äžã§ã®ãŠãŒã¶ãŒèªèšŒã®å®è¡æ¹æ³ãèšäºããã«ãããŒãžã§ã³åããæ¹æ³ãç«¶åãããšã³ããªãŒããèªåãå®ãæ¹æ³ãåŠã³ãŸãã