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

Rails関連のことを調べてみた2021年09月30日
目次

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
“`

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

元記事を表示

【Rails】form_with下で画像選択フォームとlabel要素を関連付ける方法

form_with下で、画像選択フォームとlabel要素を関連付ける方法を学習したので、
アウトプットしていきます。

#①前置き
通常、画像選択フォームを``のような形で実装すると、
「ファイルを選択ー選択されていません」という味気のないデフォルトボタンが表示されます。
これを「画像を選択してね!」のような自分が好きな文言に変えたい時に役立つのが
**label要素**です。

**<label要素とは?>**
フォームの中で、フォームの項目名とフォームの入力要素(画像選択フォーム、プルダウン、チェックボックスなど)を関連付けるための要素です。

label要素の役割の1つは、label要素がクリックされたときに、子要素もクリックされたことにしてくれることです。この仕組みを使うと、見えないはずのファイル選択ボタンをクリックしたかのように動作させることができます。

#②【通常】画像選択フォームとlabel要素の関連付け

“`app/views/messages/message.html.erb

#はじめに
リーダブルコードやリファクタリングについて日々勉強をしています。
each文の簡潔な書き方に出会ったので、残しておきます。

#やったこと

いつもであれば、こう記述していました。

“`ruby
temps = [1,2,3,4,5,6,7]
temps.each do |temp|
p(puts) temp #実行する処理
end
“`

これを書き換えると、

“`ruby
temps.each {|temp| p(puts) temp }
“`

#終わりに

一文で書ける為、コードがスッキリします。

元記事を表示

【Rails】該当の処理を、条件下でのみ実行する(自分以外のupdate/destroy実行を制限する)

#やること
ビューでif文を用いて、ユーザーによってリンクを非表示にしたり、
URL直撃ち防止を定義したりしていましたが、
確実にupdate/destroyをユーザーによって制限する記述があったので残します。

###条件下で処理を実行する

“`ruby
temp = 1
p temp if temp > 0 #tempが0以上の場合に”p temp”の処理を実行
“`

###update/destroyを投稿者のみが行えるようにする

“`ruby
if @post.update(post_params) && @post.user_id == current_user.id
“`

“`ruby
@post.destroy if @post.user_id == current_user.id
“`

どちらもログインユーザーと投稿のユーザーが一致する場合のみ
処理を継続できるように記載。

destroyはバリデーションがないため、if文の記述となる。

URL直撃ち防止や、アクセスリンクの非表示よりも簡潔で確実な方法。

#終わりに
色々な記述の仕方があり

元記事を表示

【Rails】link_toでhtmlタグを使う

はじめに

ポートフォリオ作成中にhtmlタグをlink_toに入れる方法がわからなかった為、備忘録として記録。

使い方

link_toの記載は変更前の記述で書いてましたが、このままだとクラス追加しか出来なかったので変更後のブロック構造に変更。

**変更前**

“`
<%= link_to "文字列", パス %>
“`

**変更後**

“`
<%= link_to パス do %>
htmlタグ、文字列
<% end %>
“`

以下、記述例

“`
<%= link_to new_portfolio_path do %>

Add
<% end %>
“`

元記事を表示

Railsのresoucesのオプションに与える引数の話

# Rubyの基礎が身に付いていない状態でRailsスタートしてしまった人向けの話

以下の書き方、いずれでも「rails routes」した結果は同じです
なんで?と思った方はこの記事の対象読者です。

“`rb
resources :lists, only: [“new”, “create”]

resources :lists, only: [:new, :create]

resources :lists, only: %(new create)
#=>”new create”

resources :lists, only: %i(new create)
#=> [:new, :create]

resources :lists, only: %I(new create)
#=> [:new, :create]

resources :lists, only: %q(new create)
#=>”new create”

resources :lists, only: %Q(new create)
#=>”new create”

resources :lists, o

元記事を表示

Rails6(ActiveRecord)で今週(月曜〜日曜)の日付を指定してデータを取得する

# はじめに
今週の月曜日から日曜日の日付を指定し、データを取得する方法を実装しました。

読書を習慣化を促すアプリにて、今週の読書状況を表すためです。
調べたことをもとに自分で実装してみたので投稿します。

# 環境
– Rails 6.1.3
– Ruby 2.7.2

# 実装

`Date#prev_occurring`と`Date#next_occurring`を使用して実装します。

**<手順>**
1. 今日の曜日を取得
2. 今週の月曜日と日曜日の日付を取得し、変数`from` `to`に代入
3. 今日の曜日によって条件分岐
4. データを取得

## 1. 今日の曜日を取得

“`ruby:task.rb
today = Date.today
day_of_the_week = today.wday
“`
RubyのTimeクラスの`wday`メソッドを利用してます。
曜日を0を日曜日とし、6(土曜日)までの整数を返してくれます。
(日:0, 月:1, 火:2, 水:3, 木:4, 金:5, 土:6)

