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

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

RailsのViewの役割とRoutingについて

## はじめに
基本は備忘録
MVCについて役割ごとにまとめる機会があったので整理します。

## View
htmlファイル 拡張子がsample.html.erb

## 新しいページを作成する
(新たなコントローラとviewを作成 + routingの設定)

“`rb
# localhost:3000/home/topにアクセス可能
# 同じ名前のコントローラがすでにある場合コマンドが使えない
rails generate controller コントローラ名 アクション名

rails g controller posts index
“`

## link_to
aタグに変換する。

“`rb
# Prefixで設定
# rails routesでPrefixを確認
<%= link_to("文字列", post_path) %>
“`

“`rb
# urlで指定
# /で始める routingに合わせる
# postのroutingの時は{method: “post”}
<%= link_to("文字列", "/posts") %>
“`

## パーシャル

元記事を表示

RailsのControllerの役割

## はじめに
基本は備忘録
MVCについて役割ごとにまとめる機会があったので整理します。

## Controller
*ModelやViewとdateのやりとりをする*

## CRUD(クラッド)処理
システムに必要な4つの主機能

“`rb
C Create # データの作成
R Read # データの読み込み
U Update # データの更新
D Delete # データの削除
“`

*railsは7つを推奨している*

“`rb
index # データの一覧を表示する
new # データを新規作成するためのフォームを表示
create # データを新規作成し、データーベースへ保存

show # 指定したデータを表示
edit # データを更新するためのフォームを表示
update # データ更新

destroy # データ削除
“`

**一覧データの表示と作成**
**index**

“`rb
# DBから全てのデータ(@posts)を取得しViewに返却
#.order(created_at: :desc)で並び替え
@posts = Po

元記事を表示

RailsのModelの役割

## はじめに
基本は備忘録
MVCについて役割ごとにまとめる機会があったので整理します。

## Model
modelの役割はDB関連の処理
*date取得などの処理や、date自体の作成・削除*

## 新しいテーブルを作成
*モデル・マイグレーションファイルが作成される*
`db/migrate/`配下にmigrationファイル
`app/models/`配下にモデル

“`rb
# DBに変更を指示するmygration fileを作成
# カラムが複数個ある場合は,は不要 name:string mal:string
rails generate model Post content:text

# DBに変更を反映 id, created_at, updated_at, は自動生成
rails db:migrate

“`

“`rb
# データ型
integer 整数
float 少数
string 文字列
text 長い文字列
boolean 真偽値
“`

## 既存のtableにカラムを追加する
`db/migrate`配下

“`rb

元記事を表示

[Ruby on Rails]いいね、お気に入り機能の実装

#はじめに
お気に入り機能を実装する際に迷うことがあったため、アウトプットもかねて自分なりにまとめてみました。

#前提
下のようなER図にて、お気に入り機能を実装する。
すでに、userの新規登録及びgadjetの投稿、一覧画面、詳細画面の実装は済んでいる。
![ER.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1874224/fec7a921-6e3a-dc1b-79e3-7c8aee6097d8.png)

・Userはgadjetに対して、一つのお気に入りをすることができる
・Userとfavoriteは”1対多”の関係
・gadjetとfavoriteは”1対多”の関係

##開発環境
ruby ‘3.0.0’
Rails 6.0.3.4

#実装手順

##favoriteモデルの作成

上記ER図のように、モデルを作成する。

“`:ターミナル
rails g model favorite user_id:integer gadjet_id:integer
“`
マイグレーシ

元記事を表示

【Ruby】今日の曜日を表示するコード Dateクラス

※初心者向け
※アウトプット練習の為

開発環境
rails 6.1.4.1
ruby 2.6.5

##問題内容##
今日の曜日を表示するコードをDateクラスを使用して記述してください。

ただし、金曜日だった場合だけ以下のように表示の内容を変えてください。

(出力内容)
「今日は水曜日」
「今日は金曜日だ !!!」

ヒント
**Dateクラス**
DateクラスとはRubyの標準ライブラリの機能です。Dateクラスを使うには以下一文を記述します。

“`ruby
require “date”
“`
次に、Dateクラスを用いて「今日の曜日」を取得する場合は以下のように記述します。

“`ruby
Date.today.wday
“`
wdayは曜日を0(日曜日)から6(土曜日)の整数で取得することができるDateクラスに用意されているメソッドです。
たとえば、以下のように使うことができます。

“`ruby
require “date”

day = Date.today.wday

puts day
“`

