Rails3.2で、 「WEB+DB(vol58)の RAILS3実践チュートリアル」を やってみた。
前出の作業リストに残りのチュートリアルを書き加えていく。
■ブログ投稿機能実装
①rails new aplname -d mysql --skip-bundle
②cd aplname
③vi Gamfile -> gem therubyracer を追加。
④bundle install
⑤JQuery本体のありか
ここから、jQueryの最新バージョンのCDNをチェック
->http://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.j だった..
⑥設定
vi app/assets/javascripts/application.js
->(削除) //= require jquery
vi app/views/layouts/application.html.erb
(追加) <%= javascript_include_tag
' http://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js %>
⑤vi config/database.yml
-> 11 development:
12 adapter: mysql2
13 encoding: utf8
14 reconnect: false
15 database: aplname_development
16 pool: 5
17 username: dbuser # DBMで生成
18 password: dbpass # DBMで生成
19 socket: /var/lib/mysql/mysql.sock
⑥rake db:create
⑦rails g scaffold post title:string body:text #ブログ投稿機能生成⑧rake db:migrate
⑨rake #テストしてみる
-> :
Finished in 0.001814 seconds.
0 tests, 0 assertions, 0 failures, 0 errors, 0 skips
:
⑩vi app/models/post.rb
-> validates :title, :presence => true, :length => {:maximum => 20}
(項目) (入力必須) (最大長20文字)
# 項目ごとに設定できるため、可読性がよくなった SexyValidation 記法
⑪コンソールから確認
rails c
->Post.create!
->ActiveRecord::RecordInvalid: Validation failed: Title can't be blank
->Post cretae! :title => 'ぽ' *21
->ActiveRecord::RecordInvalid: Validation failed: Title is too long
(maximum is 20 characters)
->Post cretae! :title => 'ぽsuと'
->INSERT INTO `posts` (`body`, `cre .....
追加されたOK!
->quit
■コメント投稿機能実装
①モデルとテーブル生成
rails g model comment post:references comment:string name:string
rake db:migrate
②コントローラ生成
rails g controller comments
③投稿とコメント各データの関連を設定
vi app/models/post.rb -> has_many :comments を追加。
## modelで、post:references と指定すると、
## 自動的に、項目名が、post_idとなり、
## model上にも belongs_to:post が追加されるのね..
④コメントのためのルーティング
vi config/routes.rb
->resources :posts do
resources :comments, :only =>[:new, :create]
end
⑤コメント投稿画面(ブログ記事詳細表示画面下部に設置)
vi app/views/posts/show.html.erb
-><hr>
<%= render @post.comments.build %>
# buildした commentsインスタンス をrender に渡すと
# 規約で、comments/_comment という名前のパーシャルを指す。
⑥...なので、comment投稿フォーム作成は次のとおり
vi app/views/comments/_comment.html.erb
-> <%= form_for [comment.post, comment] do |f| %>
:
<div class="field">
<%= f.submit %>
</div>
<% end -%>
⑦コメント登録アクションを実装
vi app/controllers/comments_controller.rb
-> def create
post = Post.find params[:post_id]
post.comments.create params[:comment]
redirect_to post
end
⑧最後に投稿されたコメントの表示(ブログ記事詳細表示画面下部に設置)
vi app/views/posts/show.html.erb (以下を追加)
-> <p>
<b>comments</b>
<% @post.comments.each do |comment| %>
<p><%= "#{comment.comment} by #{comment.name}" %></p>
<% end -%>
</p>
■ActiveModelで検索機能を実装
Rails3から登場した「ActiveModel」を使えば、データベースのカラムと連動しない
フィールドを持つモデルっぽいのが作れるらしい。
これで、検索機能を作ってみる。
①モデル生成
vi app/models/search_form.rb (新規作成)
-> class SearchForm
extend ActiveModel::Naming
include ActiveModel::Conversion #この2行と persisted? で
#form_for の引数に使えるようになる。
:
def initialize(param)
end
def persisted?
false
end
end
②検索フォームを一覧画面の先頭に設置
Rails3から登場した「ActiveModel」を使えば、データベースのカラムと連動しない
フィールドを持つモデルっぽいのが作れるらしい。
これで、検索機能を作ってみる。
①モデル生成
vi app/models/search_form.rb (新規作成)
-> class SearchForm
extend ActiveModel::Naming
include ActiveModel::Conversion #この2行と persisted? で
#form_for の引数に使えるようになる。
:
def initialize(param)
end
def persisted?
false
end
end
②検索フォームを一覧画面の先頭に設置
vi app/views/posts/index.html.erb
-> <%= form_for @search_form, :url =>posts_path, :html =>{:method =>:get} do |f| %>
:
<% end -%> #シンボル :search_form 先に作ったモデルをあらわす。
-> <%= form_for @search_form, :url =>posts_path, :html =>{:method =>:get} do |f| %>
:
<% end -%> #シンボル :search_form 先に作ったモデルをあらわす。
....
0 件のコメント:
コメントを投稿