0
0

More than 1 year has passed since last update.

Progate Ruby on Rails5 VI ~ VII 個人的ざっくりまとめ

Posted at

emailの重複がないかチェック

バリデーションでuniqueness: trueを指定

models/user.rb
class User < ApplicationRecord
  validates :email, {uniqueness: true}
end

マイグレーションファイルのみ作成

データベースに変更を加えるが、モデルは必要ないとき

rails g migration ファイル名をターミナルに入力

ターミナル
$ rails g migration add_image_name_to_users

マイグレーションファイルの仕組み

テーブルの変更を加えるには、マイグレーションファイルのchangeメソッドの中に処理をかく

20170427053118_add_image_name_to_users.rb
class AddImageNameToUsers < ActiveRecord::Migration[5.0]
  def change
    # 変更内容
  end
end

カラムを追加するマイグレーションファイル

add_column テーブル名, カラム名, データ型をchangeメソッドの中にかく

20170427053118_add_image_name_to_users.rb
class AddImageNameToUsers < ActiveRecord::Migration[5.0]
  def change
    add_column :users, :image_name, :string
  end
end

rails db:migrateはこのchangeメソッドの中身を実行するためのコマンド

ターミナル
$ rails db:migrate  # changeメソッドの中身を実行

画像の送信

画像の送信の場合はform_tag("URL", {multipart: true})と指定する必要がある

users/edit.html.erb
<%= form_tag("/users/#{@user.id}/update"), {multipart: true}) do %>
  <p>画像</p>
  <input name="image" type="file">
<% end %>

Rubyのコードでファイルを作成

File.write(ファイルの場所, ファイルの中身)と指定する

ターミナル
$ rails console

> File.write("public/sample.txt", "Hello World")

画像の保存

画像を保存するためには、画像データを元に画像ファイルを作成する必要がある

ファイルを作成するにはFileクラスを使う

File.binwrite(ファイルの場所, ファイルの中身(画像データ))と指定する

※readメソッドを用いることで、その画像データを取得することができる

users_controller.rb
def update
  :
  :
  @user.image_name = "#{@user.id}.jpg"
  image = params[:image]
  File.binwrite("public/user_images/#{@user.image_name}", image.read)
end
0
0
0

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
0
0