railsで作る簡単な本棚アプリ (2)
railsで作る簡単な本棚アプリ (1) の続き。
BookShelvesControllerの修正
本棚のデータを作る前に、railsの生成したBookShelvesControllerのままだとエラーが出るので、修正する。
- app/controllers/book_shelves_controller.rb
def create params[:book_shelf]['user'] = User.where(:id => params[:book_shelf]['user']).first # この行を追加 params[:book_shelf]['book'] = Book.where(:id => params[:book_shelf]['book']).first # この行を追加 @book_shelf = BookShelf.new(params[:book_shelf])
本当はparamsの中身をチェックしたり、nilチェックが必要だけど、今回は省略。
これで、BookShelfを作成できるようになる。
git add -u git commit -m "本棚にデータを登録する時の型タイプエラーを修正"
本棚のデータを作る
http://localhost:3000/book_shelves を開き、"New Book shelf"をクリックする。
下記のデータを作る。
User | Book |
1 | 1 |
1 | 3 |
1 | 5 |
本棚のviewにユーザ名、本のデータを表示する
ユーザと本の表示がインスタンスのアドレスになっているので、この表示を修正する。
<table> <tr> <% # ここから %> <th>User#name</th> <th>Book#Title</th> <th>Book#Price</th> <th>Book#R18</th> <th></th> <th></th> </tr> <% @book_shelves.each do |book_shelf| %> <tr> <td><%= book_shelf.user.name %></td> <td><%= book_shelf.book.title %></td> <td><%= book_shelf.book.price %></td> <td><%= book_shelf.book.R18 %></td> <% # ここまでを変更・追加 %> <td><%= link_to 'Show', book_shelf %></td>
http://localhost:3000/book_shelves の表示が下記のような表示になる。
git add -u git commit -m "本棚のviewにユーザ名、本のデータを表示するように修正"
ユーザの所持してる本を表示する。
ユーザの名前が表示される http://localhost:3000/users/1 に所持してる本も表示するように変更する。
- app/models/user.rb
class User < ActiveRecord::Base has_many :book_shelves # この行を追加 has_many :books, :through => :book_shelves # この行を追加 end
- app/controller/users_controller.rb
def show @user = User.find(params[:id]) @books = @user.books # この行を追加
- app/views/users/show.html.erb
<%= @user.name %> </p> <% # ここから %> <% if @books.present? %> <table cellspacing="0"> <tr> <td>Title</td> <td>Price</td> <td>R18</td> </tr> <% @books.each do |book| %> <tr> <td><%= book.title %></td> <td><%= book.price %></td> <td><%= book.R18 %></td> </tr> <% end %> </table> <% end %> <% # ここまで追加 %> <%= link_to 'Edit', edit_user_path(@user) %> |
ここまで変更したら、http://localhost:3000/users/1 のviewにも所持している本のテーブルが表示されるようになる。
git add -u git commit "ユーザの名前の下に所持している本を表示するように変更"
続き・・・
まだdefault_scopeもunscopedも出てないけど、続きはまた明日か明後日に。
*1:本の選択は中の人の好みとは関係ありません