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

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

【Ruby on Rails】本番環境でデータベースをリセットする方法

#対象

* 本番環境でのデータのリセットに悩まされている方

#目的

* 本番環境でデータをリセットして新たにデータをセットする準備をする

#実際の手順と実例
###1.前提

* Ruby on Railsを使ったアプリ開発
* AWSのEC2を使用してサーバー構築

###2.本番環境でのデータベースリセット

まずは開発環境(cloud9から)EC2へSSHでログインし、自分のアプリケーションのディレクトリに移動します。

““
$ ssh -i ~/.ssh/[キー名][ユーザー名]@[パブリックIPアドレス]
$ cd [アプリケーション名]
““
※ [ ] を入力する必要はありません。

下記のコマンドを打てばOKです。

““
RAILS_ENV=production DISABLE_DATABASE_ENVIRONMENT_CHECK=1 bundle exec rails db:drop
““

これだけでは、エラーが発生してしまいますので、忘れずにデータベースの内容を反映させます。

““
rails db:create RAILS_

元記事を表示

【Rails】エラーメッセージを日本語化する

本記事では、入力フォームが空のまま送信された場合に表示されるエラーメッセージを、
英語から日本語に変換する方法をアウトプットしていきます。

# 前提条件
・Rubyバージョン2.6.5
・Railsバージョン6.0.0
・エラーメッセージを表示したいページは作成済みとします。

# この記事の構成
①エラーメッセージのビュー作成
②部分テンプレートの呼び出し設定
③日本語の言語設定とGemの導入
④`devise.ja.yml`の作成
⑤`ja.yml`の作成
⑥バリデーションでさらに詳細なエラーメッセージを設定

#①エラーメッセージのビュー作成
まずはエラーメッセージを生成するビューを作ります。
どのモデルのバリデーションにも対応できるように、if文に`model.errors.any?`を記述しています。

“`app/views/layouts/_error_messages.html.erb
<% if model.errors.any? %>

    <% model.errors.full_

元記事を表示

Ruby 「nilの場合に○○を行わない」【イディオム】

## 改良前:if文を使って「nilの場合は行わない」
サンプルコードは、文字列長を求めるメソッドを作成しました。
こんなメソッドを普通には作ることは無いでしょうが、サンプルなので分かりやすさ重視です。

__サンプルコード__

“`rb:length.rb
def get_length(text)
if text # nil.sizeだとエラーになってしまうため回避。
text.size
end
end

puts get_length(‘abcde’) # > 5
puts get_length(‘あいうえおかきくけこ’) # > 10
puts get_length(nil) # > nil
“`

## 改良後:safe navigation operator(&.)を利用する
__safe navigation operator__は`オブジェクト&.メソッド`でメソッドを呼び出すと、「オブジェクトがnilの時nilを返す」という演算子です。
これを使って先ほどのコードを改良します。

“`rb:length.rb
def get_l

元記事を表示

Rubyのハッシュ関連のメソッドをまとめ

## keys ハッシュのキーを配列で返す

__サンプルコード__

“`rb:hash.rb
country_code = { japan: ‘JP’, australia: ‘AU’, canada: ‘CA’ }
puts “keys: #{country_code.keys}”
“`

__実行結果__

“`
keys: [:japan, :australia, :canada]
“`

## values ハッシュの値を配列で返す

__サンプルコード__

“`rb:hash.rb
country_code = { japan: ‘JP’, australia: ‘AU’, canada: ‘CA’ }
puts “values: #{country_code.values}”
“`

__実行結果__

“`
values: [“JP”, “AU”, “CA”]
“`

## has_key?, key?, include?, member?

__サンプルコード__