これを実行すると、曜日に合わせた数字が出力されます。た

元記事を表示

[Ruby]条件式付きの繰り返し処理(while文)

学習したことのアウトプットとして

# while文
繰り返し処理を行うためのRubyの構文で、指定した条件が真である間処理を繰り返す
 
基本構文

“`ruby
while 条件式 do # doは省略可
# 条件が真である時に繰り返す処理
end
“`

例)1〜10までの数字を出力させる

“`ruby
num = 0

while num <= 10 puts num num += 1 end # ターミナル出力結果 # 0 # 1 # 2 # 3 # 4 # 5 # 6 # 7 # 8 # 9 # 10 ``` ### 無限ループに注意! 例えば上記のコードの条件式を「true」にすると無限にターミナルに出力されて、コンピュータに大きな負担がかかってしまうので注意が必要 ### breakを使ってループを抜け出す ```ruby:例 number = 0 while number <= 10 if number == 5 break end puts number number += 1 end # ターミナル出力結果 # 0

元記事を表示

[py2rb] itertools.product

# はじめに
移植やってます。
( from python 3.7 to ruby 2.7 )
# product (Python)
“`python
import itertools

A = [(‘a’, ‘b’, ‘c’), (‘d’, ‘e’), (‘f’, ‘g’)]

print(list(itertools.product(*A)))

# [(‘a’, ‘d’, ‘f’), (‘a’, ‘d’, ‘g’), (‘a’, ‘e’, ‘f’), (‘a’, ‘e’, ‘g’), (‘b’, ‘d’, ‘f’), (‘b’, ‘d’, ‘g’), (‘b’, ‘e’, ‘f’), (‘b’, ‘e’, ‘g’), (‘c’, ‘d’, ‘f’), (‘c’, ‘d’, ‘g’), (‘c’, ‘e’, ‘f’), (‘c’, ‘e’, ‘g’)]
“`
https://docs.python.org/ja/3.7/library/itertools.html#itertools.product

> ジェネレータ式の入れ子になった for ループとおよそ等価です。たとえば

元記事を表示

Ruby on Railsの環境構築【初心者用】

# 動機

シンプルに手順を示した記事が無かったため作成。
できる限りシンプルにまとめました!
とりあえず手元のPCでRailsを動かせるようになることを目的としていますので細かい説明は省略しています。
環境構築が終わってから、コマンドで具体的に何を行っているのか、一つずつ調べていきましょう。

# 環境

macOS Monterey 12.1

# ひたすらインストールしていく

ターミナルを開いてコマンドを入力していってください。
### Command Line Tools

コマンドラインツール

“`
xcode-select –install
“`

### Homebrew

macのパッケージ管理ツール

“`
/bin/bash -c “$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install.sh)”
“`

### rbenv

Rubyのバージョン管理ツール

“`
brew update
brew install

元記事を表示

Rubocopを使って、Rubyのマジックコメントを coding: utf-8 から frozen_string_literal: true に修正する(一括置換)

Rubyのマジックコメントを、`# -*- coding: utf-8 -*-` から `# frozen_string_literal: true` に一気に書き換えたい場合、以下の2つのコマンドを流せば、そのディレクトリ以下にあるRubyのすべてのファイルで、マジックコメントが encoding: utf-8 から frozen_string_literal: true に書き換えられる

“`shell
rubocop –only Style/Encoding -a
rubocop –only Style/FrozenStringLiteralComment -a
“`
`-a ` オプションを削除して実行すると、ファイルは変更されずに変更箇所のリストアップだけされるので、最初はそれで試してみるのが良いかも

## 参考

