はじめる!Rails3(1)8.7演習問題答え

1.新しい書籍の登録フォームを表示するbooks#new アクションを実装してください。


def new
@book = Book.new
end

2.books#new アクションに対応する ERB テンプレートを作成してください。

New.html.erbを作成し以下のように編集します。

<h1>新規作成</h1>
<%= form_for @book do |form| %>
<%= form.label :title, "タイトル" %>
<%= form.text_field :title %><br />
<%= form.label :authors, "作者" %>
<%= form.text_field :authors %><br />
<%= form.label :publish_year, "発行年" %>
<%= form.select :publish_year,
  (Time.now.year - 20)..(Time.now.year) %><br />
<%= form.label :comment, "コメント" %>
<%= form.text_area :comment %><br />
<%= form.submit "送信" %><br />
<% end %>

ここで始めて出てきたコードがあります。<%= form.select :publish_year,(Time.now.year - 20)..(Time.now.year) %>
8章ではdateだった為form.date_select :due_date,と書いてましたが、今回はpublish_year(Integer)で発行年は整数をしてしているのでこう書きました。これはそれぞれ書き方が異なるので随時調べながら行うとよいでしょう!

3.書籍の一覧ページに書籍登録フォームへのリンクを設置してください。

index.html.erbの一番下に貼る


<%= link_to "新規登録", [ :new, :book ] %>

4.新規スタイルシートform.css を適宜作成してください。
新規ファイルform.css作成を作成して以下のように編集します。


form {
width: 540px;
margin: 4px auto;
background-color: #cff;
padding: 10px;
border: solid 1px #ccc;
}

form ul {
list-style:none;
margin:0;
padding:0;
}

form li {
clear: both;
margin:0;
padding:0;
}

form label {
display:block;
width:100px;
float:left;
padding-top:.2em;
}

form textarea {
height: 150px;
width: 430px;
float: left;
}

5.新しい書籍を登録するbooks#create アクションを実装してください。


def create
@book = Book.create(params[:book])
redirect_to @book
end

これでレコードが追加されたと思いきやされません。どうしてでしょうか・・・
それはchecked_outがnullのまま送られていたためtrueにもfalseにもなっていませんでした。
ですので

def newに@book.checked_out = falseを追加し
def createを@book = Book.create!(params[:book])と編集し
formに<%= form.hidden_field :checked_out %>を追加してやれば・・・いきましたね!!