- 1. ログインが出来ないだって?
- 1.1. 前提
- 1.1.1. 【Next.js + Rails + CarrierWave + S3】 Next.jsのnext/imageで画像を表示させる方法
- 1.1.2. after_createコールバック内の関連テーブル作成処理が2回実行される問題
- 1.1.3. herokuにpushできなくてお困りのあなた。こちらをご覧ください。
- 1.1.4. haml導入から基本的な使い方
- 1.1.5. 『rails』いいね機能の実装方法② 非同期通信の実装
- 1.1.6. Railsサーバーを起動したらgem Nokogiriがエラーになった。
- 1.1.7. 配列でのpopやunshiftなどのメソッド
- 1.1.8. Pumaが起動しない。Deployできない。その時に真っ先につぶしておきたい可能性
- 1.1.9. Railsチュートリアルの2章でつまづいた話
- 1.1.10. ポートフォリオとして転売を防止するアプリTenba×IyaというWebアプリを作った
- 1.1.11. フォロー機能の追加方法(Ruby on Rails)
- 1.1.12. 【Rails】rack-corsの設定方法
- 1.1.13. Railsのscopeとは
- 1.1.14. rails heroku上のDBをリセットする
RailsアプリにBasic認証を実装する
## Basic認証とは
HTTP通信に元々備えられているユーザー認証の仕組み。
あるアプリケーションに利用可能なユーザー名とパスワードをあらかじめ設定しておき、ユーザーが利用しようとした際設定していたユーザー名とパスワードを入力させてログインできるようにする機能。要するに個別のパスワード設定ではなく全員に共通したパスワードでログインさせるようなこと。Railsで作成したアプリにBasic認証を導入するのは比較的簡単にできるようなので試してみたいと思います。## Basic認証を実装するメソッド
Railsにはbasic認証を実装する’authenticate_or_request_with_http_basic’というメソッドが用意されているので、それを使ってbasic認証を実装してみたいと思います。
ベーシック認証が成功したらトップページに
![スクリーンショット 2022-02-16 10.50.42.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1623433/43f6b856-fb
rubyにおける::(ダブルコロン、コロンコロン)スコープ演算子
rubyではスコープ演算子というのがあります。::っていうやつです。
これを使うと、クラスやモジュールで定義されている定数を外部から参照することができます“`
module Test
HOGE=20
FUGA=30
endclass Hogehoge
hoge = Test::HOGE
p hoge
end
=> 20
“`
こうすることによってmoduleで定義されている変数を参照することができるんです。今回はメモ書き程度に終わらせようとおもいます
以上です。何か間違いがございましたら、ご教示いただけますと幸いです。
ログインができません<初心者>
ログインが出来ないだって?
Railsでアプリを作成中。
deviseを使用してユーザー管理機能を実装していました。
サインアップ、ログアウト、編集機能まで順調に進めていたところ、最後に確認としてもう一度正常に動くか確認したところ、、、ロ、ログインができない・・・
ここまできてなんてこった。
どこが原因なのか・・・「Devise::SessionController#new」を経由しているし
サーバーは反応しててパラメーターにもちゃんとメールアドレスとパスワードが入っている。
SequelProを見ながら間違いなく入力しているのに何度やってもログインに失敗し、“`
Invalid Email or password.
(メールアドレスまたはパスワードが無効です。)
“`
↑ これの嵐。初心者の自分にはパニックで一時フリーズ。
いったん冷静になって、また考えました。MVCの流れに沿って進んでいる。
メールアドレスかパスワードが無効ということは、「空」なのか「間違っている」かのどちらか。
でもどちらも間違っ
dbのインデックス備忘録
インデックスについて学んだので、備忘録です。
## インデックスとは
**索引。dbの検索性能を上げる**なぜ検索性能が上がるのかというと、インデックスをつけたカラムでは、レコードが作成される際にソートが行われ、検索したい文字列や数字を全レコード確認することなく、発見することができるから。
### メリットとデメリット
#### メリット
– レコードの検索やソートの速度が上がる#### デメリット
– レコード作成時にソートしないといけない関係で、書き込みの時間が増える### 例
ブログなどの何かしらの記事を投稿するpostsテーブルについて考える。レコードは以下の感じ。*postsテーブル*
| id | body | created_at |
| :— | :— | —: |
| 1 | 本文です。 | 2022-01-01 12:00:00 |
| 2 | 本文です。 | 2022-01-01 12:01:00 |
| 3 | 本文です。 | 2022-01-01 12:02:00 |
| 4 | 本文です。 | 2022-01-01 12:
rails 自動整形ツールRubocopの導入
# はじめに
rubyの自動整形ツールであるrubocopの導入方法をまとめる。# 環境
– rails 6.0.4.4
– ruby 2.6.5
– rubocop 1.25.1# Rubocopとは
Rubyのコード解析ツール。
自身で決めた規定通りにコードを書けているか解析、かつ、自動で修正してくれるツール。
インデントを揃えたり、余分な改行・スペースを削除したりできる。
[RubyStyleGuide](https://github.com/fortissimo1997/ruby-style-guide/blob/japanese/README.ja.md)に基づいて指摘を行う。公式 https://rubocop.org/
# Rubocopの導入方法
Gemファイルに記載“`Gemfile.
groupdevelopment do
gem ‘rubocop’, require: false
end
“`インストール
“`ターミナル.
bundle install
“`Rubocopの設定ファイルを新規作成
“`ターミナル.
to
Rails チュートリアルのrails serverでエラーが出た
前提
railsチュートリアルの「1.3.2 rails server」でサイトを表示したい。
開発環境 -> Cloud9
rubyおよびrailsバージョンは以下の通り。“`terminal
ruby -v -> ‘6.0.3’
rails -v -> ‘5.1.0’
“`チュートリアルの1.3.1までの環境構築は終わった状態で以下を実行。
“`terminal
Cloud9User:~/environment/hello_app (master) $ rails server#省略
Use Ctrl-C to stop
“`
ここでpreviewすると以下のメッセージ
![ecc24368fac55bcbb0887b02bedc8076.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1106470/c3d3aef3-741d-23f1-8a01-7de51cb31f91.png)
エラーメッセージ↓
config.hosts << "de3360
【Next.js + Rails + CarrierWave + S3】 Next.jsのnext/imageで画像を表示させる方法
# 初めに
この記事ではNext.js が提供している[Image コンポーネント](https://nextjs.org/docs/api-reference/next/image) (next/image)についてのお話です。
__imgタグのこと__ではないので注意してください。# 内部の画像を表示
内部ではルートディレクトリ配下にあるpublicを基準にして表示させることができます。
とても簡単ですね
【例】
/public/images/test.png“` JSX:test.js
“`# 外部の画像を表示
公式にも書いてある通り
ルートディレクトリ直下にnext.config.jsを作り
【例】
example.comの場合“` JSX:next.config.js
module.exports = {
images: {
domains: [“example.com”]
after_createコールバック内の関連テーブル作成処理が2回実行される問題
# 結論
* after_createコールバック内で関連テーブルを作成する場合注意が必要。
書き方によっては関連テーブルが2つ作成されてしまう。# 環境
Ruby 3.0.2p107
Rails 6.1.4.6# やりたかった事
* 生徒が講義の登録を行う多対多構造の作成
* 生徒の登録と同時に必修科目”math”の登録model/course.rb
“`rb
class Course < ApplicationRecord has_many :course_students has_many :students ,through: :course_students end ``` model/student.rb ```rb class Student < ApplicationRecord after_create :regist_essensial_course has_many :course_students has_many :courses, through: :course_students private
herokuにpushできなくてお困りのあなた。こちらをご覧ください。
昨日はできていたpush…
“`
$ git push heroku
Username for ‘https://git.heroku.com/~’:
Password for ‘https://git.heroku.com/~’:
remote: ! WARNING:
remote: ! Do not authenticate with username and password using git.
remote: ! Run `heroku login` to update your credentials, then retry the git command.
remote: ! See documentation for details: https://devcenter.heroku.com/articles/git#http-git-authentication
fatal: Authentication failed for ‘https://git.heroku.com/~’
“`
なんか言ってんな“
haml導入から基本的な使い方
## gemを使いhamlを導入する
“`ruby
gem ‘haml-rails’
gem ‘erb2haml’ # 現在erbでファイルを作成していてhamlに書き換えたい場合はこちらをインストール
“`bundle install
## ※erb2hamlを使いerbファイルをhamlに書き換える場合
“`ruby
rails haml:convert_erbs # erbファイルを残して新しく作り直す場合はこちらのコマンド
rails haml:replace_erbs # erb自体をhamlファイルに変更したい場合はこちらのコマンド
“`rails haml:convert_erbsを実行してみる。
画像上: 変更前(.erb)
画像下: 変更後(.haml)
![スクリーンショット 2022-02-15 9.39.20.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1623433/27b06a3e-8b2b-c8dc-e3fc-81368afbcd12.png)
『rails』いいね機能の実装方法② 非同期通信の実装
#はじめに
現在オリジナルアプリの散歩習慣化アプリを製作中です。
以前の記事で、いいね機能の同期通信までをまとめたので、今回は同期通信までをまとめます!前の記事です。
『rails』いいね機能の実装方法① 同期通信まで
https://qiita.com/yuhi_taka/items/47d8e50ea17b59f016c8#前提と目標
**・前提**
前回までの「同期通信まで」で以下の状態まで実装できています。
[![Image from Gyazo](https://i.gyazo.com/4f32c0931667c17c49b3b5298d8d9947.gif)](https://gyazo.com/4f32c0931667c17c49b3b5298d8d9947)同期通信で、いいねができるようになっています。
データベース設計は以下のとおりです。
![morning-walk.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2378833/3ff33848-1115-b8a7-
Railsサーバーを起動したらgem Nokogiriがエラーになった。
#突然にGemがエラーを出し始めた。(きっかけは定かではない)
Railsサーバー起動したらこんな表示が。
![スクリーンショット 2022-02-15 12.50.06.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/468139/fac8c5e2-bc2d-0f7f-a7e8-04354983869c.png)#原因
エラーを翻訳すると 「nokogiri-1.10.9は拡張機能が構築されていないため、無視します。」
でもRailsサーバーは普通に使えていたので、いっとき放置していました。
ただ、起動するたびにこの表示が出て消したいと思うようになりました。#解決法
よくよく続きを読むとかいていました。「試してみてください:gem pristine nokogiri –version 1.10.9」
ということでターミナルでコマンドを試したところ、解消されました。~~~~
gem pristine nokogiri –version 1.10.9
~~~~#学んだこと
英語のエラー
配列でのpopやunshiftなどのメソッド
## popメソッド
popメソッドは配列の最後の値を取り除くメソッドです。
ぼくなりの覚え方ですが、popには「飛び出る」という意味があるので、一番最後の端っこから飛び出るというイメージを持って覚えています。引数に数字(例えば、今回のように2を指定し場合)を指定した場合、末尾からその数字分(今回であれば、2つ)の要素を取り除きます。
“`
array = [1, [2, 3], 4]
p array.pop # => 4
p array.pop # => [2, 3]
p array # => [1]p array.pop # => 1
p array.pop # => nil
p array # => []array = [1, 2, 3]
p array.pop(2) #=> [2, 3]
p array #=> [1]
“`## append(push)メソッド
配列の末尾に要素を追加する
“`
array = [1, 2, 3]
array.push 4
Pumaが起動しない。Deployできない。その時に真っ先につぶしておきたい可能性
# 概要
– ステージングやプロダクション環境でPumaを起動しようとするとエラーが出て起動しない
– ステージングやプロダクション環境にデプロイしようとするとエラーが出て途中で終了する
– ローカルの開発環境ではエラーなくRailsが起動するこのような状況になった時、様々な原因が考えられます。
デプロイ設定やインフラが疑われますが、真っ先につぶしておきたい可能性があります。**本当にローカルの開発環境ではエラーないの?**
この記事ではその確認方法を紹介します。
# 目次
[バージョン](#バージョン)
[エラー状況](#エラー状況)
[エラー原因](#エラー原因)
[確認方法](#確認方法)
[よくあるエラー](#よくあるエラー)
[最後に](#最後に)# バージョン
Ruby:2.7.3
Rails:6.1.4.4
Puma:5.0
Capistrano:3.16.0# エラー状況
Puma起動時にエラーになる
“`sql
/var/www/rails/application/shared/vendor/bundle/ruby/2.7.0/gems
Railsチュートリアルの2章でつまづいた話
Railsチュートリアルの基礎中の基礎(2章のgit)で躓いたので備忘録としてアップしておきます。
環境
・cloud9
・Rails 5.1.6
・Ruby 2.6.3Railsチュートリアル Rails ver.5.1.6では手順通りにgitの設定をしても100%エラーが出ます。(僕の力量では理由はわかりません)
1のnoteの手順通りに最後まで通した後2のqiitaの通りにするとなぜかはわかりませんがうまくいきます。1 railsチュートリアルでBitbucket、Herokuでつまづいた人が行うべきこと
https://note.com/el93019205/n/n328eac66a2602 Railsチュートリアル 1.4.3 Push時のエラー解決方法
https://qiita.com/kmat/items/3e3b681d4ce5a2877960
ポートフォリオとして転売を防止するアプリTenba×IyaというWebアプリを作った
#はじめに
ポートフォリオとして作成したWebアプリケーションの紹介記事です。##作成した人
- 独学でRuby on Railsの学習を行いWebアプリの開発を行っています。
- 仕事は建築関係の仕事に就いています。作成したアプリの概要
- 「転売目的の商品の大量購入を防止する」ことを目的に作ったWebアプリケーションです。
- サービス名は「Tenba×Iya」としました。
- 転売屋と転売 嫌からTenba Iya、さらに嫌を×で表してみました。
![キャプチャaa.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/948501/a679e5b5-7b29-aa42-b4a1-bc9668fdbdcc.jpeg)最近、転売による商品の不足、高騰などが問題になっているなと思い、アプリを作成しました。
転売をするためには商品を大量に購入する必要があると考え、一つの商品を大量に購入できないような仕組みとしてアプリを作成しています。ただ、アプリの作成はしましたが、購入する際に手間が増える、
フォロー機能の追加方法(Ruby on Rails)
##今回の課題 “フォロー機能の追加”
Railsでのフォロー機能の追加について難しかった点などを
自分で記事に書いて、頭の中を整理していこうと思います。
間違いなどありましたら、ご教授の程よろしくお願い致します。##開発環境
> ruby 2.6.3
> Rails 5.2.6
> Bootstrap 4.5
> Cloud9##大事なこと
今回はフォローした人とフォローする人
どちらも同じテーブル内に存在するUserです。
多くの人をフォローすることもできるし、多くの人にフォローされることもある状態なので現在は多対多の関係になっています。なので
`1対Nの関係を中間テーブルを用いて関連付ける`事が重要になります。自分自身もまだ完全には理解できていませんが、この記事を書く事で少しでも理解できる様に整理していきます。
##手順
– モデルの作成
– アソシエーション
– メソッド作成
– コントローラー
– ビュー##モデルの作成
まずは`relationship`モデルを作成そしてrelationshipsテーブル内のカラムに
・integer :follow
【Rails】rack-corsの設定方法
## はじめに
本記事は、プログラミング初学者が、学習を進めていて疑問に思った点について調べた結果を備忘録も兼ねてまとめたものです。
そのため、記事の内容に誤りが含まれている可能性があります。ご容赦ください。
間違いを見つけた方は、お手数ですが、ご指摘いただけますと幸いです。## rack-corsの設定方法
“`config/initializers/cors.rb
# Be sure to restart your server when you modify this file.# Avoid CORS issues when API is called from the frontend app.
# Handle Cross-Origin Resource Sharing (CORS) in order to accept cross-origin AJAX requests.# Read more: https://github.com/cyu/rack-cors
Rails.application.config.middleware.insert
Railsのscopeとは
## scope(スコープ)とは
特定のSQL文をメソッドのように呼び出すことができる機能のことです。
下記のように、モデル内にscopeを定義することで使用することができます。
“`hoge_hoge.rb
class HogeHoge < ApplicationRecord scope :active, -> { where(deleted: false) }
scope :by_account, -> lambda{|account_id|where(account_id: account_id)}
end
“`“`rb
# 使用例
HogeHoge.activeHogeHoge.by_account(params[:account_id])
HogeHoge.by_account(params[:account_id]).active
“`## 何が便利なのか?
・コードが短くなる。・適切なscope名をつけることで、直感的に読みやすいコードになる。
・何度も同じようなクエリを使いまわしている場合、
scopeを使用していれば、
rails heroku上のDBをリセットする
# 結論
heroku上のDBをリセットするには、以下のコマンドを実行する。“`ターミナル.
heroku run rails db:migrate:reset DISABLE_DATABASE_ENVIRONMENT_CHECK=1
“`
—
# 環境
– rails 6.0.4.4
– ruby 2.6.5
– MySQL 5.6.51
– heroku## heroku runでDBリセットのコマンドを実行
heroku上のDBをリセットしようと以下のコマンドを実行した。“`ターミナル.
heroku run rails db:reset
“`
以下のエラーが発生。“`ターミナル.
ActiveRecord::ProtectedEnvironmentError: You are attempting to run a destructive action against your ‘production’ database.
If you are sure you want to continue, run the same command wi