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

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

Rails7をちょっと試す(Bootstrap編)

## はじめに

Rails 7.0.0 では、[Bootstrap](https://getbootstrap.com/) が簡単に利用できるようになっています。
今回は、Bootstrap を試してみたいと思います。

Bootstrap を使うためには、npm と yarn が必要です。

以下のバージョンで確認しました。

– Ruby 3.0.2
– Rails 7.0.0
– npm 8.3.0
– yarn 1.22.17

## Rails プロジェクトを作る

新しくRailsプロジェクトを作ります。このとき `–css` を指定します。
(データベースオプションを指定しているのに深い意味はありません。)

“`shell
mkdir rails_sandbox
cd rails_sandbox
rails new . –database=postgresql –css=bootstrap
“`

## scaffold を実行する

scaffold を使って簡単なCRUDを作ります。 `Bootstrap` の確認をしたいだけなので適当です。

“`s

元記事を表示

[py2rb] 直列化

# はじめに
移植やってます。
( from python 3.7 to ruby 2.7 )
# 直列化 (Python)
“`python
import pickle
self.assertEqual(dict_, pickle.loads(pickle.dumps(dict_)))
“`
https://docs.python.org/ja/3.7/library/pickle.html

オブジェクトと、オブジェクトを直列化しさらに復元されたオブジェクトを比較していますが、Equal にならないこともあるのでしょうかねえ?
# 直列化 (Ruby)
“`ruby
assert_equal dict_, Marshal.load(Marshal.dump(dict_))
“`
https://www.shoeisha.co.jp/book/detail/9784798168845

独習Ruby 330p
> 7.2.7 オブジェクトのシリアライズ

ここでは、dumpをオーバーライドして特定のデータのみシリアライズする例が紹介されています。
# メモ
+ Python

元記事を表示

[Rails][devise]追加したカラムにストロングパラメーターを使えるようにしよう

備忘録として

ユーザー管理機能を実装できる**devise**
デフォルトとして`「Eメールアドレス」「パスワード」`のカラムがすでに存在しており、ストロングパラメーターも使用できるが、自分で追加するカラム(ユーザー名など)にはストロングパラメーターは使えない状態なので、使えるようように記述する必要がある。

### 前提
– deviseを導入済み→[deviseの導入手順](https://qiita.com/Shi-raCanth/items/ce98a39800401cc77ee0)
– マイグレーションファイルでカラムを追加している

## application_controller.rbファイル
すべてのコントローラーが継承しているファイル。
ここに処理を記述しておくことで、すべてのコントローラーで共通となる処理を作ることができる。
deviseの処理を行うコントローラーはGem内に記述されているため編集することができないので、このapplication_controller.rbを編集していく。

## devise_parameter_sanitizerメソッド
d

元記事を表示

Webの仕組みとHTTP通信について

##ブラウザとサーバー
ブラウザ:今表示されている画面
サーバー:様々なデータを保存している大きなPCのイメージ

ブラウザではサーバーからファイルをダウンロードしてきて表示している。ファイルの中身にはHTML、CSS、JavaScriptなどの情報が格納されている。

(ブラウザ) ←←←←← (サーバー)
       ファイル
    (HTML、CSS、JS)

##HTTP通信について
HTTPとはブラウザとサーバーのやりとりの方法
基本は、リクエストとレスポンス

      リクエスト
      →→→→→
(ブラウザ)     (サーバー)
      ←←←←←
      レスポンス

リクエストで欲しい情報をサーバーに投げて、サーバーがその情報を返す。
このリクエストとレスポンスのやりとりのルールを作るのがサーバーサイド言語。

##HTTPの基本のメソッド4つ

###①GET データの取得
Webページを表示するときに使う

     このページみたい
      →→→→→
(ブラウザ)     (サーバー)
      ←←←←←
     はい、ペー

元記事を表示

formatメソッド(Ruby)

Ruby3.1 Kernelモジュールformat
#sprintf(string print formatted)フォーマット
formatの記述は『%指示子』が基本
指示子は、引数の型の解釈を示し、省略できない
・文字列を表す指示子:c,s,p
・整数を表す指示子:d,i,u,b,B,o,x,X
・浮動小数点数を表す指示子:f,g,e,E,G

“`ruby
#『%d又は%i』引数の数値を10進表現の整数として出力する
#整数でない場合はto_iと同規則で整数に変換する
format(“%d”,3.5)
#=> “3”
format(“%d”,”0b1010″) #0b(2進数)
#=> “10”

#『%s』は文字列を出力する
v = “moji”
5.times do |i|
if i % 2 == 0
puts format(“文字列%d(%s)”, i, v)
end
end
#=>
“文字列0(m

元記事を表示

CRUD処理(rails6)エラー解決

#CRUD処理を実装中に発生したエラーについてのアウトプット。

##エラー内容
投稿した情報を削除しようとした時に発生したエラー。
削除なのにHTTPメソッドがGET、本来はDELETE.

![スクリーンショット 2022-01-09 14.51.45.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2505299/80d052a8-cf80-e74a-212b-ea65fdae8a66.png)

##考えられる原因
1.ルーティングが間違っている。
2.コントローラーアクション間違い
3.ビューファイル記述間違い

##エラー解消の流れ
1~3が間違っていないか確認。

“`
ルーティング
delete ‘/users/:id’, to: ‘users#destroy’

コントローラー
def destroy
user = User.find(params[:id])
user.destroy
end

削除ボタン追加
<%= link_to '削

元記事を表示

return/break/nextの使い方(Ruby)

Ruby3.1
制御構造return
制御構造break
制御構造next

#return
Rubyのようなオブジェクト指向の言語の関数をメソッドと呼ぶ
breakは式の値を戻り値としてメソッドを終了する

“`ruby
def ex
10.times do |i|
if i == 7
return i
end
end
end
#メソッドexを実行します(戻り値はi)
ex
#=> 7

#戻り値を省略するとnilが返る
def ex
10.times

元記事を表示

【Ruby】条件分岐 if文 gets to_iメソッド

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

開発環境
rails 6.0.4.4
ruby 2.6.5

##問題内容
ターミナルから数字を入力して、数字に応じて以下のように出力するプログラムを書いてください。

**・10以下なら10以下の数字です**
**・10より大きい数値なら10より大きい数字です**
**・10以下でかつ0以下なら0以下の数字です**

ソースコードは以下の雛形を使ってください。

“`ruby
input = gets.to_i

# ここからソースコードを書いてください
“`

##解答

“`ruby
input = gets.to_i

if input <= 0 puts "0以下の数字です" elsif input <= 10 puts "10以下の数字です" else puts "10より大きい数字です" end ``` ##解説 **①ターミナルから数値を入力する書き方** **②条件分岐の書き方** の2つに分けて解説します。 **①ターミナルから数値を入力する書き方** ターミナルから数値を入力するには**gets**とい

元記事を表示

円の方程式/円周率/ルート/切り捨て/切り上げ(Ruby)

Ruby3.1
MathモジュールPI
Mathモジュールsqrt
Floatクラスfloor
Floatクラスceil

xy軸の座標で(0,0)を中心点とする
円の方程式  x² × y² = 半径²

“`ruby
#円周率
p = Math::PI
puts p
# => 3.141592653589793

#平方根を求める方法:√2の場合
Math.sqrt(2)
#

元記事を表示

rails5.2.6で複数モデルのDM機能(ActionCable)を実装

#はじめに
DM機能でActionCableを使ってみた。
ActionCableを使えばページをリロードしなくてもメッセージがリアルタイムに表示されるのでかっこいい。

###お世話になった記事
ほとんど知識がなかったので下記のサイトを参考にさせていただきながら作成しました。

[リアルタイムチャットは誰でもつくれる~Action CableでDM機能を作ろう~](https://qiita.com/OgawaNorihiro/items/6d9f85d8e89d1def4f15)
[[Rails5.2 ActionCable]シンプルなチャットアプリを作ってみた!!](https://qiita.com/kskumgk63/items/660d76488659ee6da350)
[Rails 5 + ActionCableで作る!シンプルなチャットアプリ(DHH氏のデモ動画より)](https://qiita.com/jnchito/items/aec75fab42804287d71b)

###開発環境

ruby 2.6.3
Rails 5.2.6

#前提条件
DM機能を一

元記事を表示

[Elixir]RubyやRailsのメソッドは便利なものが多いので、それらをElixirでも使えるようにしたライブラリをリリースしました。

## 多言語を習得する際の困り事

「Rubyだと配列からnullを排除する時 `compact`で出来たけど、Elixirだとどう書くんだろう。。
あれ、`Enum.select` って無いのか `Enum.filter`を使えばいいのね!」

Elixirを学習中に、上記のような **ちょっと調べればわかるけれども、ちょっと調べないといけない**ような事が、ちょくちょく発生しました。
## RubyやRailsのEnumerable系メソッドをElixirでも使えるようにしました!

RubyやRailsはその歴史の長さや、コミュニティの厚さにより、便利なmethodや直感的なaliasが多数定義されてます。
それらの資産を有効活用できないかと思い、**REnum**という、ElixirのmoduleをRuby/Rails風に拡張したライブラリをリリースしました。

https://hexdocs.pm/r_enum/readme.html

なぜ、Enum(Enumerable)等に焦点を当てたかというと、Elixirの得意とするデータ変換にはEnum(Enumerable)等の

元記事を表示

rails newでコケたときの備忘 m1 mac macOS 12.1

#書いた理由

備忘のため。
ググってもダイレクトに出てこなかったので、同じところで詰まっている人の参考になれば。

#起こったこと

`rails new`
を叩いたら以下のメッセージでコケた

“`
/Users/hoge/.rbenv/versions/2.7.4/lib/ruby/gems/2.7.0/gems/bootsnap-1.9.4/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:23:in `require’:
dlopen(/Users/hoge/.rbenv/versions/2.7.4/lib/ruby/gems/2.7.0/gems/bootsnap-1.9.4/lib/bootsnap/bootsnap.bundle, 0x0009):
tried: ‘/Users/hoge/.rbenv/versions/2.7.4/lib/ruby/gems/2.7.0/gems/bootsnap-1.9.4/lib/bootsnap/bootsnap.bundle’ (mach-o file, b

元記事を表示

{Rails}uninitialized constant * (NameError)と出た場合の対処法

①やりたいこと
rails cでレコードを確認&作成したいが、uninitialized constant User (NameError)と出てしまう。※Userはモデル名です。

②エラー内容

“`
% rails c
Running via Spring preloader in process 18643
Loading development environment (Rails 6.1.4.4)
irb(main):001:0> User.all
(irb):1:in `

‘: uninitialized constant User (NameError)
“`

③原因
uninitialized constant * (NameError)は、Rubyで「定数やclassが定義されていない」ことを意味しています。
ファイル名の記述間違いなどで、呼びたいクラス名を記述できていない場合などで発生します。
この場合はコントローラー名が間違っていたみたいです。

④解決策
ターミナルを遡ってみると、コントローラーを作成しているとこ

元記事を表示

プログラミング言語別のswitch文

#変更履歴
– 2022/1/16
– Rubyの「case in」追加
– C言語の文字列比較あたりの記述修正
– まとめの表にbreakの有無追加

#初めに
switch文に初めて触れたのは、業務改善でC言語を使った時です。
場合によってifの分岐より簡潔に記述できるswitch文は好きな処理です

ライブラリが豊富で汎用性があるpythonを使っていて
「switch文なぜなんでないんだ・・・。」と、ずっと引っかかっていました。

そんなことを忘れかけていた中、twitterを見ている時に
pythonのバージョン3.10.0にてswitchと同じ動作をする
matchが追加されていることを、先日知りました。(リリースが2021年10月の様です)

今まで長文まとめるの時間かかるな、そんないい記事書けないなと
アウトプットはすぐ投稿できるTwitterに逃げていましたが
switch文でQiitaデビューしようと思いました、暖かい目でご覧ください

###書くこと

– match関数とif関数の違い(python)
– プログラミング言語でのswitch文の違い(C言語

元記事を表示

ログインはしてるけど違うアカウントの人ができることを制限したい

ログイン自体していない人はauthenticate_user!でログイン画面に飛ばせるのは前回の記事の話。
前回の記事→https://qiita.com/JkzW1QJsgjPBxa/items/f834c85a420cd253d6bd

が、ログインはしてるけど**別のIDの人**はこれでは**防げない**。

URLを直接入力しちゃえば別のIDのページに行けちゃう。

例えばID1でログインしている人がてへっとID3の人の情報を覗いたり書き換えちゃったり消しちゃったりは、authenticate_user!では防げない。

ので、コントローラーにそれを防ぐ記述をしてみたよ。
(注意:未解決部分あり)

##before_action
コントローラーで、通ってほしいクラスを書くと、指定するアクションに行く前に通ってもらえる。

“`ruby:コントローラー
class ActorsController < ApplicationController before_action :move_to_root, only: [:show, :create, :update] #←コ

元記事を表示

Rubyのgemのコードリーディングをする時の備忘録

rubyのgemのコードリーディングをする時によく利用したことを 備忘録としてメモ。
(随時更新する。)

※rubyのバージョンは3.1.0

## gemのファイルの場所を知りたい時

`$LOAD_PATH.grep(/serach_word/)`で検索できる。

例)devise関連のgemの場所を知りたい場合

“`
rails c
irb(main):010:0> $LOAD_PATH.grep(/devise/)
=>
[“YOUR_PATH/.rbenv/versions/3.1.0/lib/ruby/gems/3.1.0/gems/devise-4.8.1/lib”,
“YOUR_PATH/.rbenv/versions/3.1.0/lib/ruby/gems/3.1.0/gems/devise-4.8.1/app/controllers”,
“YOUR_PATH/.rbenv/versions/3.1.0/lib/ruby/gems/3.1.0/gems/devise-4.8.1/app/helpers”,
“YOUR_PATH/.rbenv/versio

元記事を表示

【個人開発】海とサーフィンが好きすぎて、海のように見え方が変わるサーフィン日記共有サービスを作ってみた。

# **はじめに**

天気が雪の日は雪が降ります。

![https://i.gyazo.com/8a18102d9f03a7b6e44496ba03032d79.gif](https://i.gyazo.com/8a18102d9f03a7b6e44496ba03032d79.gif)

サーフィンをしたことがありますか?

一度きりの人生、自然と一体になれるこんな素晴らしいスポーツをやってみる事もしないなんて勿体ない事です。

私は海とサーフィンを愛しています。

自身の大好きなものを題材に作品を作って誰かの心に届くものにしたい!そんな想いがあります。

初めまして。りゅうじと申します。

【Twitter】

[https://twitter.com/otokomigakimasu](https://twitter.com/otokomigakimasu)

【今回作ったサービス】

[https://www.namikki.jp](https://www.namikki.jp/)

**私はエンジニアの方は全員海の近くに住んでサーフィンをした方がいいと思っています。**

元記事を表示

[Ruby]バイナリーサーチとは

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

バイナリーサーチを用いた問題、理屈はわかるが、実際自分でコードを描こうとすると脳が混乱…。
ので、自分なりに整理してみようかと。

##”バイナリーサーチ”とは
ソート済みのリストや配列に入ったデータ(同一の値はないものとする)に対する検索を行うときに用いられる手法。
中央の値を確認し、検索したい値との大小関係を用いて、検索したい値が中央の値の右にあるか、左にあるかを判断。
それを繰り返し、片側には存在しないことを確かめながら検索していく方法。

例)ある配列にある13の位置を知りたい

|2|3|5|6|`8`|10|11|13|16|
|-|-|-|-|-|–|–|–|–|
4番目の”8″が要素の中央。13は8より大きいので、次は`”10″を左端として検索`

|10|`11`|13|16|
|–|–|–|–|
6番目の”11″が要素の中央。13は11より大きので、次は`”13″を左端として検索`

|`13`|16|
|–|–|
7番目の”13″が要素の中央。検索したい13と合致

「13は配列の7番目」

という

元記事を表示

each.with_indexメソッド(Ruby)

Ruby3.1
Enumeratorクラスwith_index
Enumerableモジュールeach_with_index
要素にインデックスを添えて繰り返す

“`ruby
a = [“a”,”b”,”c”]
a.each.with_index(2) do |s, i|
puts “#{i}:#{s}”
end

2:a
3:b
4:c
#each.with_index(引数)とすることで、引数を受け取る。
#each_with_indexは引数を受け取らないため、添字は0から始まる
“`

元記事を表示

【共同開発】欲しいものを買う優先度をランキング形式で提示するサービス「HoshiMe」をリリースしました!

# はじめに
早速ですが質問です。衝動買いをして後悔した経験はありませんか?

私はよく後悔しています。。
ずっと欲しかったものがあったにも関わらず、違うものを衝動買いしてお金を使ってしまい、本当に欲しかったものを買うためのお金がなくなってしまったことがありました。

そんな悩みを解決するために開発したのが、欲しいものを買う優先度をランキング形式で提示するサービス **『HoshiMe』(ほしみぃ)** です。

https://hoshime.herokuapp.com

# 使用技術
**バックエンド**
– Ruby 2.6.6
– Rails 6.1.4

**フロントエンド**
– TailwindCSS
– JavaScript(jQuery)
– Chart.js

# 主なサービス内容
### 欲しいもの登録ページ
ユーザ登録なしで欲しいもの3つ登録できるように実装しました。
three_items

  • OTHERカテゴリの最新記事