Rails Girls ガイド の復習をしました。
インストール済み:ruby 1.9.3, rbenv, rails 4.1.0
Spring問題で動かず。 RailsでSpringが動かないとき (Mac) [ uninitialized constant Spring::SID::DL ] - tkymtk's blog
rubyを再インストールしなければならないが、時間がかかりそうなので、Springを使わないrails 4.0.5を使うことに。
$ gem install rails -v 4.0.5 --no-ri --no-rdoc
...
$ rails _4.0.5_ new railsgirls
(Thanks to @willnet さん)
時間があるときに最新の ruby 2.1.2 と rails 4.1.1 をインストールしておきましょう。
ひと通りチュートリアルを実行。
- コントローラ、モデル、ビューの3つが大事。それぞれ /app/controllers, /app/models, /app/views の下にある。
- モデルは実際のideaのデータを扱う部分。ビューはHTMLをつくる部分。コントローラはその2つをつなぐ。
- ビューは基本HTMLだけど、erbと言って
<% ... %>
の中にRubyのコードが書ける。 - img, a, formタグはHTMLで書かず、それぞれ
image_to
、link_to
、form_for
というRubyのコード(Railsの機能)を使うことが多い。 - scaffoldで生成される7つのアクション index, show, new, edit, create, update, destroyが基本。
- URLとアクションとの結びつけはroutes.rbの
resources :ideas
の1行だけ。実際の詳細は http://localhost:3000/rails/info/routes で見られる。
「アプリにページを追加する」の /pages/info を利用して、HTMLのよく使う要素(タグ)を書いてみてどのように表示されるかを見る。
- 見出し h1〜h6
- 段落 p
- 段落などの変わり目 hr
- 整形済みテキスト pre
- 引用 blockquote
- リスト ol, ul, li
- リンク a
- 画像 img
- 表 table, tr, td
- フォーム form, input, ...
- 特に意味はない div
例えば見出しは大きく、リストは黒丸付きで表示されるが、これはブラウザやBootstrapの標準のスタイルなので、CSSを書くことによりどのようにでも変えられる。
/pages/info へのリンクをメニューに追加し、現在の場所だったらclass="active"
をつける。
<li class="<%= controller_name == 'ideas' ? 'active' : '' %>"><a href="/ideas">Ideas</a></li>
<li class="<%= controller_name == 'pages' ? 'active' : '' %>"><a href="/pages/info">PagesInfo</a></li>
controller_name == 'ideas' ? 'active' : ''
の部分で現在のコントローラがideas
かどうか確かめて、そうだったらactive
、そうでなければ空の文字列を返している。
考え方:コントローラから送られ、ブラウザを通してユーザーが受け取るものがビューだから、HTMLと同じようにCSVもビューである。→ /app/views 以下に置かれる
csv_builder gem を使って実装。
コントローラが送れるデータフォーマットの種類を指定する。HTMLとCSVが送れる。
# /app/controllers/ideas_controller.rb
respond_to do |format|
format.html
format.csv do
@output_encoding = 'utf-8' # 日本語を出すために必要
@filename = 'ideas.csv' # ファイル名を指定できます
end
end
csv
に配列を入れるごとに1つの行をあらわす。
# /app/views/ideas/index.csv.csvbuilder
csv << ['Name', 'Description', 'Picture URL'] # 1行目
@ideas.each do |idea|
csv << [idea.name, idea.description, idea.picture_url]
end
リンクを追加。format: csv
でCSVをリクエスト。
# /app/views/ideas/index.html.erb
<%= link_to 'CSV Download', ideas_path(format: :csv) %>
csv_builder以外には、ruby template handlerを使う方法がよさそう。 https://github.com/rails/rails/commit/ab7ae689 (Thanks to @joker1007 さん)
「5 あなたのアプリにコメント出来るようにしましょう」や「8 Deviseによる認証を追加してみよう」をやりたいですね。