- 1. 駆け出しエンジニアの「今すぐ質問したい!!」を解決するサービスをリリースしました
- 2. ユーザー管理機能初期手順②!
- 3. Railsチュートリアル2週目を終えて
- 4. railsチュートリアル第10章 ユーザー一覧のテスト
- 5. railsチュートリアル第10章 サンプルのユーザー ページネーション
- 6. railsチュートリアル第10章 ユーザーの一覧ページ
- 7. Rails database.yml | MySQL PostgreSQL
- 8. 【RSpec】shared_examplesを使ってリファクタリング
- 9. 【Rspec】build/createの違いと新規登録テストのエラー:expected `User.count` to have changed by 1, but was changed by 0について
- 10. ActiveRecord::RecordInvalid: バリデーションに失敗しました: Emailはすでに存在します
- 11. 【Ruby】case whenによる条件分岐
- 12. 通知機能の実装が難しかったのでまとめた
- 13. VS Code で自動的に RuboCop を実行する (rbenv, asdf 対応)
- 14. 【Ruby on Rails】簡単なAPI作ってみた
- 15. CRUD処理 Ruby on Rails(データベース編集方法)
- 16. データベースにおけるデータの編集や削除の方法まとめ
- 17. railsチュートリアル第10章 フレンドリーフォワーディング
- 18. railsチュートリアル第10章 正しいユーザーを要求する
- 19. railsチュートリアル第10章 ユーザーにログインを要求する
- 20. ユーザー管理機能初期手順①!
- 21. Rails,Cropper,CarrierWave,MiniMagickで画像を任意の位置でトリミングして登録するまで
駆け出しエンジニアの「今すぐ質問したい!!」を解決するサービスをリリースしました
## はじめに
駆け出しエンジニアのみなさん、分からないときにすぐ聞ける環境がありますか?プログラミング学習において大切なことの一つに、「学習を継続していくこと」があると思います。
しかし、実際にはエラーで立ち止まる日々で時間だけが過ぎていくことも。・質問したいことはあるけどどう質問すれば良いかわからない
・わからないことがわからない..
・テキストで質問してもすぐに回答がこないし..
・今すぐ単発で相談したいけど、そんな環境がないそんな時に**「Tech Spot」**ならzoomを使用して自分が学びたい分野のメンターに質問ができます。
[https://techspot.jp/](https://techspot.jp/)
[](https://techspot.jp)## アプリの概要
プログラミングに関する質問・回答サービス
ユーザー管理機能初期手順②!
#①.deviseのビュー作成!
前回の続きです!
deviseを使用してログイン機能を実装すると、自動的にログイン画面とサインアップ画面が生成されます!
deviseでログイン機能を実装すると、ログイン/サインアップ画面が自動的に生成されますがビューファイルとしては生成されません!
これは、deviseのGem内に存在するビューファイルを読み込んでいるためです!
deviseのビューファイルに変更を加えるためには、deviseのコマンドを利用して、ビューファイルを生成する必要があります!
#②.rails g devise:viewsコマンド
deviseに用意されたビューファイルをコピーし、app/viewsの配下に配置してくれるコマンドです!
HTMLを修正できるため、カスタマイズ可能になります!
deviseのコマンドで、devise用のビューファイルを生成します!
下記がコマンドです!
“`php
ターミナル
% rails g devise:views
“`上記の作業でdevise用のビューファイルを生成することができました!
#③.ストロン
Railsチュートリアル2週目を終えて
#概要
Railsチュートリアル2週目を終えたので、感想を書こうと思います。##かかった期間
10/10 ~ 10/27 (24~26を除く、約2週間)
合計:約63時間1週目では約48時間かかったので、2週合計で110時間ほど費やしました。
##開発環境
1週目からクラウドIDEではなくローカル環境で開発に挑戦しました。– Macbook Pro(13-inch, M1, 2020)
– Mac OS Big Sur 11.6
– VSCode (Visual Studio Code – Insiders 1.62.0)
– Ruby 3.0.2p107
– Rails 6.1.4.1##1週目と2週目の間にやったこと
1週目を終えた時点で「Rubyのコードが読めない」「なにが書きたいのかわからない」と気づきました。恥ずかしながら。Rubyの基礎力がかなり不足していたのです…。Rubyの力を養うために、「たのしいRuby」で文法をメインに勉強しました。# 2週目で心がけたこと
1週目では上記の通りコードを読めないことに加え、**コードに対するコメント**を全然
railsチュートリアル第10章 ユーザー一覧のテスト
###ユーザー一覧のテスト
今回のテストでは、ログイン、indexページにアクセス、最初のページにユーザーがいることを確認、
ページネーションのリンクがあることを確認
テスト用のデータベースに31人以上のユーザーがいる必要
####fixtureにさらに30人のユーザーを追加する
test/fixtures/users.yml“`yml
michael:
name: Michael Example
email: michael@example.com
password_digest: <%= User.digest('password') %>archer:
name: Sterling Archer
email: duchess@example.gov
password_digest: <%= User.digest('password') %>lana:
name: Lana Kane
email: hands@example.gov
password_digest: <%= User.digest('pa
railsチュートリアル第10章 サンプルのユーザー ページネーション
###サンプルのユーザー
ユーザーを一気に作成fakerは実際にいそうなユーザー名を作成するgemです
####GemfileにFaker gemを追加する
Gemfile“`
source ‘https://rubygems.org’gem ‘rails’, ‘6.0.3’
gem ‘bcrypt’, ‘3.1.13’
gem ‘faker’, ‘2.1.2’
gem ‘will_paginate’, ‘3.1.8’
gem ‘bootstrap-will_paginate’, ‘1.0.0’
.
.
.
“`
サンプルユーザーを生成するRubyスクリプトを追加
####データベース上にサンプルユーザーを生成するRailsタスク
db/seeds.rb“`rb
# メインのサンプルユーザーを1人作成する
User.create!(name: “Example User”,
email: “example@ra
railsチュートリアル第10章 ユーザーの一覧ページ
##すべてのユーザーを表示する
indexアクションを追加しましょう。
すべてのユーザーを一覧表示します。
・データベースにサンプルデータを追加する方法
・将来ユーザー数が膨大になってもindexページを問題なく表示ページネーション(pagination=ページ分割)の方法を学びます
・ユーザーの一覧
・ページネーション用リンク
・移動用の[Users]リンクのモックアップ管理者権限を新たに実装し、ユーザーの一覧ページから(管理者であれば)ユーザーを削除できる機能も実装
###ユーザーの一覧ページ
indexアクションを追加しましょう。
不正から守るためにテストを作成
####indexアクションのリダイレクトをテストする
test/controllers/users_controller_test.rb“`rb
require ‘test_helper’class UsersControllerTest < ActionDispatch::IntegrationTest def setup @user = users(:michael) @oth
Rails database.yml | MySQL PostgreSQL
Rails database.yml | MySQL PostgreSQL
https://www.mysql.com/jp/
“`database.yml
#
# Install the MYSQL driver
# gem install mysql2
#
# Ensure the MySQL gem is defined in your Gemfile
# gem ‘mysql2’
#
# And be sure to use new-style password hashing:
# http://dev.mysql.com/doc/refman/5.0/en/old-client.html
development:
adapter: mysql2
encoding: utf8
reconnect: false
database: sample_mysql_development
pool: 5
username: root
password:
socket: /tmp/mysql.sock# Warning: The d
【RSpec】shared_examplesを使ってリファクタリング
##環境
Ruby 3.0.2
Rails 6.1.4.1##リファクタリング前
yearの値が複数に条件分岐するテスト。
コードはほぼ同じでyearの値とメソッド実行した返り値が異なるだけなので
shared_examplesを使ってコードをまとめたい。“`spec.rb
describe ‘#get_post_count_for_year’ do
context ‘yearが0のとき’ do
let!(:year) { 0 }
it ’10を返す’ do
expect(Post.get_post_count_for_year(year)).to eq 10
end
end
context ‘yearが1のとき’ do
let!(:year) { 1 }
it ’20を返す’ do
expect(Post.get_post_count_for_year(year)).to eq 20
end
end
…
end
“`##リファクタリング後
“`spe
【Rspec】build/createの違いと新規登録テストのエラー:expected `User.count` to have changed by 1, but was changed by 0について
#はじめに
buildとcreateの違いすらよく理解せずに新規登録テストをRspecで書いて実行したところ、タイトルのようなエラーが発生しました。解決までに2時間ほどかかったので記念としてまとめておきます。なお、Railsのバージョンは5.2.6で、FactoryBotとFakerを導入しています。#背景
Rspecによくある新規登録のテストをしたかったので、まず、以下のように書きました。“`ruby:spec/test_spec.rb
describe ‘テスト①:ユーザー新規登録のテスト’ do
let!(:user) { create(:user) }before do
visit new_user_registration_path
fill_in ‘user[name]’, with: user.name
fill_in ‘user[email]’, with: user.email
fill_in ‘user[password]’, with: user.password
fill_in ‘user[passw
ActiveRecord::RecordInvalid: バリデーションに失敗しました: Emailはすでに存在します
とある状況でrails db:seedと入力すると__ActiveRecord::RecordInvalid: バリデーションに失敗しました: Emailはすでに存在します__と出てきてパソコン打ち壊しそうになったので備忘録。
#状況
これが出てきたエラーです。長え
![seed.rb_error.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/671017/d822e552-2e13-8b12-927e-ad700aa777ba.png)
#原因
![スクリーンショット 2021-10-27 17.00.49.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/671017/823e8954-fe56-c470-1a3c-f79590aaf5ba.png)seed.rbのAdminに
“`
email “a@a”
password “aaaaaa”
“`
って記述してたんですけど、これまだ僕がseed
【Ruby】case whenによる条件分岐
##環境
Ruby 3.0.2
Rails 6.1.4.1##case whenとは
thenは省略可
“`weather.rb
weather = 0
case weather
when 0 then
puts ‘晴れ’
when 1 then
puts ‘くもり’
when 2 then
puts ‘雨’
else
puts ‘雪’
end#=> 晴れ
“`putsを省略するとより可読性が上がり、コード量も減らせる
“`weather.rb
weather = 0
case weather
when 0 then ‘晴れ’
when 1 then ‘くもり’
when 2 then ‘雨’
else ‘雪’
end#=> 晴れ
“`case文をif文で書き直すとこんな感じ
“`===“`は、左辺が単独のStringやIntegerオブジェクトの場合“`==“`と同じ動作をする“`weather.rb
weather = 0
if weather === 0 then
puts ‘晴れ’
elsi
通知機能の実装が難しかったのでまとめた
#はじめに
自作アプリにコメント機能とそれに対する返信機能を完成させた後、通知機能を実装することにしました。通知が発生するのは、①自分がコメント(返信含む)した投稿に対してコメントされた時、②自分の投稿に対して初めてコメントがされた時です。環境はRailsの5.2.6です。なお、以下の三つの記事に大変お世話になりました。ありがとうございます。
[[Rails]通知機能の実装](https://qiita.com/yuto_1014/items/2db1dd4fcd7945b980f7)
[【Rails】通知機能を誰でも実装できるように解説する【いいね、コメント、フォロー】](https://qiita.com/nekojoker/items/80448944ec9aaae48d0a)
[【Ruby on Rails6】 ポートフォリオにフォロー通知、いいね通知、コメント通知を実装](https://qiita.com/corazon7364/items/d430da9290ea523515b4)#完成イメージ
通知は赤いベルマークで表し、マイページでクリックすると通知件数
VS Code で自動的に RuboCop を実行する (rbenv, asdf 対応)
# はじめに
この記事の通りに設定すると、VS Code 上で Ruby ファイルを保存した際に、自動的に RuboCop が実行され、以下のようにエディタ上にリアルタイムで結果が反映されるようになる。![](https://raw.githubusercontent.com/noraworld/developers-blog-media-ja/master/vscode-rubocop/Screen%20Shot%202021-10-26%20at%2018.50.17.png)
RuboCop のルールに従っていない箇所に波線が表示され、そこにマウスオーバーすると具体的な警告内容が表示される。
## 便利な点
* `git commit` するたびにいちいち `bundle exec rubocop` を実行する必要がない
* リアルタイムで修正していけるので、あとから RuboCop の警告修正のためだけの時間を取られることが少なくなる
* `.rubocop.yml` の内容が反映される
* プロジェクトごとにルールが異なる場合にも
【Ruby on Rails】簡単なAPI作ってみた
##はじめに
どうも、27歳未経験からエンジニア転職を目指しているもきおです。現役エンジニアに入社してから初期段階でどう言ったことをするのかを聞いたら「まずはAPI開発をやったよ」と言われ、APIってどうやって作るの?と思うと同時に作ってみたい!思いました。
今回は簡単なAPIをRailsで作成したのでここに記載したいと思います。
##そもそもAPIとは?
APIに関しては以下記事で概要を掴みました。
[WebAPIについての説明](https://qiita.com/busyoumono99/items/9b5ffd35dd521bafce47)本当にざっくりしたイメージだとWEBアプリのViewがないバージョンみたいだなーと感じました。もちろんViewがあるのもありますし、本当にざっくりとしたイメージなのですが。
あとはリクエストに対して返却値を返すという点では関数とかのイメージにも近いかもしれません。##作成物概要
今回はカテゴリーとアイデアという二つのテーブルを用意しアソシエーションはカテゴリ:アイデア=1:多の関係で作成しております。リクエストに対する一覧
CRUD処理 Ruby on Rails(データベース編集方法)
データベースにおけるデータの編集や削除の方法まとめ
***
railsのデータベースについて学んでいる時にCRUD処理について学びましたが、なかなか理解ができずまとめてみました。
※本記事では、ageとnameが保存してあるUsersテーブル上で,データの作成、編集方法を記しました。
***
・Create処理(データの追加)“`terminal:
$ User.create(name:”A”,age:100)
“`・Read処理(データを読み込み)
“`terminal:
$ User.all #Usersテーブルのすべてのデータを参照
$ User.find(3) #id名からの読み込み
$ User.find_by(name:”C”) #古いものから1つ
$ User.where(age:12) #複数の検索
“`
・Update処理“`terminal:
$ user = User.find(1) #id(1)のデータをuserに代入
$ user.age = 22 #ageを22に変更
$ User.save #保存
“`
・D
railsチュートリアル第10章 フレンドリーフォワーディング
###フレンドリーフォワーディング
ログインしていないユーザーが編集ページにアクセスしようとしていたなら、ユーザーがログインした後にはその編集ページにリダイレクトされるようにする
####フレンドリーフォワーディングのテスト
test/integration/users_edit_test.rb“`rb
require ‘test_helper’
# test_helper.rbのパラメータ群を指定class UsersEditTest < ActionDispatch::IntegrationTest def setup @user = users(:michael) end . . . test "successful edit with friendly forwarding" do get edit_user_path(@user) # URLで指定したファイルの送信を要求 log_in_as(@user) # テストユーザーとしてログインする assert_redirected_to edit_user
railsチュートリアル第10章 正しいユーザーを要求する
###正しいユーザーを要求する
セキュリティモデルが正しく実装されている確信を持つために、テスト駆動開発で進めていきます。
Usersコントローラのテストを補完するように、テストを追加するところから始めていきます。####fixtureファイルに2人目のユーザーを追加する
test/fixtures/users.yml“`
michael:
name: Michael Example
email: michael@example.com
password_digest: <%= User.digest('password') %>archer:
name: Sterling Archer
email: duchess@example.gov
password_digest: <%= User.digest('password') %>
“`####間違ったユーザーが編集しようとしたときのテスト
test/controllers/users_controller_test.rb“`rb
require ‘test_helper’cla
railsチュートリアル第10章 ユーザーにログインを要求する
##認可
ウェブアプリケーションの文脈では、
認証(authentication)はサイトのユーザーを識別することであり、
認可(authorization)はそのユーザーが実行可能な操作を管理することです。updateアクションには大きな穴がある。
ユーザーにログインを要求し、かつ自分以外のユーザー情報を変更できないように制御してみましょう。
###ユーザーにログインを要求する
####beforeフィルターにlogged_in_userを追加する
app/controllers/users_controller.rb“`rb
class UsersController < ApplicationController before_action :logged_in_user, only: [:edit, :update] # before_actionメソッドを使って何らかの処理が実行される直前に # 特定のメソッドを実行する仕組み # :editと:updateアクションだけ . . . # ログイン済みユーザーかどうか確認 def lo
ユーザー管理機能初期手順①!
#①.ログイン機能の実装!
ユーザー関連の機能はGemを使用します!
まず、ログイン機能を実装するために、deviseというGemを使用します!
・devise
ユーザー管理機能を簡単に実装するためのGemです!
実際に運用されている多くのRailsアプリケーションサービスで使用されています!
Gemfileを編集します!
追記する場所は、Gemfileの最後の行です!
“`php
Gemfile
# 中略
gem ‘devise’
“`次にコマンドを実行してGemをインストールします!
“`php
ターミナル
# Gemをインストール
% bundle install
“`次にローカルサーバーを再起動します!
Gemをインストールした後はrails sをcontrol + Cで一度停止し、サーバーを再起動する必要があります!
これは、インストールしたGemの反映するタイミングが、サーバー起動時だからです!
“`php
ターミナル
# Gemをインストール後
% rails s
“`次のステップへ行きます!
#②.deviseの設定ファ
Rails,Cropper,CarrierWave,MiniMagickで画像を任意の位置でトリミングして登録するまで
##やりたいこと
画像を任意の位置でトリミングして登録したい。
(下のgifではユーザー登録時に画像をトリミングして登録→詳細画面)
![trim.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2204595/7bbe3377-1276-2aaf-ffa5-6915684c00a4.gif)##使用ツール
Rails 6.1.4.1
CarrierWave 2.2.2(ファイルのアップロード機能を簡単に追加する事が出来るgem)
MiniMagick 4.11.0(バックエンドで画像をリサイズ、トリミング出来るgem)
Cropper.js(フロントエンドで画像のトリミングが出来るJavaScriptライブラリ)##実現するためのプロセス
①フロントエンドの処理
Cropper.jsを導入することでトリミング画面の実装及び**トリミング位置を取得できる。**
Cropper.js側で下図のx,y,h,wの数値を取得し、viewのhiddenタグに各値を設定。
![image.png](ht