LoginSignup
0
0

More than 1 year has passed since last update.

rails プロゲート 整理メモ

Posted at

困ったことを書いたものです。

テーブルに新しいカラムを追加する

rails generate migration user image_name:string

userモデルにstring型のimage_nameカラムを追加する

add_column(テーブル名, カラム名, タイプ(データ型), オプション引数)

テーブルを編集したときは 

 rails db:migrate

ユーザー登録時に初期画像を設定

登録時のアクションに新しく追加しする

@user = User.new(
      name: params[:name],
      email: params[:email]
      image_name: "default_user.jpg"
      )

カラムに書いておく。
出典 https://qiita.com/you8/items/137c87945da3cac19953

SyntaxError in UsersController#show

追加したカラムに,をつけ忘れた。

画像が表示されない

<img src="<%= "default_user.jpg" %>">

最初は表示されなかった。

<img src= "<%= "/user_images/default_user.jpg" %>">

user_imagesのファイルから取り出すようにした。
表示されたが合格できなかった。
これだと 全員のユーザーの画像がこれになってしまうので

<img src= "<%= "/user_images/#{@user.image_name}" %>">

image_nameカラムから引っ張ってくることで一人一人の画像を表示することができる。

rails の流れ(rails特有)

<img src= "<%= "/user_images/#{@user.image_name}" %>">

このurlの要求をしたらrailsは最初publicファイルからuser_imagesを探し出し特定のファイルを見つける。
しかし
publicの中になかった場合はroutes.rbからリクエストのパターンと同じものを探しコントローラからアクションを作動させる。

ユーザー画像を編集

画像を保存ボタンを押されたときにデータを送信する

form_tag(リンク先={}, オプション={}, HTML属性={} or イベント属性={}, ブロック引数)

:multipartマルチパートを指定をすることで画像を送ることができる。

<%= form_tag("/users/#{@user.id}/update", {multipart: true}) do %>
 <input type="file" src="button.gif" alt="保存">

一応画像を選択することはできる。
送信するためにファイルを保存することができる。

画像データが存在する時にだけ画像が保存されるようにしてください。

何だろうこの意味?

if params[:image_name] 

こうすることで中身が入っていいたらTrueになる。

NoMethodError in UsersController#update
undefined method `read'

.
.
.
    if params[:image_name]
      @user.image_name = params[:image_name]
      image = @user.image_name
      File.binwrite("public/user_images/#{@user.image_name}", image.read)
    end
.
.
.
<input name="image" type="file">

nameをimageにするとparamsのパラメータの名前も変えなければならない

params[:image]

imageに直す
成功

Fileクラス

File.write(ファイルの場所, ファイルの中身)

ファイルを読み込んでファイルを作成することができます

File.binwrite("public/user_images/#{@user.image_name}", image.read)

public/user_images/#{@user.image_name}の場所にファイル(imageの内容)を作成することができる。

read

全ての文字列を読み込む

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