Sælt verið fólkið. Ég ætla að gefa hér stuttan tutorial um gerð lítils forrits í Ruby on Rails. Ég ákvað að gera tutorial í gerð persónulegs kóðasafns þar sem að það ætti að vera bæði nothæft og einfalt í gerð. En fyrst aðeins um Ruby on Rails

Hvað er Ruby og Ruby on Rails?
Ruby er öflugasta ókompælaða tungumálið í boði í dag og frægt fyrir að vera skemtilegt og snöggt í þróun. Ruby on Rails er framework ofaná Ruby til að auðvelda gerð vefsíðna. RoR er svokallað MVC framework. MVC var hannað 1979 og byggist á að skipta upp forritinu í 3 hluta. Model, Views og Controllers. Þetta einfaldar til muna alla þróun. Model sér um gögnin og lógíkina. Til dæmis sér það um tengslin við gagnagrunnin og hvernig töflur tengjast saman. View eins og nafnið bendir til sér um útlitið. Þar mundi vera template að síðunni og upplýsingar hvernig á að birta gögnin úr módelinu. Controller sér svo um að binda þessa tvo hluti saman. Það tekur við beiðni frá vefþjóninum og hefur þá samband við módelið til að fá eða senda gögnin og hefur svo samband við viewið til að sjá hvernig á að birta þessar upplýsingar.

Vefur settur upp
Ég ætla ekki að fara í langar útskýringar hvernig þú setur upp RoR. Það ætti að vera einfalt að skoða http://www.rubyonrails.org/down og ef eitthvað vandamál kemur upp þá get ég hjálpað þeim sem að hafa samband.
Nú ætti fólk að geta byrjað á að setja upp rails skráarsafn. Best er að opna skel og fara þangað sem þið viljið að forritið ykkar verði. Það skiptir ekki máli hvar það er þar sem að það fylgir með lítill vefserver fyrir þróunarvinnu. Skrifið inn skipunina rails tutorials. Nú ættuð þið að sjá rails skapa skráarsafnið tutorials og setja þangað inn töluvert af skráarsöfnum og skrám. Áður en við ræsum upp rails ætlum við að setja upp tengingu við gagnagrunnin. Það gerum við með því að breyta skránni config/database.yml
login: &login
  adapter: mysql
  host: localhost
  username: root
  password: LYKILORÐ
development:
  database: kodasafn
  <<: *login
test:
  database: kodasafn_tests
  <<: *login
production:
  database: kodasafn
  <<: *login 

Við förum ekki hér strax í muninn á production, development og test. Farið nú inn í tutorials skráarsafnið og skrifið ruby script/server. Þarna ætti að koma upp Webrick vefserverinn og farið nú og prufið að skoða síðuna http://localhost:3000/. Þarna ætti að koma upp voða sæt síða sem segir ykkur að þú sért með Rails uppsett. Þú ættir þá að vera tilbúinn að fara setja upp sjálfa síðuna.

Gagnagrunnurinn og módelin
Næst skulum við skapa gagnagrunnin. Við byrjum á einfaldri töflu fyrir kóðana og móðurtöflu til að flokka kóðana í þau tungumál sem að þau tilheyra. RoR hefur einfalda reglu til að þú þurfir ekki að tengja sérstaklega módelin við töflurnar. Módel sem heitir Language reynir að tengjast við töflu sem heitir languages. Semsagt módelið og controllerinn er í eintölu og taflan er í fleirtölu. Þetta gæti flækst fyrir þér núna þegar þú ert ekki vanur þessu en eftir nokkra daga þá muntu skilja hverni þetta sparar þér tíma. Notið það SQL forrit sem að þið notið yfirleitt til að setja þetta upp. Í grunnin sem við nefndum í database.yml með heitinu kodasafn skrifum við:
CREATE TABLE languages (
  id int(15) NOT NULL auto_increment,
  title varchar(10) NOT NULL,
  description text,
  PRIMARY KEY  (id)
)
CREATE TABLE snippets ( 
  id int(15) NOT NULL auto_increment,
  language_id int(15) NOT NULL,
  title varchar(50) NOT NULL ,
  body text,
  description text,
  PRIMARY KEY  (id)
) 
Næsta skref er að tengja þessa töflu inn og gera módel fyrir hana. Það er einfaldlega gert með skipuninni ruby script/generate model Language. Rails gerir nokkrar skrár en sú mikilvægasta er án efa app/models/language.rb. Gerið sama fyrir snippets með skipuninni ruby script/generate model Snippet. Næst er að gera RoR grein fyrir því að þessar töflur tengist. Opnið skránna app/models/language.rb og breytið henni svona:
class Language < ActiveRecord::Base
  has_many :snippets
