项目开发(八)
修改category.rb
一切,都比较流畅,尽管不完美。
关联表的操作实现
1、增加关联
1、在books表中增加category_id字段,实现关联。
2、在model目录中,修改book.rb
1、在books表中增加category_id字段,实现关联。
2、在model目录中,修改book.rb
belongs_to:category
这行代码告诉 Rails, 一本书属于一个类别
这行代码告诉 Rails, 一本书属于一个类别
修改category.rb
has_many:books
这行代码告诉 Rails, 一个类别可以包含很多本书。
这两行申明就可以给我们生成在表关系之间导航的各种方法.
3、测试,并没有改变。
4、定义 edit 函数
def edit
@book=Book.find(@params["id"])
@category=Category.find_all
end
因为我们已经从新定义了 edit action ,那么我们同样需要自己编写 edit.rhtml.
5、edit.rhtml
<html>
<head>
<title>Edit book</title>
</head>
<body>
<h1>Edit book</h1>
<form action="../update/< %=@book.id%>" method="POST">
这行代码告诉 Rails, 一个类别可以包含很多本书。
这两行申明就可以给我们生成在表关系之间导航的各种方法.
3、测试,并没有改变。
4、定义 edit 函数
def edit
@book=Book.find(@params["id"])
@category=Category.find_all
end
因为我们已经从新定义了 edit action ,那么我们同样需要自己编写 edit.rhtml.
5、edit.rhtml
<html>
<head>
<title>Edit book</title>
</head>
<body>
<h1>Edit book</h1>
<form action="../update/< %=@book.id%>" method="POST">
<input id="book_id" name="book[id]" size="30" type="hidden" value="<%= @book.id %>" />
<p><b>Title</b>
<br>
<input id="book_title" name="book[title]" size="30" type="text" value="<%= @book.title %>" /> </p>
<p>
<b>Description</b>
<br>
<input id="book_description" name="book[description]" size="30" type="text" value="<%= @book.description %>" /> </p>
<br>
<input id="book_title" name="book[title]" size="30" type="text" value="<%= @book.title %>" /> </p>
<p>
<b>Description</b>
<br>
<input id="book_description" name="book[description]" size="30" type="text" value="<%= @book.description %>" /> </p>
<p>
<b>Category:</b>
<br>
<select name="book[category_id]">
<% @categories.each do |category| %>
<option value="<%= category.id %>"
<%='selected' if category.id==@book.category.id%>>
<%= category.name %>
</option>
<% end %>
</select>
</p>
<b>Category:</b>
<br>
<select name="book[category_id]">
<% @categories.each do |category| %>
<option value="<%= category.id %>"
<%='selected' if category.id==@book.category.id%>>
<%= category.name %>
</option>
<% end %>
</select>
</p>
<input type="submit" value="Update" />
</form>
</form>
<a href="/book/show/<%= @book.id %>"> Show </a>
|
<a href="/book/list"> Back </a>
</body>
</html>
|
<a href="/book/list"> Back </a>
</body>
</html>
6、修改list.rhtml,显示 category 栏目
<html>
<head>
<title>All books</title>
</head>
<body>
<h1>Online Mybook - All books</h1>
<html>
<head>
<title>All books</title>
</head>
<body>
<h1>Online Mybook - All books</h1>
<table border="1" width="100%">
<tr>
<td width="50%"><p align="center"><i><b>book</b></i></td>
<td width="30%"><p align="center"><i><b>Category</b></i></td>
<td width="20%"><p align="center"><i><b>Date</b></i></td>
</tr>
<tr>
<td width="50%"><p align="center"><i><b>book</b></i></td>
<td width="30%"><p align="center"><i><b>Category</b></i></td>
<td width="20%"><p align="center"><i><b>Date</b></i></td>
</tr>
<% @books.each do |book| %>
<tr align="center">
<td ><%=link_to book.title,:action => "show", :id => book.id %></td>
<td><%= book.category.name %></td>
<td><%= book.buydate %></td>
</tr>
<% end %>
<tr align="center">
<td ><%=link_to book.title,:action => "show", :id => book.id %></td>
<td><%= book.category.name %></td>
<td><%= book.buydate %></td>
</tr>
<% end %>
</table>
<p>
<%= link_to "Create new book", :action => "new" %>
</p>
<%= link_to "Create new book", :action => "new" %>
</p>
</body>
</html>
</html>
7、测试
当测试,book/new时,出错,因为添加记录是,category_id字段没有,为空,出错。
因为,在category_id默认值为0,但在添加和显示时,0无法从categories表中读出,出错。
把设置为4,其他,则成功。
1、利用数据库中,来形成规则检查。
2、在代码中填加检查,来形成规则。
当测试,book/new时,出错,因为添加记录是,category_id字段没有,为空,出错。
因为,在category_id默认值为0,但在添加和显示时,0无法从categories表中读出,出错。
把设置为4,其他,则成功。
1、利用数据库中,来形成规则检查。
2、在代码中填加检查,来形成规则。
一切,都比较流畅,尽管不完美。