“`rb:hash.rb
country_code = { japan: ‘JP

元記事を表示

Railsチュートリアル 1.4.3 Push時のエラー解決方法

Railsチュートリアル第1章の1.4.3で、Githubへのpush時にエラーが出るようになっているので、
解決方法のメモとなります。

# エラー内容
チュートリアルの1.4.3で下記コマンドを実行するとエラーが発生する。

“`sh
$ git push -u origin master
remote: Support for password authentication was removed on August 13, 2021. Please use a personal access token instead.
remote: Please see https://github.blog/2020-12-15-token-authentication-requirements-for-git-operations/ for more information.
“`

調べてみるとGitHubが2021年8月13日にパスワード認証を廃止したことが原因のようです。
https://news.mynavi.jp/article/20201222-1604003/

Ra

元記事を表示

Node Sass does not yet support your current environment: OS X 64-bit with Unsupported runtime (93)

# Font Awesome 導入時のエラー

## 今回採用した導入手順
– 以下のパッケージをインストール

“`zsh
yarn add @fortawesome/fontawesome-free
“`

– app/javascript/packs/application.jsに追記

“`js
import ‘@fortawesome/fontawesome-free/js/all’;
“`

– app/javascript/stylesheets/application.scssに追記

“`scss
@import ‘~@fortawesome/fontawesome-free/scss/fontawesome’;
“`

ここまでしてrailsサーバ起動したらエラー、、、

## エラー文
“`zsh
Node Sass does not yet support your current environment: OS X 64-bit with Unsupported runtime (93)
“`

– 結論から言うと、nodeのバー

元記事を表示

railsアプリ作成の忘却録

##webアプリケーションの新規作成

“`
$rails new アプリ名(その後にオプションの指定)
“`

“`
$rails new アプリ名 –datebase=postgrep –api
“`

PostgreSQL
データベース(SQL)の1つ
オープンソース、データベースと関連付けた
丈夫さ、パフォーマンス性に特徴がある
インストール方法とか使い方の記述が豊富

##データベーステーブルを作成した際のエラー

“`
$ bundle exec rails db:create
$ bundle exec rails db:migrate
“`
を記述したら

“`
could not connect to server: No such file or directory
Is the server running locally and accepting
connections on Unix domain socket “/tmp/.s.PGSQL.5432”?
Couldn’t create ‘scaffold_app_dev

元記事を表示

Railsを使ったクイズアプリで問題を1問ずつ表示する方法

#前提
quizがquestionとアソシエーションの関係である。

“`ruby
class Quiz < ApplicationRecord has_many :questions, dependent: :destroy end ``` ```ruby class Question < ApplicationRecord belongs_to :quiz end ``` 以下のように問題を1問ずつ回答したのちに結果を表示させるような実装をしたい方は、ぜひ参考にしてみてください。 Image from Gyazo

#実装方法
####nextメソッドを定義する

“`ruby
class Question < ApplicationRecord belongs_to :quiz def next(quiz) quiz.questions.where(

元記事を表示

Railsで作るクイズアプリのテーブル設計

# 前提
– 問題の作成、回答ができる
– 回答の選択肢を増やせる

上記のようなアプリを作りたい方は、ぜひ参考にしてみてください。

# 完成系
Image from Gyazo

# テーブルの役割
####quizzesテーブル
作成者の情報と問題の大枠を管理する。

####questionsテーブル
問題の内容を格納する。

####choicesテーブル
選択肢の情報を格納する。
また、`correct_answer`を`boolean`で設定し、回答正誤を判定する。

####challengersテーブル
回答者の情報を管理しています。
また、ランキング機能を作るために`score`カラムを追加。

#解説
####NGパターン
クイズアプリのテーブル設計をする際パッと思いつくのは、こんな感じではないでしょうか?

| question |

元記事を表示

[Ruby] AtCoder過去問 B – Foods Loved by Everyone

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

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

https://atcoder.jp/contests/abc118/tasks/abc118_b

##B – Foods Loved by Everyone
はじめに入力を受け取ります。

“`ruby
n, m = gets.split.map(&:to_i)
a = readlines(chomp: true).map{|line| line.split(‘ ‘).map(&:to_i)}
“`

2行目は二次元配列で受け取っています。入力例1を例にすると
“`[[2, 1, 3], [3, 1, 2, 3], [2, 3, 2]]“`
といったように受け取ります。

配列aの中のそれぞれの配列の先頭(インデックスで0番目)の数字は好きな食べ物の数を表しているだけです。好きな食べ物を表しているわけではないので、邪魔になります。消しましょう。

“`ruby
n, m = gets.split.map(&:to_i)
a = read

元記事を表示

Railsでキーワード+ ラジオボタンを使った検索方法を実装する

#1. はじめに
検索機能を実装する課題があったのでまとめます。
調べたところransackというgemを使っても検索機能を実装できるようですが、課題の趣旨から外れてしまうため、今回はgemなしで実装しました。
#2. Railsで検索機能を実装する[View]
**①まずroutesを追加する**
コントローラーとモデルは既に作成済みを想定します。

