ãã©ãŒã é¢é£ã®ãã¥ãŒãã«ããŒ
Railsã§ã¯ãã¢ã¯ã·ã§ã³ã¡ãœãããååšããªãå Žåããã³ãã¬ãŒããã¡ã€ã«ãçŽæ¥èŠã«è¡ã
ãã©ãŒã çæã®åºç€
ã¿ã°ãçæããããã®ãã©ãŒã çæãã«ããŒãïŒçš®é¡ãåå¥ã®å
¥åãã£ãŒã«ããçæããããã®ãã©ãŒã èŠçŽ çæãã«ããŒãïŒçš®é¡ã«åé¡ã§ããã
äŸïŒ
<%= form_tag({ controller: :keyword, action: :search },
id: :fm, class: :search) do %> <%# form_tagã§ãã©ãŒã çæ %>
æ€çŽ¢ããŒã¯ãŒãïŒ
<%= text_field_tag :keywd, '', size: 30 %> <%# ãã©ãŒã èŠçŽ çæ %>
<%= submit_tag 'æ€çŽ¢' %>
<% end %>
form_tagã¡ãœããå
ã¯ã¯ã©ã¹ãç¹å®ã§ããªãã®ã§ãForm_tagãã«ããŒ(èªã¿èŸŒã¿çš)ãšFormãã«ããŒïŒç·šéçšïŒãã䜿ããªãã
form_forã¡ãœããå
ã¯ã¯ã©ã¹ãç¹å®ãããã®ã§ãForm_tagãã«ããŒ(èªã¿èŸŒã¿çš)ãšf.Formãã«ããŒïŒç·šéçšïŒã䜿ãããFormãã«ããŒã䜿ãããšæãã°äœ¿ããã
Rails4ããxxxx_methodãã«ããŒã«ã¯ãurl_fieldãªã©ã®HTML5ã«å¯Ÿå¿æžã¿ã®ãã¥ãŒãã«ããŒãååšãããHTML5ã«å¯Ÿå¿ããŠããªããã©ãŠã¶ã§ããæšæºçãªããã¹ãããã¯ã¹ãšããŠè¡šç€ºãããã ãã§ããšã©ãŒãšãªãããã§ã¯ãªãã®ã§ãç©æ¥µçã«äœ¿ãã¹ãã§ããã
def col_select
@book = Book . new ( publish : 'æè¡è©è«ç€Ÿ' ) #"æè¡è©è«ç€Ÿ"ãå
¥ã£ãåšãäœæã
@books = Book . select ( :publish ) . distinct
end
def col_select2
@book = Book . new ( publish : 'æè¡è©è«ç€Ÿ' )
@books = Book . select ( 'DISTINCT publish' )
end
SQLã§SELECT DISTINCT publish from books
ãšããŠããã€ã¡ãŒãžã
formã¯ããªããªãã®ã§ãã¡ã¢ã¯å²æã
ã¢ããªã±ãŒã·ã§ã³å
±éã®ãã¶ã€ã³ãå®çŸ©ãã-ã¬ã€ã¢ãŠã
P172 ã¬ã€ã¢ãŠãã«è€æ°ã®ã³ã³ãã³ãé åãèšçœ®ãã
ããã©ã«ãã®ã¬ã€ã¢ãŠã(application.html.erb)ã§ã¯ãåæç¶æ
ã§ã³ã³ãã³ãé åãã²ãšã€ã ãããæã£ãŠããŸãããããããæãšããŠè€æ°ã®ã³ã³ãã³ãé åãæã¡ãããšããããšãããããã®å Žåã¯ã<%=yield %>
ãè€æ°åã蟌ã
#layout.html.erb
<!DOCTYPE html>
< html >
< head >
< title > <%= @title ? @title : 'Railså
¥é' %> </ title >
<%= stylesheet_link_tag "application" , media : "all" , "data-turbolinks-track" => true %>
<%= javascript_include_tag "application" , "data-turbolinks-track" => true %>
<%= csrf_meta_tag %>
</ head >
< body >
<%= yield :extend_menu %> <%# ã³ã³ãã³ãå:extended_menuã§è¿œå %>
< hr />
...ãã®ä»ã®åºå®ã³ã³ãã³ã...
< hr />
<%= yield %> <%# ããã©ã«ãã®ã³ã³ãã³ãåã¯:layoutïŒçç¥ãããŠããïŒ%>
</ body >
</ html >
#views_contoroller.rb
def multi
render layout : 'layout' # ã¬ã€ã¢ãŠãlayout.html.erbãé©çš
end
#view/multi.html.erb
<% content_for :extend_menu do %> <% ãããã:extend_menu %>
<%= link_to 'é¢é£æ
å ±', action: :relation %> 
<%= link_to 'ããŠã³ããŒã', action: :download %> 
<%= link_to 'ã¢ã³ã±ãŒã', action: :quest %> 
<% end %> ã<% ãããŸã§:extend_menu %> ã
<% content_forã§äœãæå®ããªããšããã©ã«ãã®yieldã«èšè¿°ããã %>
< div id ="main ">
...ã³ã³ãã³ãæ¬äœ...
</ div >
P174 ã¬ã€ã¢ãŠããå
¥ãåã«é
眮ãã
以äžã®ãããªããããŒ/ããã¿ãŒéšåã¯å
±éã ããã¡ãã¥ãŒéšåã¯ããŒãžããšã«ç°ãªãããŒãžã¬ã€ã¢ãŠããèããããã
http://www.saitama-u.ac.jp/society/index.html
http://www.saitama-u.ac.jp/education/index.html
ãã®ãããªã±ãŒã¹ã§ãããããã®ããŒãžã¬ã€ã¢ãŠãã«å
±éã®ããããã¶ã€ã³ãŸã§æãããã®ã¯æãŸãããªããããããã¶ã€ã³ã«å€æŽãçããå Žåãå
šãŠã®ã¬ã€ã¢ãŠããä¿®æ£ããå¿
èŠãããããã§ããã
ãã®ãããªå Žåã«ã¯ãã¬ã€ã¢ãŠããå
¥ãåã«ããããšã§ããããéšåãäžã€ã®ã¬ã€ã¢ãŠããšããŠç®¡çããã
view_controller . rb
# encoding: utf-8
class ViewController < ApplicationController
def nest
@msg = '仿¥ãè¯ã倩æ°ã§ãã'
render layout : 'child' #viewã¢ãã«ã®nestã¢ã¯ã·ã§ã³ã®ã¬ã€ã¢ãŠãã¯child
end
end
view/nest.html.erb
<%= @msg %>
layouts/child.html.erb
<%#
ã³ã³ãã³ããcontent_forã¡ãœããã§æç€ºçã«å®çŸ©ããã
ãã³ãã¬ãŒãnest.html.erbã§æ¢ã«ããã©ã«ãã®ã³ã³ãã³ãïŒ:layoutïŒã
æé»çã«äœ¿ãããŠããŸã£ãŠããã®ã§ãåºå¥ããããã«:contentã³ã³ãã³ããå®çŸ©ããŠããã
:contentã³ã³ãã³ãã®é
äžã§ã¯ãã³ã³ãã³ã:layoutã³ã³ãã³ããã€ã³ã¯ã«ãŒãããããã®yieldã¡ãœãããåŒã³åºãã
%>
<% content_for :content do %>
<img src ="http://www.wings.msn.to/image/wings.jpg " />
< hr />
<%= yield %>
< hr />
Copyright 1998-2013, YAMADA,Yoshihiro
<% end %>
<%#
ã¬ã€ã¢ãŠãããã¹ããããããã«å¿
èŠãªèšè¿°ãåã¬ã€ã¢ãŠãchild.html.erbãã
芪ã¬ã€ã¢ãŠãapplication.html.erbãåŒã³åºãããã«ã¯ãrenderã¡ãœããã®
templateãªãã·ã§ã³ãå©çšããŠãæç€ºçã«åŒã³åºãå¿
èŠãããã
%>
<%= render template : 'layouts/application' %>
#layouts/application.html.erb
<!DOCTYPE html>
< html >
< head >
< title > <%= @title ? @title : 'Railså
¥é' %>
<%= stylesheet_link_tag "application" , media : "all" , "data-turbolinks-track" => true %>
<%= javascript_include_tag "application" , "data-turbolinks-track" => true %>
<%= csrf_meta_tags %>
</ head >
< body >
<%#
content_for?ã¡ãœããã¯æå®ãããã³ã³ãã³ããååšãããã©ãããå€å®ããã
ããã§ã¯content_for?ã¡ãœããã§:contentã³ã³ãã³ããååšãããã確èªããååšããå Žåã¯:contentã³ã³ãã³ãããããã§ãªãå Žåã¯éåžžã®:layoutã³ã³ãã³ããåŒã³åºãã
%>
<%= content_for? ( :content ) ? yield ( :content ) : yield %>
</ body >
</ html >
ç°¡åã«ãŸãšãããšãå
¥ãåã®ã¬ã€ã¢ãŠãã¯
åã¬ã€ã¢ãŠããã芪ã¬ã€ã¢ãŠãã®åŒã³åºã
芪ã¬ã€ã¢ãŠãâ:contentã³ã³ãã³ãâ:layoutã³ã³ãã³ãã®åŒã³åºã
ã«ãã£ãŠå®çŸããŠããã«ãããªãã
ãµã³ãã«ã§ã¯ïŒéå±€ã®ã¬ã€ã¢ãŠããå®è£
ããŠããããçå±äžã¯ïŒé局以äžã®ã¬ã€ã¢ãŠããå®çŸ©ããããšãå¯èœããã ãRailsã¯ãã¹ãããã¬ã€ã¢ãŠããæ¬è³ªçãªæå³ã§å¯Ÿå¿ããŠããããã§ã¯ãªãã
P228 æ€èšŒæ©èœã®å®è£
æ€èšŒæ©èœãå©çšããã®ã¯ãã»ã©é£ããããšã§ã¯ãªãã
ã¢ãã«ã¯ã©ã¹ã«æ€èšŒã«ãŒã«ãå®çŸ©ããã
æ€èšŒã«ãŒã«ã¯ã¢ãã«ã¯ã©ã¹ïŒãããã¯book.rbïŒã«å®£èšããã®ãåºæ¬ã«ãªãã
#book.rb
class Book < ActiveRecord ::Base
validates :isbn ,
presence : true ,
uniqueness : true ,
# uniqueness: { allow_blank: true },
length : { is : 17 } ,
# length: { is: 17 , allow_blank: true },
format : { with : /\A [0-9]{3}-[0-9]{1}-[0-9]{3,5}-[0-9]{4}-[0-9X]{1}\z / }
# format: { with: /\A[0-9]{3}-[0-9]{1}-[0-9]{3,5}-[0-9]{4}-[0-9X]{1}\z/, allow_blank: true }
# isbn: true
# isbn: { allow_old: true }
ããã§ã¯ãããããã®ãã£ãŒã«ãåäœã«validatesã¡ãœãããåŒã³åºããŠãããã
ãvalidates :first_name, :last_name, ...ãã®ããã«è€æ°ã®ãã£ãŒã«ãã«å¯ŸããŠ
ãŸãšããŠæ€èšŒã«ãŒã«ãé©çšããããšãã§ãããè€æ°ã®ãã£ãŒã«ããåäžã®æ€èšŒã«ãŒã«
ãæã€å Žåã«ã¯ããã®ããã«èšè¿°ããã»ãããã³ãŒãã¯ã·ã³ãã«ã«ãªãã
åŒæ°nameãšparamsã«ã¯æ€èšŒã«ãŒã«ãããã·ã¥åœ¢åŒã§æå®ããã
æ€èšŒãã©ã¡ãŒã¿ïŒåŒæ°rparamsïŒãäžèŠã§ããå Žåã«ã¯ãæ€èšŒãæå¹ã«ããæå³ã§
trueãšã®ã¿æå®ããã
æ€èšŒã¯ããŒã¿ã®ä¿åæã«èªåçã«è¡ããããããåºæ¬çã«
ã¢ããªã±ãŒã·ã§ã³åŽã§ã¯ããŸãæèããããšã§ã¯ãªãã
ä»»æã®ã¿ã€ãã³ã°ã§æ€èšŒåŠçãè¡ãã«ã¯ãvalid?
ã¡ãœãããå©çšããããšã§ã
ããŒã¿ããŒã¹ã®ä¿åãšã¯å¥ã«æ€èšŒåŠçã ããç¬ç«ããŠè¡ãããšãã§ããã
P250 ã¢ãœã·ãšãŒã·ã§ã³ã«ããè€æ°ããŒãã«ã®åŠç
**ã¢ãœã·ãšãŒã·ã§ã³ïŒé¢é£ïŒ**ãšã¯ãããŒãã«éã®ãªã¬ãŒã·ã§ã³ã·ãããã¢ãã«äžã®
é¢ä¿ãšããŠæäœã§ããããã«ããããã¿ã®ããšã
é¢é£ãå©çšããããšã§ãè€æ°ã®ããŒãã«ã«ãŸãããããŒã¿æäœãããçŽæçã«
å©çšã§ããããã«ãªãã
booksããŒãã«
id
isbn
title
...
cd
1
1234-...
ã¿ã€ãã«
...
false
2
1234-...
ã¿ã€ãã«
...
false
...
...
...
...
...
10
1234-...
ã¿ã€ãã«
...
false
reviewsããŒãã«
id
book_id
user_id
body
1
1
2
ã³ã¡ã³ã
...
...
...
...
3
2
4
ã³ã¡ã³ã
4
3
3
ã³ã¡ã³ã
5
1
5
ã³ã¡ã³ã
ïŒä»¶ã®æžç±æ
å ±(booksããŒãã«)ã«å¯ŸããŠãè€æ°ã®ã¬ãã¥ãŒ(reviewããŒãã«)ãçµã³ã€ããŠããé¢ä¿ãäŸã«ãããæžç±æ
å ±ãšã¬ãã¥ãŒã®å¯Ÿå¿é¢ä¿ã¯ãbooksããŒãã«ã®idåãšreviewsããŒãã«ã®books_idåã«ãã£ãŠè¡šçŸããŠããã
books.idåã¯æžç±æ
å ±ãäžäœã«èå¥ããããã®äž»ã㌠âŠããããæžç±æ
å ±ã®èçªå·ã«ãªããreviews.book_idåã«ã¯ããã®books.idåã«å¯Ÿå¿ããå€ãã»ããããããšã§ã
ã©ã®æžç±æ
å ±ã«å¯Ÿå¿ããŠãããã衚ãããšãã§ããããã®å
ãªåç
§ããŒã®ããšãå€éšã㌠ãšåŒã¶ã
ãã®ãããé¢ä¿ã«ããããŒãã«ãããid=1ã§ããæžç±ã«å±ããã¬ãã¥ãŒãååŸãããã«ã¯ã©ããããããããåé·ã«æžããªãã°ä»¥äžã®ããã«ãªãã
@book = Book . find ( 1 )
@reviews = Review . where ( book_id : @book . id )
ããããã¢ãœã·ãšãŒã·ã§ã³ãå©çšããããšã§ã以äžã®ããã«èšè¿°ã§ããããã«ãªãã
@book = Book . find ( 1 )
@review = @book . reviews
ãã¡ãã¡äž»ããŒ/å€éšããŒãæèããŠãæ¡ä»¶åŒãèšè¿°ããªããã°ãªããªãã£ãåè
ã«æ¯ã¹ããšãåŸè
ãããçŽæçãªã³ãŒãã§ããããšããããã
ãªã¬ãŒã·ã§ã³ã·ãããšåœåèŠå
ã ããããããªæã
http://www.stonedot.com/lecture6.html
**ã³ãŒã«ããã¯ïŒã³ãŒã«ããã¯ã¡ãœããïŒ**ãšã¯ãActive Recordã«ããæ€çŽ¢ãç»é²ãæŽæ°ãåé€ãããã³ãæ€èšŒåŠçã®ã¿ã€ãã³ã°ã§å®è¡ãããã¡ãœããã®ããšã
ããšãã°ã
ãŠãŒã¶æ
å ±ãç»é²ããéã«ãã¹ã¯ãŒããæå®ãããŠããªãã£ãããã©ã³ãã ã®ãã¹ã¯ãŒããçæ
æžç±æ
å ±ãåé€ããããã«ãåé€ãããæžç±æ
å ±ãå±¥æŽæ
å ±ãšããŠèšé²ãã
èè
æ
å ±ãç»é²/æŽæ°ãããã¿ã€ãã³ã°ã§ã管çè
ã«ã¡ãŒã«ãéä¿¡
ãªã©ãã¢ãã«æäœã®ã¿ã€ãã³ã°ã§ãŸãšããŠå®è¡ã¹ã¹ãåŠçã¯ãã³ãŒã«ããã¯ãšããŠå®çŸ©ããããšã§ãåããããªã³ãŒããã¢ãã«ãã³ã³ãããŒã©ã«åæ£ããã®ãé²ããã
ãŸããActive Recordã¯ãå®éã®ä¿ååŠçãšã³ãŒã«ããã¯ãšãã²ãšã€ã®ãã©ã³ã¶ã¯ã·ã§ã³ãšããŠå®è¡ãããã³ãŒã«ããã¯ãå©çšããããšã§ãé¢é£ããã²ãšã€ããªãã®åŠçã
ãã©ã³ã¶ã¯ã·ã§ã³ãæèããããšç¡ãèšè¿°ã§ããã¡ãªãããããã
Railsã§ã¯ãããŒãã«ã¬ã€ã¢ãŠããäœæã倿Žããããã®ããã¿ãšããŠããã€ã°ã¬ãŒã·ã§ã³ ãšããæ©èœãæäŸããŠãããMigration(ç§»è¡)ãšããååã®éãããã€ã°ã¬ãŒã·ã§ã³æ©èœã¯éçºéäžã§ã®ã¹ããŒãã®å€åã«éããŠé²åãçºæ®ããã
P283 ãã€ã°ã¬ãŒã·ã§ã³ãã¡ã€ã«ã®äœæ
ãã€ã°ã¬ãŒã·ã§ã³ãã¡ã€ã«ãäœæããæ¹æ³ã¯ã以äžã®ïŒçš®é¡ã«å€§å¥ã§ããã
rails generate model
ã³ãã³ãã§ã¢ãã«ã«åãããŠäœæããã
rails generate migration
ã³ãã³ãã䜿ã£ãŠãã€ã°ã¬ãŒã·ã§ã³ãã¡ã€ã«åäœã§äœæããã
æ°èŠã«ããŒãã«ãäœæããå Žåã«ã¯ã1.ã§ã¢ãã«ãããšãäœæããã®ãæè»œã
æ¢ã«ååšããããŒãã«ã«å¯ŸããŠãã¬ã€ã¢ãŠãã®ä¿®æ£ãè¡ãããå Žåã«ã¯ã2.ã®æ¹æ³ãå©çšããã