未体験未感覚エンジニアの日記

ITエンジニアになるまでのITダイビング日記

gem deviseはログイン、ログアウト機能だけでも使うべき。

Rails gem deviseの話をしているとコントローラーがなくても動くのですごい便利だけどカスタムには向かないという話を聞きました。

確かに色々作業を増やそうと思うとコントローラーも必要になりデフォルトの動きを止めたり変えたりする記述も必要になってくるので結局記述も増えてきます。

その際に新規登録や更新、削除等は新たに作り直したほうが早いなと感じることもありますがログイン、ログアウト機能だけでもdeviseをインストールしてもいいんじないかなと思いました。

いまRuby on Railsでバリバリのサービス開発している人はどうなんでしょうか?

コントローラーもビューも作らずパスだけ通してもいいんじゃないかなと思いましたが勉強中の身なので将来考えが変わっていたらごめんなさい🙇‍♂️

Userモデルに画像の登録可能のプロフィールモデルを作成する。

今日はrailsのgem deviseで作成したuserモデルにprofile画像を追加する方法を振り返ります。

ユーザー登録した後にあとで自分の画像や背景画像、自己紹介コメントを追加するような形で考えています。

まずrails g model Profileでprofilesモデルの作成

create_profiles.rbファイルに

t.string :image
t.string :backimage
t.string :comment
t.references :user, foreign_key: true

userモデルとprofileモデルは今回は1対1の関係なので、user.rbに

has_one :profile, dependent: :destroy

profileモデル、profile.rbに

has_one :user

と記載する。

ここで一度、rails db:migrateをしておく。

次に画像upload用にgemファイルに

gem 'carrierwave'
gem 'mini_magick'

の記載を追加。

ターミナルでimagemagickのinstallがまだであれば

brew install imagemagick

bundle install、

rails g uploader image

rails g uploader backimage

upload用のファイルを作成をします。

次にprofile.rbに

mount_uploader :image, ImageUploader
mount_uploader :backimage, BackimageUploader

の記載、それぞれのuploader.rb内にコメントアウトされている

include CarrierWave::MiniMagick
process resize_to_fit: [400, 400]

の部分を有効にして保存する画像ファイルのサイズを指定してください。

(今回はヨコ、タテとも400pxで保存するようにしました。

この時、uploader.rb内にコメントアウトした形で

def default_url(*args)
# # For Rails 3.1+ asset pipeline compatibility:
# # ActionController::Base.helpers.asset_path("fallback/"
"default.png"

となっている部分があるのでここを有効にし、画像を指定しておくと画像ない時に表示されるようになるのでおすすめです。

最後にrails db:migratesしておきましょう。

当初、gem deviseで作成したuserモデルにカラムを追加する形で進めていましたが、

プロフィール欄で同じタイミングで新規登録しないような状況だと

コントローラー内のデータの受け渡しで相性の悪さを感じたため別モデルでの作成に切り替えました。

上記の方法に切り替えた後はスムーズに作成出来たので同じタイミングで作成しない情報は別テーブルに保存した方がいいように思いました。

以上、お読みいただきありがとうございました。

 

Mysqlで大変な目にあったという話

Railsのversionを5.2.3 - 6.0.1に変更してからエラーの嵐です。

まずrails newコマンドが使えなくなります。作成しようとするとwebpackerがないと怒られます。はいそうですかとrails webpacker:installをするとyarnがないと怒られます。言われた通りにyarnもinstallすると無事作成出来ましたが今日はmysqlのMysql2::Error:Specified key was too long; max key length is 767 bytesというエラーをいただきました。

rails db:migrateをしたところでなったエラーで、調べるといままでdatabase.ymlにutf8の文字コードで作成されていたものがutf8mb4で作成されており、カラムの容量オーバーのためマイグレーションが実行できなかったようです。

調べた中で容量の設定を変えるとかカラムの容量を指定して抑えるとか色々方法はあるようなのですがそもそもmysqlのversion5.7以降では初めから対応しているらしいので、

いま現在私の環境ではversion5.6なのですがいっそversion5.7に上げようと考えたまではいいが何も考えずinstallしてしまったのが沼に嵌まってしまった原因です。

ローカル環境ではversion5.7、サーバー環境ではversion5.6という状況に陥り最終的にどちらもuninstallして改めてversion5.7をインストールすることで動くようになりましたが時間がかかってしまった。

事前にちゃんと調べて入ればスムーズに移行できたのになと思うと反省するばかりです。

次の移行期はスムーズに行えるように考えないと........。

Railsでアプリ作成時によく準備しておくもの

今日はRailsでアプリ作成時によく環境整備しておくものを取り上げたいと思います。

(基本githubとの連携でのアプリ制作として考えています。)

まず、投稿アプリ作成時にやっておきたいこと

application.htmlにレスポンシブ対応用に

<meta content="width=device-width, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0" name="viewport"/>の記載やreset.scssの用意、cssの計算がしやすいように

body {
box-sizing : border-box;
}

の記載を入れておく。

gitignoreファイルの末尾に画像がgithubにコミットされないように

/public/uploads/*

の記載を入れておく

gemファイルの末尾によく使うgemをあらかじめ入れる

iconと言えばfont-awesomeはよく使います

gem 'font-awesome-sass'

(font-awesomerubyrailsのversionによって書き方が変わるので注意)

神様仏様haml様 (私はhamlで書くのが大好きなので)

gem 'haml-rails'

これがないと戦えない (これがないと裸で戦場に行くようなものです(^^; )

gem 'pry-rails'

記載したら忘れずにbundle installをする。

あとはrails g コマンド時に必要のないファイルを作らないようapplication.rbに

config.generators do |g|
g.stylesheets false
g.javascripts false
g.helper false
g.test_framework false
end

とりあえず最低限はこんなものかな。

 

Rails new!

今日はみんな大好きRailsを使ったWEBアプリケーションの作成の基本を記事を書きながら振り返っていきます。

まず始める前に開発環境の確認をしておきます。

(特にRailsはversionによってかなり違いがあるので要確認)

まずterminalで作成したいディレクトリへ移動

rails newコマンドで新しいプロジェクトを作成します。

version,(mysqlを使用する人はmysqlも)の指定を忘れないようにしておく。

例 rails new _(version)_ (プロジェクト名) -d mysql

無事作成したら一度 cd (プロジェクト名)で使用するファイルのディレクトリへ

rails db:createをしてデータベースを作成、rails db:migrateで反映させておく。

この段階で一度 rails s コマンドで無事作成出来ているか確認

f:id:itdiver:20200120163021p:plain

添付のようになっていれば無事作成成功です。

次回はRailsアプリケーション制作前の下準備の記事を書いていきます。

 

初めての投稿!

初めまして!

私は都内のプログラミングスクールに通いWEBエンジニアを目指しています。

このブログはプログラミングに関する技術ブログを投稿するのが目的で内容は基本、自分への備忘録として見返せるようにしていきたいと思っています。

これから毎週ブログを投稿していきます!