“`rb
get ‘search’, to: ‘XXX#search’
“`

私の場合は“/search“というURLにsearchというcontrollerのアクションを対応させました。

**②Viewにform_withで値を設定する**

“`rb
<%= form_with(scope: :検索対象のモデル名, url: search_path, method: 'get') do |form| %>
・・・
    ・・・
<% end %>
“`
・“scope“にはmodel名を指定します。
・urlには“routes“で指定した“controller“のアクションを指定します。

元記事を表示

Rubyの「宇宙船演算子」を再定義して AtCoder ABC219C を解く

AtCoder の ABC219C の問題は以下のリンクから参照下さい。

https://atcoder.jp/contests/abc219/tasks/abc219_c

簡単にいうと、アルファベットの順番を替えた上で、複数の文字列を辞書順にソートして出力するという問題です。

じつはこれ、とても Ruby らしい簡潔な解法が存在するので、まずはそちらを説明します。

“`ruby:Ruby
x = gets.chomp
n = gets.to_i
strs = n.times.map { gets.chomp }

puts strs.sort_by { _1.tr(x, “a-z”) }
“`

`x`は新しいアルファベットの順番、`strs`はソートすべき文字列の入った配列で、`sort_by`を使って、解いている部分は1行で書けています。かかる時間もかなり速いです。

#本題

さて、`Array#sort`は配列の中身が文字列の場合、暗黙にいわゆる「宇宙船演算子」、つまり`String#<=>`を使って辞書順にソートします。では、これを再定義してやれば、ただの`Ar

元記事を表示

プログラミング未経験でも2か月でTwitterアプリを作れた話

はじめまして!Masakingと申します!
今回は株式会社[Hajimari](https://www.hajimari.inc/)さんが運営するスキルアップ型就活支援サービス、「intee」でのプログラミングゼミを通して、Railsを使ったTwitterアプリをチームで開発したのでそちらを紹介したいと思います!

#完成したアプリ
![SharedScreenshot.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2035851/d2dcc11d-7fee-5c27-1a06-01dfcbf04da1.jpeg)

[https://myapp-usagisann-ri.herokuapp.com/](https://myapp-usagisann-ri.herokuapp.com/)
じゃじゃーん!

こちらがホームページになります。
デザインが可愛いらしい、、、
3人チームで開発を行ったのですが、チーム名が「うさぎさん?」ということもあってうさぎっぽい色合いのデザインになりました笑

#機能
機能

元記事を表示

Rubyの繰り返し処理をサンプルコードでまとめ

# 配列系
## each 配列の値を1つずつ取り出す

__配列__

“`rb:loop.rb
week = [‘Sunday’, ‘Monday’, ‘Tuesday’, ‘Wednesday’, ‘Thursday’, ‘Friday’, ‘Saturday’]

week_str = ”
week.each do |date|
week_str += date
end
p week_str # -> SundayMondayTuesdayWednesdayThursdayFridaySaturday
“`

__ハッシュ__
ハッシュの時、keyとvalueを返す。

“`rb:loop.rb
country_code = {
‘japan’ => ‘JP’,
‘australia’ => ‘AU’,
‘canada’ => ‘CA’
}

country_code.each do |key, value|
puts “#{key} : #{value}”
end

# ->
# japan : JP
# australia

元記事を表示

[Ruby] できるだけ負荷をかけない処理を意識するのは大事だなと思いました

##はじめに
AtCoderの過去問を解いている中で、タイトルのようなことを感じたので記事にします。

そのとき解いていたのはこちらの問題です。↓

https://atcoder.jp/contests/abc134/tasks/abc134_c

C問題にしては割と難易度は低い気がしましたが、すごく良問だなと感じました。

##C – Exception Handling
この問題の解き方としては、まず入力値のAの部分を配列として受け取り、その中で一番大きい数字と二番目に大きい数字(一番目と重複していたら、それが二番目とする)を取り出します。

そして配列から一つずつ要素を取り出して一番大きい数字と比べ、同じだったら、二番目を出力(取り出した数字は比較対象から外れるため)。
それ以外だったら一番目を出力すればOKです。

最初に僕が提出して失敗したコードはこちらです。(厳密には実際とは違いますが、説明しやすくするため少し変更しています。失敗した原因は同じです)