– [Class: RuboCop::Cop::Style::Encoding — Documentation for rubocop (1.24.1)](https://www.rubydoc.info/gems/rubocop/RuboCop/C

元記事を表示

行単位、列単位の合計値算出プログラムを実装する

# はじめに

[Ruby初心者向けのプログラミング問題を集めてみた](https://blog.jnito.com/entry/2019/05/03/121235)の問題を解いてみました。
今回は、Excelのように、行・列の格子状になるランダムな数値を出力し、行・列単位で合計値を算出し、出力するプログラムにチャレンジしました。

最終的には、以下のような形式にフォーマットしたいです。

“`
9| 75| 83| 74| 241
1| 27| 32| 48| 108
51| 66| 76| 3| 196
2| 37| 69| 85| 193
55| 40| 25| 88| 208
118| 245| 285| 298| 945
“`

## 要求仕様

– 計算のベースとなる配列を作成する
– フォーマットし出力した際に、5 × 4 となるような配列であること
– 配列の値は`1〜99`のランダムな値であること
– ベースとなる配列を元に、行・列で合計値を算出し、例の通りフォーマットされた表を出力する

元記事を表示

[Ruby] 丸め誤差というバグについて簡単に説明

# 丸め誤差とは
コンピューターの内部で10進数ではなく、~~2進数で計算すると発生するのが~~**丸め誤差**です。
「有限桁で数を表そうとするから」と捉えたほうがいい↑

###Rubyに備わっているirbを使って確認してみましょう
“`apex
irb(main):001:0> 0.1*3.0
=> 0.30000000000000004
“`
上記のように0.3になりません。

このような誤差の~~バグ~~で正しく処理できないことがあります
         ↑不可避
以下が例です。

###数値の大小を比較したりする際にバグになる

“`apex
irb(main):002:0> 0.1*3.0 == 0.3
=> false
irb(main):003:0> 0.1*3.0 <= 0.3 => false
“`
**trueではなくfalseが返っています。**
こうなると正しく計算ができませんよね

# 対処法
### Rationalクラスを使う

先ほどの計算に**Rationalクラス**を使ってみましょう
数字に後に’r’を付けます。

“`apex

元記事を表示

active_hashを使って都道府県モデルを作る方法

#はじめに
 
 **今回は都道府県を選択する時に使う「active_hash」について新たに学んだので備忘録としてまとめます。**active_hash住所などを選択する時に都道府県を選択するプルダウンを作るために必要です。ユーザー登録をする時にはよく使いますが、47個の都道府県を毎回実装するのは大変です。そんな時に、active_hashを使うと簡単に効率よく実装する事ができます。

#active_hashの実装方法
active_hashの実装方法は以下の手順です。

1gemfile
2疑似モデルを作る
3対応するカラムを作る
4アソシエーションを定義する
です。
**今回はuserモデルに都道府県を保持させたい場合を想定します**

それでは順番に説明していきます。

# gemfileの導入
 まずはgemfileを導入します。

“`
## Gemfileに以下を記述
gem ‘active_hash’
“`

その後bundle installを忘れずします。

# 都道府県の擬似モデルを作る
 次に都道府県を入れた擬似モデルを作ります
まずは実施のコードを

元記事を表示

【CircleCI】bundle installされない場合の対処方法

railsでポートフォリオ作成時にCircleCIを導入したところ、
`bundle exec rails db:migrate`実行時にエラーが発生しました。
ログ上では`bundle install`してたが`bundle install`しろとのこと。。。

ググっても解決策が見つからず、かなりハマってしまったので記録しておきます。

#エラー内容
![スクリーンショット 2022-01-11 14.11.03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1292797/fa92a9e5-30e2-7fc6-a557-12b83231c0c7.png)

“`:エラーメッセージ
Could not find rake-13.0.6 in any of the sources
Run `bundle install` to install missing gems.
“`

#解決策

>プレフィックスが「 circleci / 」のレガシーイメージは、 2021 年 12 月 31 日に廃止

元記事を表示

crontab×ruby 備忘録

##### 経緯
crontab で ruby のスクリプトを動かすことに苦戦したので、
忘れないようにメモ。

##### 参考記事
https://qiita.com/xxl/items/88108f9ef70eafab395c

##### 実行環境
・cent os (ヴァージョン追記予定)

##### シェルスクリプトの作成
参考記事に倣って作成する。

##### crontabの設定
crontabは環境変数が通っていないため、crontabで使いたい環境変数は自分で通す必要がある。
crontab -e の編集画面で、
PATH, HOME, RBENV_ROOT,RBENV_SHELL,SHELLなど通すことで、
crontab で ruby のスクリプトが動かせるようになった。

(LANG も通しておかないと、実行ログが文字化けしてました)

元記事を表示

[Ruby] シングルクオートとダブルクオートに違いがあるって知らなかった。

# はじめに
初学者ですが、いくつかアプリを制作し慣れてきていたと自覚していた私ですが、まだまだ奥が深く面白いのがプログラミングであるなと更に思わされました。
Rubyに関する本を読み、「そんな理由があるんだ!」と思わされた事を紹介させてください。
#シングルクオート、ダブルクオートとは
### どちらも文字列を作る為にある
Rubyでは文字列を作る方法として、シングルクオート、ダブルクオートで囲む方法があります。

“`apex
‘シングルクオート’
“ダブルクオート”
“`
私の知識ではどちらでもよく、好みにより使い分けたり見やすくするために使い分けることがあるのだと思っていました。
#どんな時に違いがあるのか?
## バックスラッシュ記法を使用する時
###\nは””で囲まれている文字列を改行させる
ちなみに\←はmacだとoptionを押しながら¥を押すと表示させることができます。

“`apex
//シングルクオートの場合
‘おはよう\nおやすみ’
=> おはよう\nおやすみ
//ダブルクオートの場合
“おはよう\nおやすみ”
=> おはよう
おやすみ
“`

###

元記事を表示

Ruby on Rails 日時データを年月日の形式で表示する

#日時データを年月日で表示したい

scheduleというテーブルの中から、startという日時データのカラムの値を表示したい時、

“`
<%= schedule.start %>
“`
↑こんな感じで書くと

![スクリーンショット 2022-01-11 21.34.44.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2449886/3882c94a-c11c-901d-f20d-bc0d54a3ebb2.png)
↑こんな感じで表示される。
これを、年月日だけで表示していきたい。

#対処法

“`
<%= schedule.start&.strftime("%Y年 %m月 %d日") %>
“`
↑このように書くと、
![スクリーンショット 2022-01-11 21.56.53.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2449886/ffa4b769-8cf1-736a-c061-18749bac

元記事を表示

【Rails】ActionController::RoutingError (uninitialized constant HogeControllerの対処法

症状

railsで新たにアクションを追加したときに下記エラーメッセージが表示されました。
翻訳すると「初期化されていない定数hogeController」でした。

“`terminal:error
ActionController::RoutingError (uninitialized constant HogeController
“`

routeファイルとhoges_contollerファイルは以下です。

“`ruby:routes.rb
post ‘hoge’, to: ‘hoge#update’
“`

“`ruby:hoges_contoller
class HogesController < ApplicationController end ```

解決方法

routeファイルのhogeをhogesに変更することで解決しました。

“`ruby:route.rb
post ‘hoge’, to: ‘hoges#update’
“`

下記の記事ではファイル名が間違っていたため同様のエラーが出ていたようです。
この

元記事を表示

【Rails】dynamic constant assignmentの対処法【Ruby】

症状

railsで以下エラーが発生しました。
翻訳すると、「動的定数の割り当て」でした。

“`terminal:error
SyntaxError (C:/app/controllers/api/v1/users_controller.rb:21: dynamic constant assignment
YOUR_DOMAIN = ‘http://localhost:3000’
^~~~~~~~~~~
“`

“`ruby:users_controller.rb
def update
user = User.find_by(id: params[:userId])

DOMAIN = ‘http://localhost:3000’

if(user.save!(user_params)
redirect_to DOMAIN + ‘?success=true’,
else
redirect_to DOMAIN + ‘?canceled=true’,
end

end
“`

解決方法

Appli

元記事を表示

【Ruby】クラスとインスタンスの概念を用いたコードの作成

※初心者向け
※アウトプット練習の為

開発環境
rails 6.1.4.1
ruby 2.6.5

##問題内容##
“`ruby
class Article

def initialize(author, title, content)
@author = author
@title = title
@content = content
end

end
“`
上記のコードに追加を行い、以下の出力結果を得られるようにしてください。ただし、クラスとインスタンスを使用するものとします。

“`csharp
著者: 阿部
タイトル: Rubyの素晴らしさについて
本文: Awesome Ruby!
“`
##解答##
“`ruby
class Article

def initialize(author, title, content)
@author = author
@title = title
@content = content
end

def author
@author
end

元記事を表示

Ruby3.1.0のbundle installでpuma5.5.2がダウンロードできなかった時

# 環境

– macOS 12.1 (Monteray)
– ruby 3.1.0p0 (2021-12-25 revision fb4df44d16)[arm64-darwin21]
– Rails 7.0.1
– Apple clang version 13.0.0 (clang-1300.0.29.30)

# 要約

“`
bundle config build.puma CC=”clang -fdeclspec”
“`

でbundle installの実行時にオプションを渡して

“`
bundle install
“`

を実行。

# 出ていたエラーメッセージなど

Rails7.0.1でrails newした後Gemを入れようとしてbundle installを実行するとこんな感じのエラーが発生しました。(一部省略)

“`
current directory:
/rails/rails7-try/vendor/bundle/ruby/3.1.0/gems/puma-5.5.2/ext/puma_http11
/.anyenv/envs/rbenv/ve

元記事を表示

OTHERカテゴリの最新記事