Rails3 初心者レッスンby Minami.rb
第3版Rails3.2
Lesson 2
このレッスンでやること一覧1. Railsで何をする?どうしてRails?2. 作ってみよう事始め3. プロジェクトとテーブル4. Railsの役割分担5. Railsのディレクトリ構成6. scaffold(デフォルト)でのURL7. リレーションを考える8. 日本語対応9. 見た目をキレイに10.プラグインを使う11.ちょっとRubyに働いてもらう12.herokuに公開しよう
Lesson1の復習
使ったコマンド $ rails new プロジェクト名 $ rails generate scaffold テーブル名 カラム:データ型 $ rake db:migrate $ rails console または rails c $ rails server または rails s $ rails -h $ rails generate -h $ rake -T $ rake routes
scaffold(デフォルト)でのURLURLの基本構成
http://host/resources #action => index http://host/resources/new #action => new http://host/resources #action => create http://host/resources/id #action => show http://host/resources/id/edit #action => edit http://host/resources/id #action => update http://host/resources/id #action => destroyURLの確認
$ rake routes
URLとリレーションURL設定とmodel(リレーション)設定をそれぞれ行う
app/models/以下に設定 config/routes.rbに設定
URL →http://host/(親)s/:(親)id/(子)s config/routes.rbに以下の設定 resources :(親)s do resources :(子)s endmodel →app/models/(親).rb に以下の設定 has_many :(子)s app/models/(子).rb に以下の設定 belongs_to :(親)
親 1 多 子
URL設定 config/routes.rb resources :publishers do resources :books end
→ http://host/publishers/publisher_id/books $rake routesで確認してみよう
URL設定例
publisher 1 多 book
model(リレーション)設定例
model設定 app/models/publisher.rb has_many :books
app/models/books.rb belongs_to :publisher
publisher 1 多 book
URLとリンク例:book#indexからbook#newへ$ rake routes で確認
new_book GET /books/new(.:format) {:action=>"new", :controller=>"books"}
app/views/books/index.html.erb の設定 <%= link_to 'New Book', new_book_path %>
一番前の部分を書く
URL
実装の順番 Create → Read → Update → Delete がいいらしい。 Rails風には・・・ new+create → show/index → edit → delete
例:memo登録画面にbookを表示する
画面での呼び出し(id引き継ぎ)
memo登録画面 URL:books/:book_id/memos/new
book情報
memo登録 これを利用する
画面での呼び出し(id引き継ぎ)
app/controllers/memos_controller.rb
def new @memo = Memo.new @book = Book.find(params[:book_id]) ・・・ end
def create @book = Book.find(params[:book_id]) @memo = @book.memos.new(params[:memo]) ・・・ end
例:memo登録画面にbookを表示する
app/views/memos/_form.html.erb
<%= form_for([@book, @memo]) do |f| %> ・・・ <div class="field"> <%= f.label :memo_id %><br /> <%= @book.title%><br /> <%= @book.author %> </div> ・・・<% end %>
例:book登録画面にpublisherを表示する
publisherを表示するための情報を取ってこないといけない!
画面での呼び出し方(セレクトボックス)
book登録画面
publisher情報
book登録
URL:/books/new
これどうしよう・・・?
app/views/books/_form.html.erb
<%= form_for([@publishers, @book]) do |f| %> ・・・ <div class="field"> <%= f.label :publisher_id %><br /> <%= f.select :publisher_id,
@publishers.map{|m| [m.name, m.id]} %> </div> ・・・<% end %>
[label, value]
画面での呼び出し方(セレクトボックス)
app/controller/books_controller.rb
def new @book = Book.new @publishers = Publisher.all ・・・ end
def create @book = Book.new(params[:entry]) @book.publisher_id = params[:book][:publisher_id] ・・・ end
例:book登録画面にpublisherを表示する
RubyのEnumerable#map
考えてみよう
画面遷移とURLを決めよう。config/routes.rbを設定しよう。app/model/*.rbを設定しよう。rake routesコマンドでURLを確認しながら、
app/views/*/*.html.erb や、app/controllers/*_controller.rb を設定して、リンクを貼ったり、必要な情報を各ページに表示させ よう。
おまけDBのテーブル+modelを追加するコマンド$ rails generate model library name:string location:string$ rake db:migrate
controller(+view)を作るコマンド$ rails generate controller bookracks
s 要るよ!
Lesson2は、これで終わりです。お疲れさまでした。