Skip to content

Instantly share code, notes, and snippets.

@tkawa
Last active August 29, 2015 14:01
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save tkawa/0eb69570ddfedebe8ec1 to your computer and use it in GitHub Desktop.
Save tkawa/0eb69570ddfedebe8ec1 to your computer and use it in GitHub Desktop.

RailsGirls, More! #13 2014.05.24

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 をインストールしておきましょう。

2 はじめてのRailsアプリ

ひと通りチュートリアルを実行。

ポイント

  • コントローラ、モデル、ビューの3つが大事。それぞれ /app/controllers, /app/models, /app/views の下にある。
  • モデルは実際のideaのデータを扱う部分。ビューはHTMLをつくる部分。コントローラはその2つをつなぐ。
  • ビューは基本HTMLだけど、erbと言って<% ... %>の中にRubyのコードが書ける。
  • img, a, formタグはHTMLで書かず、それぞれimage_tolink_toform_forというRubyのコード(Railsの機能)を使うことが多い。
  • scaffoldで生成される7つのアクション index, show, new, edit, create, update, destroyが基本。
  • URLとアクションとの結びつけはroutes.rbのresources :ideasの1行だけ。実際の詳細は http://localhost:3000/rails/info/routes で見られる。

HTML

「アプリにページを追加する」の /pages/info を利用して、HTMLのよく使う要素(タグ)を書いてみてどのように表示されるかを見る。

  • 見出し h1〜h6
  • 段落 p
  • 段落などの変わり目 hr
  • 整形済みテキスト pre
  • 引用 blockquote
  • リスト ol, ul, li
  • リンク a
  • 画像 img
  • 表 table, tr, td
  • フォーム form, input, ...
  • 特に意味はない div

例えば見出しは大きく、リストは黒丸付きで表示されるが、これはブラウザやBootstrapの標準のスタイルなので、CSSを書くことによりどのようにでも変えられる。

拡張(1) /pages/info へのリンク

/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、そうでなければ空の文字列を返している。

拡張(2) CSVダウンロード

考え方:コントローラから送られ、ブラウザを通してユーザーが受け取るものがビューだから、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)

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

ビュー(HTML)

リンクを追加。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による認証を追加してみよう」をやりたいですね。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment