Ruby関連のことを調べてみた2022年05月21日

Ruby関連のことを調べてみた2022年05月21日

【Rails】find_or_create_byでバリデーションをskipさせたい

# 結論

– saveに `validate: false`を渡す

“`ruby
Model.find_or_create_by(name: “テスト”) do |m|
m.name = “テスト”
m.published_at = Time.zone.today – 1 # バリデーション対象のコード
m.save(validate: false) #=> バリデーションをskipさせる
end
“`

# 背景

**目的**
作成日よりも遅い日付のテストデータを作成したい

**現状**
「作成日よりも遅い日付は登録できない」というバリデーションを設定しているため、保存できない

**対応策**
テストデータを作成するときのみ、バリデーションをskipさせたい

# 改善前

`find_or_create_by`でテストデータを作成していたが、バリデーション設定後、エラーするようになった。

“`ruby
# エラーになるコード
Model.find_or_create_by(name: “テスト”) do |m|
m.name = “テスト”

元記事を表示

Ruby メソッド色々

# getsメソッド
キーボード入力された値を取得するメソッドです
“`
puts “キーボードから何か入力してみましょう”
get_key = gets
puts “入力された内容は#{get_key}”
“`
“`
キーボードから何か入力してみましょう
“`
入力待ちの状態になります。
ここに
“`
キーボードから何か入力してみましょう
hello
入力された内容はhello
“`
helloと入力する打ち込んだ内容が表示されます。
変数展開をすることで何を打ち込まれもいいようにしておくことも大事

# while
繰り返し処理を行いたいときに使います。指定した条件式が真(true)の間、繰り返し実行されます。while doの文法で記述を行います。
“`
dice = 0 変数diceに0を代入、初期値を設定

while dice != 6 do サイコロの目が6ではない間、diceの初期値は0なので条件を満たす。以降はdiceに代入される数によって結果が異なる
dice = rand(1..6) 1~6の数字がランダムに出力される
puts dic

元記事を表示

Ruby 変数と定数

# 変数
変数は、文字列などのオブジェクトを作成したときに、そのオブジェクトにつける名札です。
変数名は小文字で始まるルールがあります。また、数字を使うことはできません。

“`
program = “プログラミング学習”
puts program
“`
programに文字列”プログラミング学習”を代入した時、programをputsすると
“`
プログラミング学習
“`
という結果が表示されます。
この場合の「=」は、数学での等しいという意味ではなく、「右のオブジェクトを左の変数に代入する」という意味です。

変数の特徴として、変数は値を書き換えることができます。
“`
program = “プログラミング学習”
puts program

program = “プログラマー”
puts program
“`
としたとき、
“`
プログラミング学習
プログラマー
“`
という結果が表示されます。
4行目で変数programに再度値を代入したため、5行目の結果はそれに代わっています。

# 定数
先ほどの変数とは異なり、あらかじめ変更しないことが保証された数値やデータ

元記事を表示

Ruby メモ

タイトル通りです。ポートフォリオの制作はRuby on Railsで行ったため、Railsのコマンドについては記憶に新しいのですが、Rubyの学習から時間が空いてしまったため、備忘録として残します。

# Rubyコマンドメモ
・pwd:現在の作業ディレクトリを確認する

・mkdir フォルダ名:フォルダを作成する

・ls:作成したフォルダ・ファイルを一覧で表示する

・cd フォルダ名:指定したフォルダに移動する

・touch ファイル名:ファイルを作成する

・ruby 実行するプログラムファイル名:プログラムファイルを実行する

# コードを記述する
“`
puts “hello,world!!”
“`
ファイルにこのコード入力し、rubyコマンドを実行すると、hello,world!!が出力されます。
putsは、「受け取った値を文字列として出力」する働きです。
このように何らかの処理をさせる命令を、Rubyでは「メソッド(関数)」と呼びます。
また、その後ろに続く記述(ここでは’hello, world!’)を「引数(ひきすう)」と呼びます。引数では、メソッドに渡す

元記事を表示

Rails 7.xをHerokuにデプロイする

まずHerokuにログインする。アカウントを持ってない方は作成してください。
“`bash:ログイン
$ heroku login
“`
次にHeroku上にアプリを作成する。
“`bash:アプリ作成
$ heroku create -a “アプリ名”
“`
ただしアプリ名には命名規約があるので注意。
アルファベットの小文字・数字・ハイフンのみを含み、先頭はアルファベット、末尾はアルファベットか数字である必要がある。

“`bash:リモートリポジトリの指定
$ heroku git:remote -a “アプリ名”
“`

`Gemfile`の以下の行
“`ruby:Gemfile
gem ‘sqlite3’
“`
を消して、以下のグループ
“`ruby:group :development, :test
group :development, :test do

gem “sqlite3”
end
“`
の中に記述する。

同ファイル内に次の行を追加する。
“`ruby:Gemfile
group :production do
gem “pg”

元記事を表示

Ruby技術者認定試験silver受験きろく

# はじめに
Ruby技術者認定試験、silverを受けてきましたのでログ残しがてら投稿してみる。

きっかけは、できればプログラミング言語は複数使えたほうがいいよね~と人から言われてしまったので受験勉強を始めてみました。

ひと昔前はひとつのプログラミング言語を極めろと言われることが多かったような気がしたが、時代の流れなのか複数のプログラミング言語を求められることが多いようです。
(それとも自分だけか…?)

# 試験概要
Siver版 と Gold版があります。
Siver版はRubyの基本的な文法やメソッドを、Gold版はSiver版をさらに発展した内容になっています。今ところ、試験でのversionは2.1になってます。(2022年5月現在)

正式名称は
・Ruby Association Certified Ruby Programmer Silver version 2.1
・Ruby Association Certified Ruby Programmer Gold version 2.1

試験申し込みは、Pythonと同じくオデッセイからと思ったら
別会社のプ

元記事を表示

コードの自動整形ツール【Rubocop】を導入方法と使い方( Rails gem)

今回はコードの自動整形ツール【Rubocop】を導入方法・使い方をご紹介いたします。

## Rubocop(ルボコップ)とは?

Rubyの静的コード解析ツールです。「インデントが揃っていない」「余分な改行・スペースがある」などの指摘をRubyStyleGuideに基づいて行ってくれます。

Rubocopを導入することにより、コードの品質を担保できるようになります。

####  ● Rubocop の公式GitHub
https://github.com/rubocop/rubocop

## Rubocopの導入方法

①Gemfile の group :development do〜end内に記述

“`
group :development do

gem ‘rubocop’, require: false #こちらの1行を記述

end
“`

※最後尾に記述するのではないので、記述場所にご注意ください。

②ターミナルで以下を1つずつ実行

・Gemfile.lockを更新する
“`
bundle install
“`

・rubocopの設定を記述す

元記事を表示

VScodeからAtCoderのコンテスト問題を自動提出する

# はじめに
## できること
ここでは、以下のことができるようになります。(提出のプログラムはRubyで書きます)
– VScodeでコードを書いて、WSL(Linux)で実行
– VScodeのターミナルでサンプルデータでの動作確認
– VScodeのターミナルから自動提出

## 環境など
VScodeのインストールが前提です。
Windows10

# 手順
## WSL2のインストール
### PowerShellを管理者権限で開く
まず、Windowsのスタートの横にある検索で「PoweShell」を検索します。PowerShellが見つかったら、管理者権限で開いてください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2549439/91e845c2-45b0-0d54-10e3-f54acc5e3822.png)

### インストールコマンドを実行
次のコマンドを実行し、PCを再起動します。
“`shell
$ wsl –install
“`

### Ubun

元記事を表示

AWC EC2にWebシステムのデプロイ(下書き

つらつらと仕事中の備忘録
書きながらやっているので後日清書予定
AWSEC2にDocker+Railsの環境を構築してテストしようという作業

EC2インスタンス
・最低コスト
・とにかく動け
・Ubuntu

流れ

・手始めにEC2にセキュリティグループの設定を修正
 →テラターム接続は失敗したので暫定でGit Bushで接続。上記設定に関係あるか不明

・下記URLを参考にDockerとDockerComposeをaptとcurlを使ってインストール。

・sshの設定、key登録をgithubと”EC2インスタンス”にする(Ec2側にssh-addをかまさないとダメ。また、かますときはevalでプロセス明確する)

・gitcloneをする(解決)
 →sudo chown ユーザー名:ユーザー名 /var/www # 現ユーザーに権限付与 をしてなかった

・dockerをデプロイ(権限がなくて混乱)
 →https://virment.com/how-to-fix-couldnt-connect-to-docker-daemon/
 ここを参考に修正中
・build

元記事を表示

GemのNokogiriを使おうとしたら`version `GLIBC_2.29′ not found`エラーが出たときのことを調べた

## はじめに

以前、M1 Mac で Rails のセットアップをしているときに、

“`console
ERROR: It looks like you’re trying to use Nokogiri as a precompiled native gem on a system with glibc < 2.17: /lib/aarch64-linux-gnu/libm.so.6: version `GLIBC_2.29' not found (required by /usr/local/bundle/gems/nokogiri-1.13.6-aarch64-linux/lib/nokogiri/2.7/nokogiri.so) - /usr/local/bundle/gems/nokogiri-1.13.6-aarch64-linux/lib/nokogiri/2.7/nokogiri.so If that's the case, then please install Nokogiri via the `ruby` platform gem:

