はじめる!Rails3(1)12.5演習問題答え
12.5演習
1.貸し出し中の書籍を一覧表示するbooks#checked_out アクションを実装してください。
def checked_out
@books = Book.where(:checked_out => true)
render :action => "index"
end
2.書籍の一覧ページに「在庫」「貸し出し中」タブを設置し、書籍の検索条件を切り替えられるようにしてください。
<td><%= link_to "修正", [ :edit, book ] %> <%= if book.checked_out? link_to("戻す", [ :check_in, book ], :method => :put) else link_to("完了", [ :check_out, book ], :method => :put) end %> <%= link_to "削除", book, :method => :delete, :confirm => "本当に削除しますか? " %> </td>
3.書籍を「在庫」に戻す(checked_out カラムの値をfalse にする)アクションbooks#check_inへのルーティングを設定してください。
Shelf::Application.routes.draw do
resources :books do
put :check_out, :check_in, :on => :member
get :checked_out, :on => :collection
end
end
4.書籍の一覧ページにbooks#check_in アクションへのリンクを設置してください。
<ul class="navigation"> <% if params[:action] == "index" %> <li class="selected">在庫</li> <% else %> <li><%= link_to "在庫", :books %></li> <% end %> <% if params[:action] == "checked_out" %> <li class="selected">貸出</li> <% else %> <li><%= link_to "貸出", [ :checked_out, :books ] %></li> <% end %> </ul>
ついでにテキストと同じようにスタイルシートも作成してしまいましょう。
ul.navigation {
width: 560px;
margin: 15px auto 5px;
list-style:none;
padding:0;
}ul.navigation li {
display: inline;
margin-right: 1px;
background-color: #666;
border: solid 1px #ccc;
padding: 5px;
}ul.navigation li.selected {
background-color: #eee;
}ul.navigation li a {
color: #fff;
text-decoration: none;
}
5.books#check_in アクションを実装してください。
def check_in
@book = Book.find(params[:id])
@book.update_attribute(:checked_out, false)
redirect_to :back
end