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

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

deviseの導入

##gemfileにdeviseを追加

“`gemfile
gem ‘devise’
“`

##bundleをインストール
“`
$ docker-compose run web bundle install
“`

gemfileが変更されたので、buildする

“`
$ docker-compose build
“`

##deviseをインストール
“`
$ docker-compose run web rails g devise:install
“`

##モデルの作成
“`
docker-compose run web rails g devise モデル名
“`

##アラートの表示
bodyタグ内に

“`application.html.erb

<%= notice %>

<%= alert %>

<%= yield %>

“`

##deviseのビューの作成
“`
docker-co

元記事を表示

[Ruby] Array#sum メソッド

##はじめに
sumメソッドってすごく馴染みがあるように思っていたんですが、使い方をみたら、全然使ったことなかったと思いまして、簡単に記事にまとめておこうと思います。

##sumメソッド

配列に対して使います。配列に入っている要素を全部がっちゃんこしてくれるイメージ。

“`ruby
[1, 2, 3, 4].sum
=> 10
“`

> 引数に明示的に指名すると数値以外にも使用できます。
https://docs.ruby-lang.org/ja/latest/method/Array/i/sum.html

なかなか表現が思いつかなかったのでリファレンスの表現をお借りします。

“`ruby
[“お”, “は”, “よ”, “う”].sum(“”)
=> “おはよう”