元記事を表示

RuboCopの導入方法メモ

RuboCop導入方法の備忘録です。

## 環境
macOS Monterey 12.3.1
ruby 3.1.2
rails 6.1.6

## インストール方法
Gemfileに必要なgemを追記する。
“`ruby:Gemfile
group :development do
gem ‘rubocop’, ‘~> 1.29’, require: false
gem ‘rubocop-performance’, require: false # 拡張機能
gem ‘rubocop-rails’, require: false # 拡張機能
gem ‘rubocop-rspec’, require: false # 拡張機能
end
“`
bundle installする。

“`sh:ターミナル
bundle install
“`

## 初期設定など
“`sh:ターミナル
bundle exec rubocop –auto-gen-config
“`
を実行すると`.rubocop.yml`, `.rubocop_todo.yml`が生成される。

元記事を表示

Railsで使用するコマンド

Railsで使用する基本的なコマンドについてまとめた記事です。

# プロジェクトの作成
“`:#プロジェクトの作成
rails new アプリケーション名 [オプション]
“`
“`:#オプション(一部)
# ファイルが存在する場合に上書き
–fまたは -–force

# データベースの種類(MySQL)
–d=mysql または -–database=mysql

# データベースの種類(PostgreSQL)
–d=postgresql または –database=postgresql

# V(ビュー)を生成しない
–api
“`
# Controllerの作成・削除
“`:#コントローラの作成
rails g controller コントローラー名 メソッド名1 メソッド名2 …
“`

“`:#コントローラの削除
rails d controller コントローラー名
“`
# Modelの作成・削除
“`:#モデルの作成
rails g model モデル名 カラム名1:カラムの型 カラム名2:カラムの型 …
“`
“`:#モデ

元記事を表示

Rails6でシステムスペック(capybara 導入)

## はじめに
先日、Rails6 でシステムスペックのテスト実行の際に Capybara が導入されておらずエラーが発生してしまいました。
Rails6 では Capybara はデフォルトでインストールされているはずなのに何故かエラーとなってしまう…。
その原因としていくつか勘違いしていた事がありましたので、まとめたいと思います。

### 開発環境
– Rails 6.1.4
– ruby 2.7.3
– rspec-rails 5.1.2

## Capybara の設定
spec_hepler.rb に capybara の設定を追加します
“`spec_hepler.rb
# See http://rubydoc.info/gems/rspec-core/RSpec/Core/Configuration

require ‘capybara/rspec’

RSpec.configure do |config|
config.before(:each, type: :system) do
driven_by :rack_test
end

co

元記事を表示

3カ月の学習を終えて

現職からの転職を考えて、プログラミングの学習を始めてから約3カ月。
企業提出用のポートフォリオがひと段落ついたため、こちらのQiitaのほうに今までの学習の振り返りや発生したエラーの解決方法を備忘録として投稿していこうと思います。
主に使用した言語はHTML、CSS,Ruby,Railsです。

# HTML,CSS
簡単に言えばWEBサイトを構成するための言語です。
HTMLでWEBサイトの大まかな構造を作り、CSSで外観を整えるといったイメージ。
# Ruby
WEBアプリケーションを作るために必要な言語
#### HTMLとの違い
HTMLは「WEBサイト」を作るための言語、対してRubyは「WEBアプリケーション」を作るための言語です。
「WEBサイト」は訪問者が受動的に閲覧するものです。つまり、静的なページのことです。

一方「WEBアプリケーション」は訪問者に能動的な動作を求める者です。閲覧だけでなく、情報を入力してもらい、その内容によって表示が変わります。
具体的には、ユーザー登録機能や検索機能などです。入力した内容によってマイページの表示は変化するし、検索結果も当然変わ

元記事を表示

Railsのマイグレーション関連のコマンド(備忘録)

# はじめに
Rialsのマイグレーション関連のコマンドを備忘録としてまとめました。

# migrationとは?

【Railsガイド参照】

マイグレーションは、データベーススキーマの継続的な変更(英語)を、統一的かつ簡単に行なうための便利な手法です。マイグレーションではRubyのDSLが使われているので、生のSQLを作成する必要がなく、スキーマおよびスキーマ変更がデータベースに依存しなくなります。

個別のマイグレーションは、データベースの新しい「バージョン」とみなせます。スキーマは空の状態から始まり、マイグレーションによる変更が加わるたびにテーブル、カラム、エントリが追加または削除されます。Active Recordはマイグレーションの時系列に沿ってスキーマを更新する方法を知っているので、履歴のどの時点からでも最新バージョンのスキーマに更新できます。Active Recordはdb/schema.rbファイルを更新し、データベースの最新の構造と一致するようにします。

マイグレーション機能があることによ

元記事を表示

Railsアプリケーション非同期通信設定(Ajax)

この記事は学習した内容をアウトプットし、更に理解を深めるための記録用投稿になります。
投稿している内容と同じ箇所で躓いている方に少しでもお力添えできれば幸いです。

非同期通信の実装をするに至った経緯はポートフォリオを制作後にメンターの方にレビューをいただきました。その際に今後のチャレンジという項目でご指摘をいただいたのでチャレンジしてみました!
わかりやすく説明をしていただいてる方にはほんと感謝です、、、

## 非同期通信とは
##### ・WEBブラウザからWEBサーバー間のリクエストしてレスポンスが行われるまでに次の処理をする事が可能。
##### ・リクエスト後画面遷移せずにデータの更新が行われる(いいね数が増えるなど)


## 前提条件
・gem ‘jquery-rails’は導入済

・いいね機能実装済み

・料理の内容を投稿するアプリになるのでユーザー(user)、料理(dish)とします

## 手順

① Ajax処理をするための記述を追加する(remote :true)

② ビューでのいいねボタンを部分テンプレートにするためにファイルを作成(_fa

元記事を表示

Basic認証をRailsアプリに導入する方法

## authenticate_or_request_with_http_basicメソッド
ブロック内部でusernameとpasswordを設定し、任意の値を決めて実装します。
下記の例では、usernameに「test」、passwordに「1111」を指定しています。
“`ruby
authenticate_or_request_with_http_basic do |username, password|
username == ‘test’ && password == ‘1111’
end
“`
## Basic認証をRailsアプリに導入する
メソッドをコントローラーのprivateに定義し、before_actionで呼び出します。
“`ruby
before_action :basic_auth

private
def basic_auth
authenticate_or_request_with_http_basic do |username, password|
username == ‘test’ && password == ’11

元記事を表示

事前に定義されたリストの順番にそって、配列の要素を並べ替える簡単な方法

例えばいくつかの都道府県を、事前に定義された順番に並べ替えたい時、

“`ruby
ISO_PREFECTURE_LIST = [“北海道”, “青森県”,…,”千葉県”,”東京都”,”神奈川県”,…,”鹿児島県”,”沖縄県”]
prefs = [“東京都”, “沖縄県”, “青森県”]

# prefsをISOの都道府県リスト順に並べ替えたい

p ISO_PREFECTURE_LIST & prefs
#=> [“青森県, “東京都”, “沖縄県”]
“`

「&」は両集合の共通要素を返してくれる積演算だが(intersectionのエイリアス)、結果の集合の順番が左辺のものになるので、こういうこともできる。

ただし
「重複する要素は取り除かれます。」
なので用途に注意。

https://docs.ruby-lang.org/ja/latest/method/Array/i/=26.html

元記事を表示

【Rails】redirect_toでリダイレクト先に値を引き継ぐ

# コード
リダイレクト先に値を渡すには`flash`を使うと良いです。
“`ruby:controller
flash[:user_params] = user_params
redirect_to action: :new
“`

# 詳細
今回はJSを使うことなくサーバー側でバリデーションチェックから、
個々のinputへのエラー表示まで行う仕様だったので、
`create`でバリデーションチェックをして、
引っ掛かったら`new`へ入力済みの値とエラーのカラムを渡す必要がありました。
“`ruby:controller
def new
@user = flash.present? ? User.new(flash[:user_params]) : User.new
end

def create
@user = User.new(user_params)
if @user.invalid?
flash[:user_params] = user_params
redirect_to action: :new
end
# 以下バリデーション

元記事を表示

【Rails】バリデーションに引っ掛かったカラムを取得する

# コード
“`ruby
@user.errors.attribute_names
=> [“name”, “email”, “tel”]
“`
`errors.attrbute_names`で引っ掛かったカラムの配列を取得できます。

# 詳細
今回はJSを使わずにバリデーションに引っ掛かった項目のinputの下に、
エラーメッセージを表示しなければいけなかったので、
どこのメッセージを表示するかの判定に引っ掛かったカラム名が欲しくて調べました。
“`ruby:controller
def create
@user = User.new(user_params)
return redirect_to action: :new, errors: @user.errors.attribute_names if @user.valid?
# 以下バリデーションが通った時の処理
end
“`
これだと`errors`の内容がクエリに入ってしまうし、
入力済みの内容も保持したかったので、
実際には`flash`で渡しました。
“`ruby:controller
def n

元記事を表示

OTHERカテゴリの最新記事