LoginSignup
1
1

More than 5 years have passed since last update.

Railsチュートリアルで押さえておくべきポイント 6・7章

Last updated at Posted at 2019-04-18

6章:モデル操作

  • 開発環境でposgresqlでなく、sqliteを仕様する場合、「rails db:create」は実行しない。
    ※ローカル環境でpostgresqlを指定せず、herokuなどの本番環境のみpostgresqlを指定しているため。

  • ActiveRecordの前に、sqlの基礎を抑えとく必要がある。今後、アソシエーションが複雑なテーブルを操作する時に苦労する。

  • saveメソッドは、booleanを返す。save!は例外を発生させる。
    デバックの時に、使い分けることもあるとのこと。

  • User.allはArrayクラスの配列ではなく、User::ActiveRecord_Relationクラスのオブジェクト。この理解がないと、今後、統合テストなどを実装する際にミスする。

# コンソールで、管理者権限をつける時は、このように属性をupdateさせる。
# updateメソッドとの違いはバリデーションを省略して単一属性を変更する点にある。
user.update_attribute(:admin, true) 
# DBをいじりたくなくけど、モデル、DBの挙動を確認したい時、オプションをつける。
$ rails console --sandbox
  • モデルのバリデーション機能は、テスト駆動開発と相性が良い。バリデーション機能が正常に機能しているかどうか、まず失敗するテストを書き、次にテストを成功させるように実装すると、期待した通りに動いている自信を持てるようになる。テストを書く意味が、 まずはここにある。

【モデルテストの流れ】
1.テストでバリデーションが通る条件のコードを記載。
2.テストをわざと失敗させる。
3.モデルクラスのバリデーションを設定。
4.テストを通す。 

  • minitestのsetupメソッドは、rspecのbeforeに似ている。

  • [インスタンス].errors.full_messagesでバリデーション時のエラーメッセージを取得できる。デバック時に使える。

# string型でmigrateしたemailの文字数のmaxはstring型に合わせ255文字にすることがほぼ。
validates :email, presence: true, length: { maximum: 255 }
  • %w[foo bar baz],%i[foo bar baz]は、多様する。
test "email validation should accept valid addresses" do
    valid_addresses = %w[user@example.com USER@foo.COM A_US-ER@foo.bar.org
                         first.last@foo.jp alice+bob@baz.cn]
    valid_addresses.each do |valid_address|
      @user.email = valid_address
      assert @user.valid?, "#{valid_address.inspect} should be valid"
    end
  end

"#{valid_address.inspect} sholud be valid"の記載で、どのemailにバリデーションがかかったか、わかりやすい。

# 一般的なemailカラムに関するバリデーション
# self.email = self.email.downcaseまたは{ self.email = email.downcase }とも書ける。
before_save { email.downcase! }
VALID_EMAIL_REGEX = /\A[\w+\-.]+@[a-z\d\-.]+\.[a-z]+\z/i
  validates :email, presence: true, length: { maximum: 255 },
                    format: { with: VALID_EMAIL_REGEX },
                    uniqueness: { case_sensitive: false }
# case_sensitiveは大文字か小文字かを区別するメソッド
  • DBにカラムを作成するとき、そのカラムでレコードを検索する (find) 必要があるかどうかを考える。必要がある場合は、DB側でindexを付与してあげる。

  • dupは、同じ属性を持つデータを複製するためのメソッド。一意性のemailかどうかテストする時に使用すると有効。

  • has_secure_passwordを該当モデルのファイルに記述する意味

    1. ハッシュ化したパスワードをpassword_digestカラムに保存
    2. form_withなどでpassword, password_confirmationを使える。
    3. authenticateメソッドを使える。(controllerのcreateアクションの所で主に使う)
      ※bcrypt gemをbundle installする必要あり

7章:ユーザー登録

app/views/layouts/application.html.erb
# parameterを追いたい時に便利。
# これはparamsに含まれている内容で、YAML形式で書かれている。YAMLは基本的にハッシュであり、コントローラとページのアクションを一意に指定している
    <%= debug(params) if Rails.env.development? %>
  <div>
</body>
# 下記でコンソールで出力するとデバック時などに情報を整理しやすい
puts user.attributes.to_yaml
/* デバックの表示をかっこよくする */
@mixin box_sizing {
  -moz-box-sizing:    border-box;
  -webkit-box-sizing: border-box;
  box-sizing:         border-box;
}
.
.
.
/* miscellaneous */

.debug_dump {
  clear: both;
  float: left;
  width: 100%;
  margin-top: 45px;
  @include box_sizing;
  • params[:id]は文字列型の "1" ですが、findメソッドでは自動的に整数型に変換させる。
    ※parameterで送られている際は、id: '1'と文字列。

  • debuggerメソッドの他に、別途gemが必要だけどbinding.pryもある。

  • Gravatarを使えば、画像の置き場所の悩みを解決します。このメリットは大きい。gemとはもいらない。
    反映させる画像は、メールアドレスに紐づいている。

app/helpers/users_helper.rb
module UsersHelper

  # 引数で与えられたユーザーのGravatar画像を返す
  # Rubyでは、Digestライブラリのhexdigestメソッドを使うと、MD5のハッシュ化ができる。
#  def gravatar_for(user, options = { size: 80 })
#  def gravatar_for(user, size: 80)でサイズ指定ができる。
  def gravatar_for(user)
    gravatar_id = Digest::MD5::hexdigest(user.email.downcase)
    gravatar_url = "https://secure.gravatar.com/avatar/#{gravatar_id}"
    image_tag(gravatar_url, alt: user.name, class: "gravatar")
  end
end
<%= gravatar_for @user %>
  • cssでの要素しての時に「first-child」「last-child」を使うと、子要素の指定が楽で便利。

  • 、無効な内容の送信によって元のページに戻されると、CSSクラスfield_with_errorsを持ったdivタグでエラー箇所を自動的に囲んでくれる。

  • 本番環境のSSL化

config/environments/production.rb
Rails.application.configure do
  .
  # Force all access to the app over SSL, use Strict-Transport-Security,
  # and use secure cookies.
  config.force_ssl = true
  .
end

herokuで独自ドメインを設定する場合は、別途 SSL証明書の発行とセットアップが必要。
https://devcenter.heroku.com/articles/ssl

herokuのwebサーバーをpumaに切り替える方法
https://devcenter.heroku.com/articles/deploying-rails-applications-with-the-puma-web-server

1
1
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1