[[1], [[2]], [3]].sum([])
=> [1, [2], 3]
“`

元記事を表示

ruby on railsでのユーザー管理機能について

この記事ではruby on rails 6.0.0を使用しています。!

今回はdeviseのgemを紹介したいと思います。

deviseって何?

devisとはユーザー管理機能を実装するためのgemです。
会員登録やログイン・ログアウト機能を簡易に実装することができるgemです。!

導入方法

導入は簡単です。!

![05ca375321ad0851c0be9c6b3a07691b.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1902434/e791767e-878d-e529-cc2d-c73d9f4d8fab.png)

Gemfileに gem ‘devise’ と記述してbundle installをするだけです。!!

元記事を表示

【Ruby on Rails】新規登録時のエラーメッセージ発生後にリロードするとルーティングエラーになる問題を解決した話

#解決したい課題

* 新規会員登録時に、エラーメッセージ表示後に、リロードすると発生するRunningErrorを解決したい

#結論

* [GET]/userを呼び出していたので、そのまま入力する

#原因と対策
###1.エラー文

![スクリーンショット 2021-08-17 8.40.42.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1681213/6c8a0029-314c-1447-0b3c-ab116be75de3.png)

###2.rails routesルーティング確認

![スクリーンショット 2021-08-16 21.41.34.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1681213/47f20649-a8ae-9aad-1232-c1f9586a167b.png)

そもそもGETがない、、、!

###3.routes.rbに記載

resourcesを使っていたのでi

元記事を表示

Railsチュートリアルmodule SessionsHelperを例にmoduleとHelperの役割を見てみる

Railsチュートリアルも9章に入ったのですが、Sessionが出てきてからかなり難易度が上がったように感じたので、知識の定着を図ることも兼ねて、理解が曖昧な部分を自分用にまとめておきます。

##module SessionsHelperとは

Sessionコントローラーを生成した時点で、自動的にmodule SessionsHelperも生まれてました。

まず、**module**というのはclassと同様に部品の集まりです。以下の説明がわかりやすいと思います。

>Rubyにはオブジェクト指向で一般的なクラス以外にも、モジュールという概念が存在します。モジュールではクラスと同じように定数やメソッドをまとめたり、クラスに組み込んで多重継承を実現したり、クラスなどをまとめることで名前空間を提供するなど、いろいろな使い方ができます。 https://qiita.com/shiopon01/items/fd6803f792398c5219cd

ちなみにクラスとモジュールの違いに関する説明は[こちら](https://qiita.com/fukumone/items/2dd4d2d1

元記事を表示

Ruby組み込み変数一覧

## 組み込み変数

| 変数名 | 内容 |
| —————- | ———————————————————– |
| $! | 最後に発生した例外に関する情報 |
| $” | $LOADED_FEATURESの別名 |
| $$ | 現在実行中のRubyのプロセスID |
| $& | パターンマッチングでマッチした文字列 |
| $’ | パターンマッチングした部分より後ろの文字列

元記事を表示

Ruby 配列の基本的な使い方

#配列とは
簡単にいうとデータのかたまりのことです。
つまり***データをたくさん詰められるタンスのような役割***をしています。
そして、データ1つ1つは箱のようなもので、***要素***と呼んでいます。

例えば、「前田」・「佐藤」・「鈴木」という名前(文字列)を格納する配列のイメージは下の図のようになります。

箱1つ1つには番号が振られていて、この番号を***添字***と呼んでいます。添字は0から始まります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1748789/14382a27-7fa8-c6cd-f855-2453d3b725d3.png)

*こちらのサイトを参考

Ruby 配列が初心者でもわかる!7個の重要なメソッドも紹介

#配列の生成と定義

⚫︎配列の生成

“`
array = Array.new #arrayは配列のこと  #Arrayは配列を表すclass
array = [

元記事を表示

【Rails】どうしてもjoinsできなかったので、苦肉の策で無理矢理joinsさせた

joinsをどうしてもしたかった

userとfoodとorderという三つのDBテーブルのうち、foodとorderをjoinsさせて、フロントに持っていきたかったのですが、どうしても二つのテーブルのデータが同時に取得できなかったため、無理矢理joinsさせた愚行をここに記していきます。

念のため、モデルの関係性は以下です。
foodとorderは1対nの関係です。

“`user.rb
has_many :foods
has_many :orders
“`

“`food.rb
belongs_to :user
has_many :orders,foreign_key:”id”,primary_key: “id”
“`

“`order.rb
belongs_to :make_user,class_name: “User”, optional: true
belongs_to :order_user,class_name: “User”, optional: true
belongs_to :food, foreign_key:”food_id”,opt

元記事を表示

gRPC ruby の`Google::Rpc::Status.decode`の挙動

この記事は手元でコードを動かしながら書いているわけではなく、ただ調べたことをざっとまとめているだけである。よって、何かミスってるかも。「スニペットでto_protoで、なぜわざわざprotoにリバースしてるんだ」的なツッコミもなしで。あくまで、`Google::Rpc::Status.decode(シリアライズされたリクエスト)`の挙動を見せるのがこの記事の目的だからリバースしてます。

## gRPC ruby の クライアント側で、

“`rb
client = GetPostsService::Stub.new(‘localhost:5005’)

begin
post_response = client.get_posts(
GetPostsRequest.new(param)
)
puts(
Google::Rpc::Status.decode(post_response.to_proto) ## ここ
)

rescue G

元記事を表示

[Ruby] digitsメソッド

##はじめに
RubyでAtCoderを解いていたときに、便利なメソッドを見つけたので記事にしておきます。
よろしくお願いします。

##digitsメソッド

digitsメソッドはinteger型に用意されているメソッドで、桁ごとの数字を一つずつ配列の中に入れてくれるメソッドです。正の整数に使うことができます。

例えば、1234という数字があったとします。これにdigitsメソッドを使うと↓

“`ruby
1234.digits
=> [4, 3, 2, 1]

174893.digits
=> [3, 9, 8, 4, 7, 1]
“`

また、digitsに引数を渡すことができます。引数を渡した数字を基数として、その記数法で表記した数値を配列に一つずつ入れます。
つまり引数を渡さなかった場合(上記の例)、基数は10となっています。

“`ruby:引数を渡した場合
16.digits(16)
=> [0, 1]

3.digits(2)
=> [1, 1]
“`

この辺は進数の理解が必要ありますね。

元記事を表示

[Ruby on rails]タグ付け機能④タグにユーザー情報紐付け マイページで投稿に紐付けたタグを表示

初めに

今回は、タグにユーザー情報を紐付けて、
マイページでそのユーザーが投稿に紐づけたタグを表示するようにします。

これまでの記事

https://qiita.com/ki_87/items/a344ea566c88b10b950c

https://qiita.com/ki_87/items/ae5d44af096df01ca587

https://qiita.com/ki_87/items/b7ceded18d473dc22f8f

完成イメージ

以下はマイページの一部です。

![スクリーンショット 2021-08-16 21.07.44.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1633266/86acb053-6827-f36d-5a78-8e0b0c2902c0.png)

マイグレーションファイル

中間テーブルに外部キー追加します。
t.references :user, foreign_key: t

元記事を表示

[Ruby on rails]タグ付け機能③投稿編集時のタグの編集と削除 (with 記事の下書き保存)

初めに

②までの実装だと、投稿編集時にタグの数を減らしたりすると、
エラーが出るかと思います。

https://qiita.com/ki_87/items/a344ea566c88b10b950c

https://qiita.com/ki_87/items/ae5d44af096df01ca587

コードについて

③の記事から、投稿の下書き機能も導入しているため、
少しコードが見にくくなっています。
下書き機能については、以下の記事で説明しています。

https://qiita.com/ki_87/items/3e2d570e3ee3710ff506

下書き保存ではタグの保存はしないようにしたいので、以下のコードでは、
if params[:post][:status]== “公開”か、そうじゃないか(下書き)で、
条件分岐しています。

コントローラー

“`perl:post_controller.rb
def update
# postのid持ってくる
@post = Post.find(param

元記事を表示

[Ruby on rails] 通知機能実装 コメント(非同期通信)の通知機能

初めに

今回、コメントの通知機能を実装しました。

参考記事はいくつかあるものの、私の場合、コメントもいいねは非同期通信にしてるため、
実装過程で、非同期通信が動かなくなったり、、なかなか大変でした。

「どの記事見ても何かしらのエラーが出る」という記事も見かけましたので、
あくまでも参考にして頂ければ…と思います。

完成イメージ

コメントしてくれた人&どの投稿にコメントしてくれたかがわかるようになっています。
名前も、記事名もリンクになっていますので、飛べます。
全削除で、全部の通知が消えます。
自分の記事に自分でコメントしても、通知はきません。
![スクリーンショット 2021-08-16 17.58.56.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1633266/785a7ed0-184a-0d5c-a736-4deecc81e947.png)

未読の通知があれば、NOTICEが赤いベルになります。既読したら、色は黒に戻ります。
![スクリーンシ

元記事を表示

ファイルの有無を確認する単体テストについて

商品出品機能の単体テストを行った際に以下のようなメッセージが表示された。

*ActiveSupport::MessageVerifier::InvalidSignature*

調べてみるとFactoryBotでimageの情報をFakerを用いて用意していたことが誤りだったようだった。
※型(stringやintegerなど)の違いによるもの

下記のようにimageファイルを用意したところ事象は解決した。

“`ruby
after(:build) do |item|
item.image.attach(io: File.open(‘public/images/test.png’), filename: ‘test_image.png’)
end
“`

元記事を表示

ActiveRecordを単体で使う時に出てきたエラー

「[ActiveRecordを単体で使うには](https://tsuchikazu.net/active_record_single_use/)」をやっている最中に手間取ったので記録しておきます。初心者ですので間違っていることがあれば教えて頂けると幸いです。

#目次
1. gem install mysql2のエラーの対処法

2. Can’t initialize character set utf8

>実行環境
Ubuntu 18.04
WSL1
Ruby2.7.2
ActiveRecord 6.1.4 (バージョン確認方法: gem list | grep activerecord)

#1. gem install mysql2のエラーの対処法
サイトに書いてある通り、gem install mysql2を実行すると以下のエラーが出てしまいます。

“`
Building native extensions. This could take a while…
ERROR: Error installing mysql2:
ERROR: Failed

元記事を表示

Rubyのオブジェクトについて

#オブジェクトとは
オブジェクトとは、関連する変数(値)とメソッド(動作)をまとめて、そのまとまりに名前を付けたものです。関連する変数やメソッドを1つのオブジェクト内でまとめてしまうことで、管理しやすくするのが
***オブジェクト指向***です。

#Rubyはオブジェクトでできている
Rubyで出てくるオブジェクトは全て,いずれかの型に属する。
この***型をクラス***と言います。

“`
#String (文字列)型 #Integer(整数)型
“Hello,world” 10

“`

#オブジェクトの性質
Rubyの世界

“`
                        オブジェクト

            String Class Integer Class

“Hello,world” .length 10000
                                     .downcase

元記事を表示

~part4~【FC版】React + Rails API + axios + react-router-domでCRUDを実装する

こんにちは!スージです。
[こちら](https://qiita.com/suzy1031/items/ab1186dc3ae48be27e5a)の記事の続きです

### やりたい事

– `Userモデル`と`Postモデル`を1対多で関連付け
– ユーザーが登録した投稿を一覧画面に表示
– 新規登録した時に`user_id`を保存
– ログイン中のユーザーは自分が投稿したデータのみ`更新`・`削除`ができる

### 開発環境
Ruby 2.7.2
Rails 6.1.4
MySQL
node.js 16.6.2
React 17.0.2

### 参考
[Rails deviseで使えるようになるヘルパーメソッド一覧](https://qiita.com/tobita0000/items/866de191635e6d74e392)

### Rails側から実装開始

まず、postテーブルに外部キー`user_id`を追加します

“`terminal
backend $ rails g migration AddColumnsToPosts
“`

“`ruby
#

元記事を表示

【Ruby on Rails】Topに戻るボタンの作成方法

#対象者

* 画面にTopに移動するボタンを作成したい方

#目的

* 下にスクロールしてもすぐに画面の一番上に移動できるようにする

#実際の手順と実例
###1.画像の用意

まず画像を準備します。

何でも大丈夫ですが、下記のファイルを使用して頂いて大丈夫です。

![arrow.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1681213/ff3906c7-ea0e-e9df-3bcd-ecc9cd0f157e.png)

こちらの画像を
app/assets/imagesに格納します。

###2.Viewの設定

今回はすべてのページで表示したいので
application.html.erbへ記載します。

“`app/views/layout/application.html.erb

<%= yield %>


<%= image_tag asset_path('arrow.png

元記事を表示

Rubyを通してプログラミングの基礎を学ぶ

## コンピュータとは
そもそもコンピュータとは何なのでしょうか?コンピュータは電子回路を利用して計算を行う機械です。コンピュータ内の様々な情報処理は、大元に行きつけば電圧のon offの組み合わせや電流の流れで物理的に実行されています。イメージを持ってもらうためにショートカットキーの例で説明します。

ショートカットキーとは、キーボードのある二つのキーを同時に押したとき、特定の処理が実行される機能です。例えば「Ctrl」 と 「S」を同時に押すと「保存」行われます。Macの場合「Command」+「S」です。この命令は以下のような電気回路で表すことができます。

andkeisanki.JPG

この回路は、2つの入力の両方の電流がonのとき**のみ**出力側に電流を通過させるような回路です。それぞれの入力端子が直列に出力方向につながれているような構造になっていて、ANDゲートと呼ばれます。
「Ctrl」を押している信号と「S」を押している信号、両方の電気信号が回路に入って通過したとき**のみ**出力

元記事を表示

[個人開発]Discordの使用時間を計測するアプリ 「Discord-Log」を作りました

## はじめに
この度、Discordのボイスチャンネルの使用時間を自動で計測するアプリ**「Discord-Log」**をリリースしました。
このアプリは、[RUNTEQ](https://runteq.jp/)というプログラミングスクール内限定でリリースしているアプリになりますので、サービスリンクは載せていません。
ご了承ください。
####Discord-Log####
![top3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/625435/51f53738-2397-aa95-258b-c02a3bb8aa11.png)

## このサービスを作った背景
結論からお伝えすると、私がDiscordの**ボイスチャンネルにいる時間=学習時間**であったため、簡単にその時間を計測できるサービスが欲しいなと感じたからです。
私自身、学習時間を計測する習慣はありませんでしたが、学習するときはDiscordを使うようにしていました。
そのため、**Discordのボイスチャンネルを使用した時間を計測できれ

元記事を表示

OTHERカテゴリの最新記事