“`ruby
n = gets.to_i
a = readlines.map(&:to_i)

a.each do

元記事を表示

【Rails sが起動しない】ターミナルを起動したまま閉じたり、どこで起動したか不明の場合の解決法

# エラー内容

$ rails s
=> Booting Puma
=> Rails 6.1.4.1 application starting in development
=> Run `bin/rails server –help` for more startup options
Puma starting in single mode…
* Puma version: 5.4.0 (ruby 3.0.0-p0) (“Super Flight”)
* Min threads: 5
* Max threads: 5
* Environment: development
* PID: 3174
* Listening on http://127.0.0.1:8080
* Listening on http://[::1]:8080

# 解決法
今のターミナルで killall ruby を実行する

元記事を表示

RubyとPythonの基本構文の違い【配列編】

## Rubyでは配列末尾への追加を << で行うことができる __Ruby__ ```rb:sample.rb # 配列末尾への追加 a = [1, 2] a << 3 p a # -> [1, 2, 3]
“`

__Python__

“`py:sample.py
# 配列末尾への追加
a = [1, 2]
a.append(3)
print(a) # -> [1, 2, 3]
“`

## Rubyでは多重代入の際に、変数の数と配列の要素数が異なってもエラーが起こらない
Pythonの場合、変数の数と配列の数が同じでないと、エラーが起こります。

配列の要素数が変数の数より多い場合、Rubyでは超えた分の配列の要素は無視されます。
__Ruby__

“`rb:sample.rb
a, b = [1, 2, 3]
p(a) # -> 1
p(b) # -> 2
“`

__Python__

“`py:sample.py
a, b = [1, 2, 3] # -> ValueError: too many values to unpack (expect

元記事を表示

Bootstrap導入時のエラー

# Bootstrap導入の際にした手順
– Gemfileにwebpackerがあるかどうか確認railsのバージョンが5.1以降であれば必要なし(標準搭載されたため)
– Bootstrapを扱うのに必要なパッケージをインストール

“`zsh
yarn add jquery bootstrap popper.js
“`
– config/webpack/environment.jsに以下を追記

“`zsh
const webpack = require(‘webpack’)
environment.plugins.append(
‘Provide’,
new webpack.ProvidePlugin({
$: ‘jquery’,
jQuery: ‘jquery’,
Popper: [‘popper.js’, ‘default’]
})
)
“`
– app/javascripts/stylesheets/application.scssを作成し、以下を記述

“`js
@import ‘~boot

元記事を表示

HamlでBootstrapの属性を書くときにUnbalanced brackets error発生

###◆問題発生

“`
.modal.fade{id: “exampleModal”, tabindex: “-1”, role: “dialog”, aria-labelledby: “exampleModalLabel”, aria-hidden: “true”}
“`
Bootstrapのモーダルを使おうと思ったら、属性を指定するところで

“`
Haml::SyntaxError in Posts#show
Unbalanced brackets.
“`
というエラーが出ました。
どうやらこの部分でエラーが出てしまっていたようです。

“`
{… aria-labelledby: “exampleModalLabel”, aria-hidden: “true”}
“`

###◆Rubyではキーにハイフンが使えない

キーにハイフンが入っているとシンボルとして認識されないため、文字列に変換してあげる必要があります。
これはHamlの文法に限りません。

以下のように記述することで解決しました。

“`
{… “aria-labelledby”:

元記事を表示

rbenv と bundler で Ruby のバージョンと gem を管理する方法

こんにちは Masuyama です。

一つの環境で Ruby の開発、gem のインストールを行っていると、アプリケーションごとの依存関係の差異によるエラーに苦しむことになります。
そこで今回は rbenv と bundler を用い、Ruby のバージョンと gem を管理する方法をご紹介します。

# 開発環境の前提
rbenv はインストールされていること

念のため、参考となりそうな記事をご紹介しておきます。

– [Mac の場合](https://qiita.com/TakahashiKat/items/7a45bbd5d0e675c1de3f)
– [Windows の場合](https://qiita.com/ktpnobu/items/fa0c198ee14b9875817a)

# Ruby バージョンの管理
rbenv を用いて特定バージョンの Ruby をインストール、および管理していきます。
今回は 2.7 系をインストールしたいと思います。

### rbenv とは
rbenvとは、Ruby のバージョンを管理し、複数のバージョンを切り替えて使

元記事を表示

OTHERカテゴリの最新記事