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

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

MySQLへのつなぎ方

##データベースを作成する
“`
mysql -u root -p
“`
-u ユーザー名
-p パスワード認証

MySQLにログイン完了後、kakekomi(私が作成したいデータベース名)というデータベースを作成します

“`
mysql> CREATE DATABASE `kakekomi`;
“`

作成したデータベースを確認するには

“`
mysql>show databases;
“`

下記のような表示されます。

“`
mysql> show databases;
+——————–+
| Database |
+——————–+
| information_schema |
| easywms |
| kakekomi |
| mysql |
| performance_schema |
| sys |
+——————–+
6 rows in set (0.01

元記事を表示

【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】ancestryを使用し、データをセレクトボックスで表示する方法

#はじめに

前回、ancestryを用いて親-子のレコードを作成しました。

https://qiita.com/ysdiary/items/62e495da15d5f6e785c2

データ登録時にセレクトボックスで、地方(親)ごとに都道府県(子)を表示、選択できるようにしました。

出来上がりイメージ↓↓
スクリーンショット 2021-09-29 22.31.33.png
スクリーンショット 2021-09-29 22.28.44.png2重ハッシュについて!

今回はRubyの問題です!

これを解いて理解して行こうと思います!

下記が問題です!

配列の内部に、複数のユーザーの情報をハッシュとして持つ変数user_dataがあります!

“`php
user_data = [
{user: {profile: {name: ‘Saori’}}},
{user: {profile: {name: ‘Alisa’}}},
{user: {profile: {name: ‘Yuta’}}},
]
“`

user_dataを利用して、全てのユーザーの名前だけが出力されるようにRubyでコーディングする!

ただし、出力結果は次のようになるものとする!

“`php
Saori
Alisa
Yuta
“`

#①.解答

“`php
user_data.each do |u|
puts u[:user][:profile][:name]
end
“`

または!

“`php
user_data.each{ |u| puts u.dig(:user, :profile, :name) }
“`

上記の記述が答えとなり

元記事を表示

【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

元記事を表示

Bundle update *gems で何が起きる?

## はじめに

ここ数日になって、Ruby project に関わり始めた新米が 「“Bundle update ***“ すると実際に何が起きるんだ?」 という疑問について調べてまとめてみました。

> 間違ってるよ、とか、公式のここにちゃんと書いてあるよ、等あればやさしく教えて下さい m(_ _)m

## (そもそも) Bundle update *gems とは?

“bundle update rails“ の様に、指定した GEM をアップデートする際に使用します。
実際にはアップデートされるのは指定した GEM だけではなく以下の2点になります。

1. 指定した GEM (↑のケースでは “rails“)
2. 指定した GEM の 全ての依存 ([rails の場合 actioncable, railties, …](https://rubygems.org/gems/rails/versions/6.1.4.1) ) と、その子孫

https://bundler.io/man/bundle-update.1.html#UPDATING-A-LIS

元記事を表示

herokuでデプロイできなかった時の対処法

Railsで作成中のアプリをデプロイするためherokuを操作していたら、エラーが発生しました。
ターミナル上で git push heroku master を実行。

“`
git@heroku.com: Permission denied (publickey).
fatal: Could not read from remote repository.

Please make sure you have the correct access rights
and the repository exists.
“`

公開キー?に対してエラーが発生しているようです・・・多分。

いろいろ調べていたら、ここに辿り着きました。
https://devcenter.heroku.com/articles/keys

見てみると[キーを増やせばいいよ!]的な事が書かれている・・(元々公開キーは作成済みです)

一旦指示通りに $heroku keys:add  をターミナル上で入力。

その後、もう一度 git push heroku master を実行すると、エラーが解消され

元記事を表示

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

元記事を表示

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:/

元記事を表示

[Ruby] AtCoder過去問 C – Lower

##はじめに
AtCoder過去問のc問題をRubyで解いてみました。
よろしくお願いします。

問題はこちらから確認してください↓

https://atcoder.jp/contests/abc139/tasks/abc139_c

##C – Lower
まずは入力を受け取ります。
2行目は配列として受け取ります。

このあと繰り返し処理を行い、繰り返した回数をカウントしたいので変数cntを用意して0を代入します。
また、続けて移動できた回数を配列の中で記録していくので配列cnt_aryを用意しておきます。

“`ruby
n = gets.to_i
h = gets.split.map(&:to_i)
cnt = 0
cnt_ary = []
“`

timesメソッドを使ってn回繰り返します。ブロック変数を用意して配列の先頭から順番に処理をしていくようにします。

if文で指定した数字がその右隣以上の数字であれば移動できるのでcnt+1します。連続で移動できる限りはcnt+1し続けます。

移動できなくなったところでcnt_aryにcntを入れて、cntを0にリセットし

元記事を表示

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

元記事を表示

ログイン用のgem,deviseの導入について

# Deviseの導入の仕方

– Gemfileに以下を追記し、インストール

“`gemfile
gem ‘devise’
“`
“`zsh
$ bin/bundle install
“`

– deviseの初期設定と設定ファイルを以下コマンドにて作成

“`zsh
practice_app % bin/rails g devise:install
Running via Spring preloader in process 27150
create config/initializers/devise.rb
create config/locales/devise.en.yml
===============================================================================

Depending on your application’s configuration some manual setup may be required:

1. Ensure you have

元記事を表示

【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: ‘北海道地方’ },
{

元記事を表示

rbenvを利用してのrubyのインストールに失敗したときの対処 m1 mac macOS 11.6

#書いた理由
3日間くらいずっと詰まっていたのが解決したので、
同じ事象が起きている人に届けばと思い、以下に記載します。

#起こったこと

`rbenv install 3.0.2`

を実行したら以下のエラーメッセージでコケた

“`
BUILD FAILED (macOS 11.6 using ruby-build 20210925)

In spect or clean up the working tree at/var/folders/62/ptdcgtz16zz093mpzzwmj_8w0000gn/T/ruby-build.20210928220009.63146.rhDrPV
Results logged to /var/folders/62/ptdcgtz16zz093mpzzwmj_8w0000gn/T/ruby-build.20210928220009.63146.log
“`

#解決したこと
homebrewの再インストール

#参考にしたところ
Installation issues with Arm Mac (M1 Chip)
https://gi

元記事を表示

ハッシュの基礎!

今回はRubyの問題です!

これを解いて理解して行こうと思います!

下記が問題です!

“`php
puts hash.keys
puts hash.values
“`

上記のメソッドを実行した時に!

“`
one
two
three
1
2
3
“`

とターミナルに表示されるような変数hashを、作成するためのコードをシンボルを使って記述しましょう!

#①.解答

“`php
hash = { one: 1, two: 2, three: 3 }
“`

上記の記述が答えとなります!

では、これを詳しく解説します!

#②.解説

シンボルを使用したキーの記述方法は、キーの後にコロン:をつけて定義します!

下記の通りです!

“`php
hash = { キー: 値}
“`

ハッシュをシンボルで記述すると、コード上では文字列のように見えていますが、

内部的には数値として処理されます!

数値として扱われるので、処理速度が速くなる事と、文字列としての役割も果たします!

それによって、ハッシュのキーにはシンボルを用いることが多いです!

ハッ

元記事を表示

OTHERカテゴリの最新記事