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

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

【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 = { キー: 値}
“`

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

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

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

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

ハッ

元記事を表示

【Ruby】配列(数値)を大小で並び替えて◯番目を抽出する

# やったこと

“`ruby
i = [4, 18, 25, 20, 9, 13] #変数に配列を代入
p = i.sort.reverse #.sortはデフォルトで昇順(小→大)のため、.reverseで降順(大→小)に変更
puts p[2] #3番目に大きいものを表示
“`

.reverseで降順にすることで、
配列の数に関わらず、大きいものから3番目が抽出できます。

元記事を表示

【Ruby】ハッシュの中のハッシュの値を取り出す方法

下記のようなハッシュがあった際、punch_inの中のdateの値を取り出したい

“`
hash = {
Fri, 01 Jan 2021=>
{:punch_in=>
id: 2314,
date: Fri, 01 Jan 2021,
:punch_out=>
id: 2315,
date: Fri, 01 Jan 2021,
}
}
“`

##やり方
1. ハッシュからvaluesだけを取り出し配列の形にする

“`
arr = hash.values

#=>
[{:punch_in=>
id: 2314,
date: Fri, 01 Jan 2021,
:punch_out=>
id: 2315,
date: Fri, 01 Jan 2021
}]
“`

2. 配列から取り出す

“`
puts arr[0][:punch_in][:date]

#=> Fri, 01 Jan 2021
“`

##参考

https://qiita.com/komiso/ite

元記事を表示

[Ruby] AtCoder過去問 B – 美しい文字列

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

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

https://atcoder.jp/contests/abc044/tasks/abc044_b

##B – 美しい文字列
まずは入力を受け取ります。

“`ruby
w = gets.chomp.chars
“`

一文字ずつ分けて、配列として受け取ります。
入力例1でいえばこのように受け取れているはずです↓
“`[“a”, “b”, “a”, “c”, “c”, “a”, “b”, “a”]“`

countメソッドでそれぞれの文字が配列wの中にいくつあるか調べ、それが偶数個なのかどうかeven?メソッドで調べます。

さらに、全ての種類の文字が偶数個ないといけないので、all?メソッドで上記の条件が全て真の時にtrueを返すようにします。trueであればYesを出力させ、falseならNoを出力させます。

配列wで使われている文字の種類は“`w.uniq“`で表現します。

“`ruby
w = gets.chomp.chars

元記事を表示

【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

元記事を表示

OTHERカテゴリの最新記事