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