Rails関連のことを調べてみた2021年10月01日

Rails関連のことを調べてみた2021年10月01日

#0.5 アプリ作成→GitHubへのPush

#はじめに
前回の[開発環境の準備](https://qiita.com/snow100/items/eabcee3d7aa7beeb0f98)に引き続き、
アプリ作成からGitHubへのPushの流れを記事にして行きたいと思います。

#目次
1.アプリ作成
2.リモートリポジトリ作成
3.リモートリポジトリへPush

#1.アプリ作成
“`
username:~/environment $ rails new snow-review
“`
rails new アプリ名でアプリケーションのひな形を作成する事ができます。

“`
username:~/environment $ cd snow-review
“`
3.リモートリポジトリへのPushの為にcdでアプリ上に移動しときます。

#2.リモートリポジトリの作成
– Your repositriesから[NEW]ボタンを押し、Create New Repositriesへ。
– Repository Nameを書き、その他お好みの設定をし、[Create New]ボタンで新規リポジトリ作成。
– 新しく作ったリポ

元記事を表示

[リファクタリング] ポートフォリオの検索機能 クラスメソッド

初めに

現役エンジニアの方からPFのフィードバックをいただきましたので、
リファクタリングを進めていきます。

実装している検索機能は以下の通りです。

![スクリーンショット 2021-10-01 10.08.40.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1633266/e6268f8f-0d96-3c8a-dd44-e7ce53cfadef.png)

元々のコード

“`ruby:models/post.rb
def self.search(search)
return Post.all unless search
Post.where(‘title LIKE(?)’, “%#{search}%”).or(Post.where(‘content LIKE(?)’, “%#{search}%”))
end
“`

修正後

“`ruby:models/post.rb
def self.search(search)
retu

元記事を表示

#0 開発環境の準備

#はじめに
これから学習の復習&マークダウン記法の学習の為に記事を投稿していきます。
誰かの助けれになれば幸いです。
今回はアプリ作成前の準備段階について記事にしていきたいと思います。

#目次
1.AWS Cloud9で新しくIDE(開発環境)を立ち上げる
2.AWS Cloud9での設定
3.GitHubとの連携方法

##1.AWS Cloud9で新しくIDE(開発環境)を立ち上げる
(1).Your environmentsにて[create environments]ボタンをクリック
(2).(Name),(Description)をそれぞれ記述し、[NEXT STEP]のボタンをクリック
(3).Configure settingsにてPlat form 「・Amazon Linux 2」を選択
(4).[NEXT STEP]からの[create environments]ボタンで作成

これでAWS Cloud9にて新しく開発環境を立ち上げる事ができました。
次は、AWS Cloud9での設定を行なっていきたいと思います。

##2.AWS Cloud9での設定
– P

元記事を表示

「SQLだけで済むので…」?先輩のコメントからany?とexists?の違いを学ぶ(Ruby,Rails)

先輩からちょいと指摘された行ったリファクタリングが、ちょいと深くておもしろかったのでメモ。

## 背景とやりたいこと
ゲームのコースのデータを管理するgameモデルがあるとします。
ゲームにはstage1, 2があり、各コースにはnormal, specialの2つの種類(kind)があります。

“`ruby:app/models/game.rb
# == Schema Information
#
# Table name: games
#
# id :bigint not null, primary key
# name :text not null
# stage :integer not null
# kind :integer default(“first_normal”), not null

class Game < ApplicationRecord exnum

元記事を表示

【Rails】deviseにおけるユーザー情報の編集・更新のやり方(パスワード不要)

この記事ではdeviseを用いたユーザー管理機能において、**パスワード不要**で
ユーザー情報を編集・更新する方法をアウトプットしていきます。

【前提】
・Rubyバージョン2.6.5
・Railsバージョン6.0.0
・gem ‘devise’によるユーザー管理機能を作成済み。
・ユーザーのマイページを作成済み。

【この記事の構成】
①ルーティングを設定
②registrations_controller.rbを作成
③registrations_controller.rbを編集
④user.rbを編集
⑤application_controller.rbを編集
⑥editビューを編集

#①ルーティングを設定する
まずは`registrations_controller.rb`を使えるようにルーティングを変更します。

“`routes.rb
Rails.application.routes.draw do

devise_for :users, controllers: {
registrations: “users/registrations”
}

en

元記事を表示

【Vue.js+Rails】herokuデプロイ時の「 Cannot find module ‘@vue/babel-plugin-jsx’」の対処

RailsにVue.js3を導入してjsxファイルを書いてherokuにデプロイしようとしたところ掲題のエラーが発生し対処に時間がかかったため、その備忘録です。
(railsとvue.jsを使ってPFを制作中の初学者ですので内容に不備があればコメントで指摘頂けると幸いです。)

#エラー発生の経緯
Vue.jsでjsxを使用するため公式ドキュメントにならって下記コマンドを入力。
https://github.com/vuejs/jsx-next

“`
npm install @vue/babel-plugin-jsx -D
“`
ローカル環境では問題なくjsxファイルが読み込まれたのでherokuにデプロイしようとした所

“`
ERROR in ./app/javascript/packs/application.js
Module build failed (from ./node_modules/babel-loader/lib/index.js):
Error: Cannot find module ‘@vue/babel-plugin-j

元記事を表示

userのカラムがありませんを解決~

自分用メモです!!
## 起きたこと
deviceで用意されたサインアップ機能を使用しサインアップを実行した際に
以下のエラー発生

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/880777/2281cfa3-5cc4-ad40-7993-430d1c8f45d1.png)