## 2. 今週の月曜日と日曜日の日付を取得し、変数`f

元記事を表示

妄想的DHH理解2:概念的距離の圧縮

**Caution**
この記事はDHHファンの妄想によるシナリオが多分に含まれます。 というかほとんどです。
成り立ちや考え方が間違ってることも当然あるように思うので話半分で読んでください。

## これは一体
前回かいた[妄想的DHH理解](https://qiita.com/nazomikan/items/eab3352dbd5e2b79724b)のエピソード0的な話です。
妄想的DHH理解では、DHHがどういう過程で今のRailsフロントエンドに達したかの話が主題でしたが、そこでは「なぜ〜を選ばなかったか」は説明されていませんでした。

彼はモノリシックを愛したり、トレンドと真逆のアプローチでフロントエンドに新しいレールを引き始めたりするので、単に彼が天邪鬼であったり車輪の再発明大好きおじさんとして捉えられがちですが、実は太い太い一本筋をもった技術選定をし続けてるってことが広まればいいなと思ってるファンの記事です。

## 前提知識

前回とほぼ同じです。

### DHH
Railsの生みの親、Rubyist。 [実はカーレーサーでもあります](https://tech.a-

元記事を表示

herokuデプロイ(自分用メモ)

githubにコードを載せて、herokuでデプロイする方法

git init
git add -A
git commit -m "コメント"

githubでリポジトリを作る。
git remote add origin (githubに乗ってるurlを貼る)
git push origin master

heroku login
heroku create
git push heroku master

アプリ名を変える
heroku rename (アプリ名)

元記事を表示

Rails6でupsert_allしたら「ActiveRecord::NotNullViolation Mysql2::Error: Field ‘created_at doesn’t have a default value」と怒られた

# 記事について
今年の4月からwebエンジニアとして働いています。まだエンジニア歴1年未満のペーペーです。
月に1~2回、学んだことをアウトプットするために記事を書いていこうと思います。記事内容は実務使う技術だったり、技術書や動画で学んだことだったり、適当に興味あることを書いていきます。

# 今回の背景
今回はRails6から導入されたupsert_allを使ってみたら少し沼にハマったので、その時調べたことを記事に書いていきます。

# 目次
1. bulk insertについて
2. ハマった内容
3. 原因とtryしたこと
4. 最後に

## 1. bulk insertについて
bulk insertとは複数件のレコードを一括で保存したり、更新したりすること。
railsではrails6から「imsert_all」「upsert_all」というメソッドが標準で用意されたらしい。

【参考】
[Railsドキュメント – insert_all](https://railsdoc.com/page/insert_all)
[github – rails](https:/

元記事を表示

Railsのタイムゾーン

学習のアウトプットとして投稿しています。
何かご指摘がございましたらお願いいたします。
# Railsのタイムゾーンについて
## デフォルト
railsはデフォルトでは全ての時間がUTCで扱われる。
デフォルトのままフォームに時刻を入力すると、その時刻がUTCの時刻としてDBに登録される。
以下は、イベント①の開始時間を2021年9月29日10時00分とフォームで入力した時にDB保存された値。

“`
1|イベント①|2021-09-29 10:00:00|…
“`

## Railsの時間を日本時間に合わせる
日本で使うことを想定しているサービスの場合はRails内のタイムゾーンを日本時間に直す。
タイムゾーンを日本時間にするにはconfig/application内にconfig.time_zone = “Tokyo”を加える。

“`config/application.rb
module SampleApp
class Application < Rails::Aplication 略 config.time_zone = "Tokyo" e

元記事を表示

irbを終了させるには?

**結論**

“`
irb(main):001:0>exit
“`

もしくは、

“`
irb(main):001:0>quit
“`

をコマンドライン上で入力して、Enterキーを押すことで、終了させることができます。

**そもそもirbとは?**

> irb は Interactive Ruby の略です。 irb を使うと、Ruby の式を標準入力から簡単に入力・実行することができます。

Ruby 3.0.0 リファレンスマニュアルにはこう書いてありました。
数行のコードを実行するときは、わざわざファイルを作成して、ターミナルで実行しなくて済むので便利です。

ちなみに、irbは人と人とが会話をしている様子に似ていることから、対話型と呼ばれているそうです。

**最後に**

MacBookを使用しているので、Windowsでは操作が異なるかもしれません。
ご覧くださり、ありがとうございます。

元記事を表示

【Ruby on Rails】whereメソッドを使って投稿内容の絞り込み表示をしよう

今回は投稿内容を絞り込みで表示してみましょう

##目次
**1.前提**
**2.whereメソッドについて**
**3.コントローラー記述**
**4.ビュー記述**
**5.ルート記述**

###1.前提
今回は既に投稿と一覧ができる状態であることとします。
例としては下記のような状態であるとします。

“`ruby:burgers_controller.rb
class BurgersController < ApplicationController def index @burgers = Burger.all end def new @burger = Burger.new end def create burger = Burger.new(burger_params) if burger.save redirect_to :action => “index”
else
red

元記事を表示

バリデーションについて

* オブジェクトがデータベースに保存される前に、データが正しいかどうか検証する仕組み

“`rb:モデル
validates :カラム名(シンボル), 検証ルール(シンボル)
“`

# 空データを登録できないようにする
* presence

“`rb:モデル
class Post < ApplicationRecord validates :content, {presence: true} ``` # 文字数の制限をつける * length ```rb:モデル class Post < ApplicationRecord validates :content, {presence: true, length: {maximum: 140}} ``` # 一意性(重複するデータを登録できないようにする) * uniqueness ```rb:モデル validates :content, uniqueness: true ```

元記事を表示

【Rails】to_jsonを使わずに1クエリでいい感じにデータを返したい

## include

to_jsonには便利なオプションが沢山ある.特にinclude.多対多のデータをモデルの要素に配列として返してくれて便利.

https://qiita.com/eggc/items/29a3c9a41d77227fb10a

例えば,fooとbarそれぞれのモデルが多対多の関係にあるとして

“`rb
JSON.parse(Foo.queries.to_json(include: :bars))
“`

とすれば,

“`rb
[{id: 1, bars: [{id: 1}, {id: 2}]}]
“`

ただ,一対多なら+1, 多対多のテーブルなら中間テーブルを足して+2多くクエリーが発行される.まとめて取得したいテーブルが増えると線形に増えていってしまう.

## 1クエリーで同じ様に返すには?

なんか他にいいメソッドないかな…と思ったがない.ので書いてみる.モデルは上と同じ.DBはMYSQL.

“`foo.rb
require ‘hashie’
require “securerandom”

# 色々

scope hoge, ->

元記事を表示

【Rails】ancestryを用いてエリアの登録(多階層、親-子)を行う

#はじめに

ancestryを用いてエリアの登録(親、子)を行ったので、まとめておきます。

#手順

1. Gemfileに記述する

“`ruby:Gemfile
gem ‘ancestry’
“`
“`ruby:ターミナル
$ bundle install
“`

2.モデルの作成

“`ruby:ターミナル
rails g model Region name:string ancestry:string
“`

作成したマイグレーションファイルを開き、nameにnull: falseを指定する

“`ruby:ターミナル
rails db:migrate
“`

3.モデルの記述

“`ruby:region.rb
has_ancestry
“`

4.seedの作成

“`ruby:db/seeds.rb
#親のレコードを作成
hokkaido, tohoku, kanto, chubu, kinki, chugoku, shikoku, kyushu = Region.create(
[
{ name: ‘北海道地方’ },
{

元記事を表示

MySQLで、カラムの型を変更する

# はじめに
開発環境はrailsのデータベースを使用しており、本番環境では「Amazon RDS」の「MySQL」を使用していた。
そこでカラムの型を変更する必要があったので、下記のコードを実行したら問題なく変更できた。

# 結論
MySQLに接続し、以下のコードを実行してください

“`
ALTER TABLE [テーブル名] MODIFY [カラム名] [変更したい型];
“`

#経緯
開発環境のRailsで緯度、経度を登録しているテーブルがあり、それぞれのカラムを`float`で登録していました。

しかし、本番環境の「Amazon RDS」にそのまま移行すると、登録していた数値が正しく表示されませんでした。

おかしいと思って調べてみると、`float`は単精度浮動小数点実数と言って有効桁数が7桁までとのこと。

一方で、`double`というデータ型であれば、倍精度浮動小数点実数と言って有効桁数が16桁まであるようです。

なので、対象のデータ型を`float`から`double`に変更すれば良さそうだと気づきました。

#実行

1.MySQLに接続し、データベー

元記事を表示

[Rails]renderメソッドとは?

##初めに
####なぜこの記事を書きたかったのか
最近やっとrenderで気づいたことがあったので言語化して記憶の定着のために書きたい!

####環境
・Macbook Air (Retina, 13-inch,2019)
・プロセッサ 1.6GHz デュアルコアIntel Core i5
・メモリ 8GB 2133 Mhz LPDDR3
・MacOS Big Sur バージョン 11.5.2

####記事の目次
**1)どんなことができるのか**
**2)どうやってつかうのか**
**3)オプション**
**4)自分が混乱していたこと**
**5)最後に**

##どんなことができるのか
####renderメソッドで指定したviewファイルへ移動もしくは配置することができる!
####renderメソッドはapp/viewsを起点としてパスを渡すと、渡したパスを出力してくれる!

####(例えば)
**1)このQiitaのページの上の緑色の部分を各viewファイルに一回一回コードを書くよりrenderを使えば、renderを使うことで一発で配置することができる!**
**2

元記事を表示

OTHERカテゴリの最新記事