end
og svo skráin app/models/language.rb mun verða svona:
class Snippets < ActiveRecord::Base
  belongs_to :language
end
Þetta segir Language módelinu að það muni innihalda mörg Snippets. RoR gerir þá ráð fyrir að snippets grunnurinn hafi language_id til að tengja saman þessa grunna.

Scaffolding
Þar sem að þetta er einfalt lítið local forrit þá ætlum við bara að byggja útlitið á scaffolds. Scaffolds eru einföld lítil CRUD(Create,Read,Update,Delete) síða sem að inniheldur flest sem að þú vilt gera með grunna. Skrifið bara skipunina ruby script/generate scaffold Language og farið á http://localhost:3000/languages Þetta er ekki fallegt og þú mundir ekki nota þetta í alvöru forriti en þetta er fín leið til að koma gögnum inn í grunnin. Gerum færslurnar “Ruby” og “PHP” tildæmis til að setja eitthvað af gögnum inn. Gerum nú sama fyrir Snippets með skipuninni ruby script/generate scaffold Snippet og skoðum http://localhost:3000/snippets. Við fyrstu skoðun þá vantar nokkuð uppá hér. Til dæmis vantar að tengja koðana sem þú setur inn við tungumálið.

Samtenging
Næst ber að opna skránna app/controllers/snippets_controller.rb. Þar undir sjáiði mokkur methods. undir def new og def edit bætiði við línuni:
@languages = Language.find_all
Skráin app/views/snippets/_form.rhtml ert partial view. Semsagt lítill kóði sem er svo notað bæði í new.rhtml og edit.rhtml. Opnið hana og setjið inn þetta:
<p><b>Language:</b><br>
 <select name="snippet[language_id]">
  <% @languages.each do |language| %>
      <option value="<%= language.id %>"
<%= ' selected' if language.id == @snippet.language_id %>	>
        <%= language.title %>
      </option>
  <% end %>
 </select></p>
þar sem þið viljið. Þetta bætir við dropdown lista með tungumálunum í boði. Næst bætið þið við í list.rhtml kóða til að sýna hvaða tungumál er valið. Vegna þess að við höfðum tengt saman töflurnar áður þá sleppum við við að leita að languages.title eftir því hvað snippets.language_id er. RoR er búið að þessu fyrir okkur og við getum notað “snippets.language.title” til að fá að vita hvað við höfum. Byrjum á að breyta app/views/snippets/list.rhml. Hér ætlum við að breyta allri skránni svona:
<h1>Listing snippets</h1>
<% for snippet in @snippets %>
	<p><br />Title: <%= snippet.title %>
	<br />Language: <%= snippet.language.title %>
	<br />Action: <%= link_to 'Show', :action => 'show', :id => snippet %>
    - <%= link_to 'Edit', :action => 'edit', :id => snippet %></td>
    - <%= link_to 'Destroy', { :action => 'destroy', :id => snippet }, :confirm => 'Are you sure?', :post => true %></p>
<% end %>
<%= link_to 'Previous page', { :page => @snippet_pages.current.previous } if @snippet_pages.current.previous %>
<%= link_to 'Next page', { :page => @snippet_pages.current.next } if @snippet_pages.current.next %> 
<br /><p><%= link_to 'New snippet', :action => 'new' %></p>

Farið nú og skoðið http://localhost:3000/snippets/ og þið ættuð að gera gert fullt af kóðum og flokkað undir tungumál.


Ég held við segjum þetta gott í þessum fyrsta parti tutorialsins. Í næsta parti sýni ég hvernig þú getur sett inn liti á kóðan með notkun CodeRay viðbótarinnar og hvernig má nota layouts til að láta hlutina lýta betur út. Þangað til mæli ég með að skoða /app/views/layouts. Einnig fer ég í hvernig þú getur valideitað að gögn séu sett rétt in.