rails 独学して軽くにちゃんまとめつくる

(おすすめ。でも未完)Rails初心者が使うべき思考パターンとその型

 

 

 

Railsでアプリをつくるときある程度型にあてはめて考えたほうがいいと考えていた。RailsTutorialや パーフェクト Ruby on Railsをやって気づいたのは、どんな実装にもある程度型にはまっているということ。もちろん型から外れたものを実装するときもあるし、型を増築しなきゃいけないときもある。しかし scafold をはじめ、ある程度はあるのだからそれに習うべき。

 

new -> create -> show -> index -> edit -> update -> destroy

 

の順番で書いていく。これが自然な流れだから。まずnewで作り、createで審査し、showページに飛び、indexで全体を見て、editで編集をし、updateで審査し、destroyで消す。一連のストーリーがここにもある。

 

 

CRUDはコントローラーとビューに分けて考えるのがいいから、分けて考える。

 

new

 

ーフォーム作成ー

・テキストの場合は class: "form-control"

・form_for のあとにエラーをだす error_message を忘れずに。パーシャルにしておけ。引数は object: f.object


・form_forが成功したときにだす flash の表示をapplication.rbに挟んでおけ。

Rails4でユーザーに簡易なメッセージをflashで表示する - Rails Webook

これの1をぱくれ。


・フォームはeditでもつかうからパーシャルにしておけ。でもそうしたら submit ボタンの文字がおかしくなるから、provide か 辞書データをつくっておけ。


・時間を入力するときはタイムゾーンの設定をし、form_forの外側で <% now = Time.zone.now %> を定義しておく。また、年を指定するときはstart_yearとend_year を書け。end_year: now.year+1とかね。

・翻訳をするため、f.label はかけ。その後i18n設定をするために一般的な翻訳データとフォーム特有の翻訳データを作成しろ。一般のはターミナルに

wget https://raw.github.com/svenfuchs/rails-i18n/master/rails/locale/ja.yml -P config/locales/

を入力しろ。そしたら勝手に作ってくれる。フォーム特有のは下のリンクの(7)を参考につくれ。うまくいけばフォームが日本語対応になる。うまくいかない場合は ctrl + c でやりなおせ。

http://morizyun.github.io/blog/i18n-english-rails-ruby-many-languages/

・submit ボタンのクラスのあとに

data: {disable_with: '作成中・・・'}

と書け。二回クリックされるのを防げるぞ。

 

 

create

・newで入力したのを変数に代入。条件分岐させ、メッセージと移動先を指定。

・ 条件分岐が命。どのような条件を建てるかがもんだい。新規登録なら変数をセーブてきてるか否か。ログインなら入力されたパスワードとメールアドレスが正しいか否か。

 

index

・bootstrap をいれとけ。 

   gem 'bootstrap-sass'

をgemfile にいれて bundle installしておけ。

・これもshowと同じでnewで作ったのを表示するだけ。ただし、情報量を抑えるためshowよりも使用するデータを少な目にする。LINEの友達一覧もindexの一覧なんだけど名前と顔写真だけでしょ?

・indexは厳選と順番が生きてくる。厳選は、年齢が20歳以上とか、東京住みとか。順番は値段別、時間別、五十音順、作成順などなど。例えばUserモデルを厳選し順番を変えると

@users = User.where('age > ? AND prefecture = ?', 25, 'Tokyo')order(:id)

のようにする。厳選と順番、忘れがちだけど大事

 

・ページネーション。kaminari とか will_paginate がある。kaminari ぼくはkaminari が趣味。

・それっぽいデザインがほしければ ”list-group” というクラスを使う。たとえばこんな感じ

<div class="list-group">
  <%@users.each do |user|%>
    <%= link_to user, class:"list-group-item" do %>
      <p class="list-group-text">
          <%= user.image %>
      </p>
      <h4 class="list-group-text">
        <%= user.name %>
      </h4>
    <% end %>
  <% end %>
</div>

 

おおきく list-groupで囲み、個別にlist-group-itemをつけ、文字にlist-group-textを使う。参考としてBootstrapのサイトを書いておく。

List group · Bootstrap

 

・時間を表示するときは strftimeで整形するのがおすすめ。

event.start_time.strftime('%Y/%m/%d %H:%M')

こうすると  2017/1/28  20:16 というように好きなように書ける

 

 

show

・なんて書けばいいかわからないなんていうな。忘れるな。モデルからデータを引っ張りだしてくるだけだ。基本はnewで入力したデータを表示するだけだ。だから newで入力した

<%= f.text_field :name %>や  <%= f.text_field :email %>  というのを

<%= @user.name %> とか <%= user.email %> に変えるだけ。簡単で単純。

 

・それっぽいデザインがほしければ bootstrap の panel クラスを使おう。具体的には

<div class="panel-default">
  <div class="panel-heading">
    名前
  </div>
  <div class="panel-body">
    <%= @user.name %>
  </div>
</div>

こんな風にかく。これを要素の数だけ書けばそれっぽくなる。

panel-default と panel-header と panel-body。

 

 

 

edit

update

 

destroy

物理削除(railstutorialのようにデータを消してしまう)か論理削除(データを消さずに別の場所に移して見えなくする)かを決める。kakurenbo-putiというgemがあればすんなりと論理削除に移行できる。

kakurenbo-putiというrails4.2に対応した論理削除gemの紹介 - 波打際のブログさん

 

 

 

 

モデル

・バリデーションとseedとfixtureを作る。

・関連性をもたせるか?関連名を自作するときは class_nameでモデルクラスを指定し、foreign_keyで外部参照キーを指定しろ。親クラスが削除されたときのためにdependent: :destroy は いるか?

・中間テーブルをもたせるときはテーブルの型に referencesをつかえ。has_many等の関連づけをわすれずに。3つのモデルの関連性を頭に図示できたか?
中間テーブル作成したらコントローラーも作成するんだよ。

 

ヘルパー

 ・ヘルパーで作ったのをコントローラーでも使いたいとき、application_controller.rb に

include SessionHelper のようにinclude + ヘルパーのクラス名をかく。

 

 

落ち穂拾い

・フレンドリーフォワーディングを作成しよう

・退会機能を作成しよう

 

ログイン認可

・なぜログインを要求するのか?それはログインしてるかどうかによって見せる画面を変えたり、本人確認するとこによって見せる画面やできる機能を制限するためです。

・ログインしてるか否か(logged_in?)と、あなたは誰?(current_user)という2つの機能が中心。

logged_in? ではヘッダー、そのほかビュー、