## 行ったこと
schema.rbのカラムを見てまずusernameがあるか確認する。

なかったので、

“`
rails g migration add_name_to_users
“`
を実行。この際ファイル名はなんでも問題はないが、
・テーブル名
・カラム名
を含ませるとなおよし

次にカラムを追加する

## カラムを複数追加する場合の書き方

“`
add_column :テーブル名, :カラム名, :データ型
“`
を追加したいカラム分行う

次に

“`
rails db:migrate
“`
を行うだけ

## 参考にした記事
https://freesworder.net/r

元記事を表示

Herokuデプロイ奮闘記2(後編)

[前編](https://qiita.com/tsutsumin_pro/items/db04a9be8764f3604627#第2話bug-segmentation-fault-at-0x0000000000000000-を回避する)より、Gem`sass-rails`のバージョンを5系列にすると
>[BUG] Segmentation fault at 0x0000000000000000
ruby 2.6.8p205 (2021-07-07 revision 67951) [x86_64-linux]

が発生しないことが分かったので、無理ゲーは度外視します。

# 今回の話の流れ
〜プロローグ〜 す べ て の は じ ま り
第1話 “[BUG] Segmentation fault at 0x0000000000000000” を除去する
第2話 “[BUG] Segmentation fault at 0x0000000000000000” を回避する
第3話 “NoMethodError: undefined method \`

元記事を表示

細かいつまずいたことをメモしておく(9月編)

# はじめに

新しい記事の試みとして、わからなくて詰まったけど、記事にするほどではない(or 記事が多くある)ものについてまとめてみることにしました。

ほぼ個人てきに将来確認できるようにまとめたものになります。
今後もやるかは分かりません。

# 問題

## 1. WSLでDockerを動かしたが、Railsコンテナがupしたときにmkdirでpermision deniedになる

rootユーザーでgit cloneをしてきたためにdocker-compose upで権限エラーになっていた。
Ubuntu 20.04を再インストールしてユーザーを作成した状態で、git cloneしたらうまくいった。

## 2. コンテナ内でgitコマンドをすると常に認証を求められる
コンテナ内で以下のコマンドをうつ

“`
$ config –local user.email [メールアドレス]
$ config –local user.name [ユーザー名]
“`

設定できているかの確認は以下で行える

“`
$ cat ./git/config
“`

## 3.WSL

元記事を表示

Railsで遷移元のURLを取得する

## はじめに
開発ですぐに忘れそうなことを、簡単に再度調べられるようにするための備忘録です。

## やりたいこと
元々いたページのパスをコントローラー側で受け取る。

具体例)
Blogのshow画面から、Contactのnew/createを呼び出して、
Blogのshow画面にリダイレクト。

## 方法

“`ruby
before_url = request.referer
“`
を用いる。

ちなみに、遷移後の現在のURLを取得したい場合は、

“`ruby
## pathの取得
current_url = request.path

## urlの取得
current_url = request.url
“`

のどちらかを用いる。
(pathの取得で良いのか、urlが必要なのかは、用途に応じて使い分ける。)

## 補足
request.refererを用いた時のrequest specでは、
HTTPヘッダを明記する必要があるため、

“`ruby

let(:headers) { { HTTP_REFERER: xxx_url } }

it “リクエス

元記事を表示

[Rails] Rspec基礎 factory_bot〜request spec

Rspecについて勉強したときのメモです。
今回はrequest specについて!
#request specとは?

リクエストスペックはコントローラのテストのこと。
リクエストに対するレスポンスを確認することをテストします。

# 実装
テストの基本の流れは、
①確認したいことを決める
②ダミーデータを作成する
③ダミーデータで①の確認したいことが起こるかどうかを確認する
です。

これをrequest specに当てはめると、
①Getなどのリクエストを送って200や正しいレスポンスが返ってくるかを確認したい
②実際にリクエストを送る
③200ステータス、レスポンスの確認
という感じです。

では流れが分かったのでコードベースでやっていきます。
今回テストするサンプルアプリは前回のmodel spec同様`User`が`title`と`content`カラムを持つ`Article`モデルを投稿できるシンプルなものです。

## factory_bot
factory_botでダミーデータを用意します。

“`ruby:Gemfile
gem ‘factory_bot_rail

元記事を表示

繰り返し処理アウトプット

繰り返し処理とは同じ処理を何度も繰り返す処理。繰り返し処理を行うメソッドはtimesメソッドとeachメソッドがある。

timesメソッドは指定した回数だけ同じ処理を繰り返してくれる。

処理の回数.times do
 繰り返したい処理
end

で使用できる。例えば
“`
3.times do
puts = “こんにちわ”
end
“`
とすると

こんにちは
こんにちは
こんにちは

と出力される。

変数を|変数|で定義でき||で囲まれた変数をブロック変数という。ブロック変数はメソッド内でしか使用できず0から始まるブロック変数である。
“`
3.times do |i|
puts “#{ i }回目”
end
“`
と記述すると

1回目
2回目
3回目

と出力される。

eachメソッドとは配列やハッシュの要素の回数だけ繰り返し処理を行いたいときにtimesメソッドよりもシンプルに記述ができるもの。

配列またはハッシュ.each do |変数|

で使用できる。例えば配列の場合
“`
animals = [“イヌ”,”サル”,キジ”]
anima

元記事を表示

Ruby on Rails タスクモデルを作成する

#タスクモデルのひな形を作成する
・モデル作成のための便利なジェネレータを使う

“`:ターミナル
#bin/rails g model [モデル名] [属性名:データ型 属性名:データ型 …] [オプション]
$ bin/rails g model Task name:srtring description:text
“`
コマンドを実行すると、モデルのクラスファイル、マイグレーションファイル、モデルの自動テストのファイルのひな形が自動作成される、

| 生成されるものの種類 | 本筋でのファイルパス | 用途 |
|:———–|————:|:————:|
| モデルクラスのソースコード | app/models/task.rb | Taskクラスの実装 |
| マイグレーションファイル | db/migrate/20210825131759_create_tass.rb | データベースにtasksテーブルを追加する |
| モデルの自動テスト | test/models/task_test.rb | Taskクラスについての自動テ

元記事を表示

Rails6にnamespaseを使ってdeviseを導入

AdminLTE3のテンプレートにdeviseを使って、ログイン認証をインストールする。
roleなどの設定は、別記事にて
# deviseの初期設定
## gemのインストール
“`:Gemfile
gem ‘devise’
“`
“`.sh
$ bundle install –path vendor/bundle
“`
## deviseの設定
今回は/admin配下に、deviseをインストール

“`.sh
rails g devise manage_user
rails g devise:views admin/manage_users
rails g devise:controllers admin/manage_user
“`

## コメントアウトを解除
必要な機能をコメントアウトします。

“`devise_create_manage_users.rb
# frozen_string_literal: true

class DeviseCreateManageUsers < ActiveRecord::Migration[6.0] def cha

元記事を表示

Ruby on Rails アプリケーションの準備

#アプリケーションのひな形を作成する

“`:ターミナル
$ rails new アプリケーション名 [オプション名]
“`
rails newコマンドをバージョンを指定せずに実行すると、最新バージョンであるRails6系で作成が行われるので、Rails5系に指定したい場合は

“`:ターミナル
$ rails _5.2.6_ new アプリケーション名
“`

のようにバージョンを指定する必要がある。

“`:ターミナル
$ cd アプリケーション名
“`

でディレクトリに移動したら、データベースを制作する

“`:ターミナル
$ bin/rails db:create
“`

データベースが作成できればサーバーを起動出来るようになるので、サーバーを起動してみる
(※サーバーの停止は[Ctrl]キーを押したまま[C]キーを押す。停止するまで動作し続ける。)

“`:ターミナル
$ bin/rails s
“`

サーバを起動したら、プラウザを立ち上げてhttps://localhost3000にアクセスする。プラウザ上にRailsのデフォルトページが表示されてい

元記事を表示

エラー:NoMethodError: undefined method `attendances=’ for

##環境
ruby 2.7.1
Rails 6.1.3.2
RSpec 3.10

##状況
Rspec実行時に下記のエラーで怒られた

“`
NoMethodError:
undefined method `article=’ for #
Did you mean? article=
article
article_id=
“`

“`spec/factories/users.rb
FactoryBot.define do
factory :user do
name { “testuser1” }
sequence(:email) { |n| “tester#{n}@example.com” }
password { “testpassword” }
end
end

“`

“`spec/factories/articles.rb
FactoryBot.define

元記事を表示

Rails4から組み込まれているTurbolinksについて

学習のアウトプットとして投稿しています。
何かご指摘がございましたらお願いいたします。

# Turbolinks
Turbolinksとは画面遷移を高速化できるJavaScriptライブラリ。
Railsで用いる場合はTurbolinksを拡張したgemと合わせて用いる。
Rails4から導入された。

Turbolinksはページにある全ての``タグを監視している。
HistoryAPIのPushStateがブラウザでサポートされている場合、TurbolinksはAjaxリクエストを生成する。
この場合リンクが通常の画面遷移ではなくなり**Ajaxリクエストとして上書きされる。**

## Turbolinksの仕組み
Ajaxリクエストによりwebページの一部のみを切り替えることができる。
そのため通常headタグ内で読み込まれるアセット(css,javascript,画像)などはキャッシュを見るため、リクエスト数を削減でききる。
結果、通常の画面遷移より高速で画面遷移が可能になる。
Ajaxリクエストのため本来URLは変化しないが、TurbolinksはPushStat

元記事を表示

Mysql2::Error::ConnectionError (Access denied for user ‘ユーザー名’@‘ホスト名’ (using password: YES)):の対処法

#問題

直訳ですがRails s でサーバーを起動したが、Mysql のアクセスに拒否されたと言うことでエラーが出てしまいました。

#解決策

config/database.yml のパスワードを修正する必要があるようです。
password を Mysql のパスワードと同じにします。

“`config/database.yml
default: &default
adapter: mysql2
encoding: utf8mb4
pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
username: 任意のユーザー名
password: 任意のパスワード
socket: /tmp/mysql.sock
“`

この password を Mysql のパスワードと同じにします。

尚、Mysql のパスワードはMysql に接続した後、以下の方法で設定、変更できます。

“`
mysql> set password for ユーザー名@ホスト名=password(‘設定したいパスワード’)

元記事を表示

ascとdescについて

#ascの意味は?
***ascの意味は昇順です。***
1,2,3のように小さい数からからだんだん大きくなっていくものです。
idなら小さい順にデータが並んでいきます。

#descの意味は?
***descの意味は降順の意味です。***
3,2,1のように大きい数からだんだん小さくなっていきます。
idなら大きい順に並びます。

#どちらかがどういう意味 なのか迷った時
プログラミングは暗記ではありませんが、
この2つの意味はすぐにわかるようにした方がいいと思います。

⚫︎覚え方
下の参考資料を引用します。

・asc
aから始まる。abcdで昇順

・desc
dから「始まるdcbaで降順

みたいに考えると理解しやすいかと思います。

#どういうときに使う?
例えばこのような場面で使えるともいます。

“`
@student = Student.order(number: :asc) #例えば出席番号順だと1から最後まで並び替えられます。

@staff = Staff.order(updated_at: :desc) #これはスタッフのデータの更新した順番になります。

元記事を表示

【Rails】homesコントローラーでビューのみ使用する場合(コントローラー記述なし/アクションのみ用意)

#はじめに
コントローラーの処理は不要で、ビューのみ表示したい場合(主にトップページ)の簡潔な記述を残します。

#やったこと

“`ruby:app/controllers/homes_controller.rb
def top
end
“`

いつもならこう書いていましたが、

“`ruby:app/controllers/homes_controller.rb
def top: end
“`

わずかにですが、一行で書けるようになります。

元記事を表示

OTHERカテゴリの最新記事