はじめる!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