Ruby関連のことを調べてみた2020年11月30日

Ruby関連のことを調べてみた2020年11月30日

RailsにおけるRESTfulな設計とはなにか?

#RESTfulとは

>RESTful APIは、基本的に「RESTの原則」に従って実装されているWebシステムのHTTPでの呼び出しインターフェースのことを指します。
>>https://blog.api.rakuten.net/ja/jp-restful-api/#:~:text=REpresentational%20State%20Transfer%E3%81%AE%E7%95%A5,%E3%81%AE%E3%81%93%E3%81%A8%E3%82%92%E6%8C%87%E3%81%97%E3%81%BE%E3%81%99%E3%80%82

___なるほど..わからん。___

Railsの根本的なところやん?こんなに理解がぼんやりしていてええの?
ってことでこの曇った視界をはっきりさせていく。

#RESTful
アプリケーションを構成するリソースをHTTPリクエスト(GET/POST/PUT/DELETE)で作成、読み出し、更新、削除できる仕組み

要するに___URLに対してどのHTTPリクエストを送るかでそのあとの動作をより分けている___イメージか。

__

元記事を表示

Recursive(再帰)とClass化の冒頭

# Document\_Links

– [チャート式ruby-V(Recursive Fibonacci)](https://qiita.com/daddygongon/items/1bb27b8920c201d5c520)

# Recursive(再帰)

## フィボナッチ数列を解く

今回はフィボナッチ数列を解いてくわけだが,フィボナッチ数列って知ってるよね?

私が初めにその名前を聞いたのは映画「ダ・ヴィンチ・コード」かな?+(まあ,あれは初項の0が無かったが)+

ということで,フィボナッチ数列ってのは

– `F(0)=0, F(1)=1, F(n+2)=F(n)+F(n+1) (n>=0)`

で定義される漸化式です.

## 解説

### 第1項と第2項について

前述したように,第1項と第2項は0,1なので,とりあえず,その部分を判定する関数を書く.

“`ruby:
def fib(n)
if n == 0
return 0
end
if n == 1
return 1
end
end

require ‘

元記事を表示

Nature Remo Local APIを用いて、LAN内のRailsアプリからNature Remoを操作する

## 概要

LAN内だけでNature Remoを操作できるRailsアプリケーションを作成しました。[Nature Remo Local API](https://local-swagger.nature.global/)を利用しています。

あらかじめ家電のリモコンの赤外線信号をDBに保存しておくことで、Nature Remoのサーバとの通信がうまくできない場合でもNature Remoから赤外線信号を送信できます。ラズパイ等で起動しておけば非常時に活躍すると思います。

リポジトリ:[chappy30313331/nature_remo_local](https://github.com/chappy30313331/nature_remo_local)

### デモ

![demo](https://raw.githubusercontent.com/chappy30313331/nature_remo_local/main/public/demo.gif)

### 環境

下記の環境で動作確認しています。

– Nature Remo ファームウェア
– `Re

元記事を表示

Railsで起きた最初のエラー

こんばんは、ピチピチの社会人です。

本日はRailsで起きたエラーについてです。

##問題

RailsでCRUD処理について学んでいる時、ルート、コントロール、ビューの順にコードを書き、rails sをした時に以下のエラー文が出ました。

![スクリーンショット 2020-11-29 23.43.10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/800544/2bc92da4-83b9-564e-e6a7-54afbe564244.png)
エラー表示怖すぎ、、とりあえずエラー文を読んでみる。
色々調べてみるとどうやらビューファイルに問題があるらしい。

“`routes.rb
Rails.application.routes.draw do

get ‘/users/new’, to: ‘users#new’
post ‘/users’, to: ‘users#create’
end

“`

“`users_controller.rb
class UsersControll

元記事を表示

初心者がRailsサーバー立ち上げるための環境構築で苦戦した話

#概要
progateの手順通りにすすめていくと、見事にハマって全然手順どおりに行かず。。。
ようやく「Yay! You’re on Rails!」の画面を拝むことができたので、
環境構築で躓いた部分を備忘録として書き残します。初心者が環境構築で挫折してしまう気持ちがわかりました。。。

#環境
・macOS Catalina ver10.15.7
・ruby ver2.7.2p137 (2020-10-01 revision 5445e04352) [x86_64-darwin19]
・rbenv ver1.1.2
・Rails ver6.0.3.4
・homebrew ver2.5.12
・yarn ver1.22.10
・nodebrew v8.9.4
・node.js v15.3.0

#ハマったことろ
1.Homebrewインストール
2.rbenv / ruby-buildインストール
3.webpackerインストール
4.nodebrew / node / yarnインストール

###1.HomeBrewインストール
以下のエラーで

元記事を表示

Railsの名前空間

#概要
アプリケーションにて管理者専用画面を作ろうとした際、名前空間(namespace)という概念を採用したのでどのようなものなのか簡単にまとめてみます。

#名前空間とは
元々のクラスに対しモジュールを追加したクラスを新たに作成する。その時、元々のクラスとモジュールを追加したクラスは別物と区別されます。その状態を**別の名前空間にある**という。

“`ruby:例
# 下記二つのクラスは別物と区別される
Admin::UsersController
UsersController
“`

このように二つのコントローラを分ければ、管理者と一般ユーザーを容易に別のコントローラで分けることができます。

#ディレクトリの設定
名前空間を使った場合、ディレクトリは名前空間ごとにサブディレクトリを作ります。

#名前空間を使ったルーティングの設定
ルーティングの設定はnamespaceメソッドを使用し、引数に名前空間の名前をシンボルで設定し、ブロックで囲みます。

“`ruby:例
namespace :admin do
root “top#index”
resources

元記事を表示

【RSpec-rails】ユーザーモデル単体テストコード

### はじめに`rspec-rails`、`factory_bot_rails`、’fakerを導入する

“`:Gemfile

group :development, :test do
gem ‘rspec-rails’
gem ‘factory_bot_rails’
gem ‘faker’
end
“`

### 次にターミナルで`$ bundle install`、` rails g rspec install`を行う。作成された.rspecファイルに`–format documentation`(表示の出力がきれいになるようにフォーマットを指示する)を記述

“`:ターミナル
$ bundle install
$ rails g rspec install
“`

“`:.rspec
–format documentation
“`

### 仕様に沿ったユーザーモデルのデータを設定する
重複したemailは登録できないことにしているため、uniqueを付けて一意となるようにする

“`ruby:spec/factories/users

元記事を表示

メタプログラミングRuby(第I部・金曜日まで)を読んでいく

# 第5章 木曜日:クラス定義

– JavaやC#におけるクラスの定義は、あなたが「これがオブジェクトに期待する動作です」と言うと、コンパイラが「了解。やってみます」と答える。クラスのオブジェクトを生成して、メソッドを呼び出すまでは何も起こらない。
– Rubyにおけるクラスの定義は違っており、classキーワードは、オブジェクトの動作を規定しているだけではなく、実際にコードを実行している。

1. クラスマクロ(クラスを修正する方法)
2. アラウンドエイリアス(メソッドでコードをラップする方法)

## クラス定義

– クラス定義にはメソッドの定義だけでなく、あらゆるコードを置くことができる。

“`rb
class MyClass
puts ‘Hello’
end

# => Hello
“`

– メソッドやブロックと同じように、クラス定義も最後の命令文の値を返す。

“`rb
result = class MyClass
self
end

result # => MyClass
“`

– クラス(やモジュール)定義の中では、クラスがカレンとオブジェクト

元記事を表示

Amazon LinuxインスタンスにRails6をインストールするまでの手順

## この記事でやろうとしていること
タイトルの通りですが、Amazon LinuxインスタンスにRails6.0.3をインストールするまでの流れです。
なぜRails6.0.3か?というのは、おなじみ「[Railsチュートリアル](https://railstutorial.jp/ “Railsチュートリアル”)」の第6版で指定されているバージョンだから、というだけです。

RailsチュートリアルではAWSの統合開発環境 (IDE)「[Cloud9](https://aws.amazon.com/jp/cloud9/ “AWS Cloud9”)」の利用を前提としています。Cloud9はRailsをインストールする上での前提パッケージが既に入っているので、

“`
$ gem install rails -v 6.0.3
“`

と叩くだけですんなりRailsが入ってくれますが、一歩cloud9という温室から外に出るとそうはいきません。

というわけで、何番煎じかはわかりませんが、少なくとも筆者はいろいろググって何とか解決したので、需要はあるはず。さっそく解説に入っていきます。

元記事を表示

【Rails】DBと連携してプルダウン(ドロップダウン)メニューをつくる(勉強中)

SIer企業で働く社会人4年目OLです。
仕事をやめる予定はないのですが、手に職をつけていつか副職ができるといいなと思いWEBアプリ開発の勉強し始めました。(2ヵ月くらい)

練習でWEBアプリ開発をしていますが、初めてつまったのがプルダウンメニューの作成なので勉強がてらまとめてみます。同じように悩んでる人の役に立てたらいいなと思います。

勉強始めたばかりなのでここ違うよ!っていうところがあればご指摘いただけると嬉しいです。

#やりたいこと
DB(Gameモデル)に格納しているデータをプルダウン(ドロップダウン)で選択して別のDB(Stageモデル)に保存したい。

![プルダウン.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/797344/7cf713aa-8ecb-463d-be5e-c472248c215f.png)
###モデル設計

####Gameモデル
| カラム | 型 |
| —- | —- |
| id | integer |
| game_name

元記事を表示

swiperを導入したけど画像のレスポンシブがうまくいかないよ

##はじめに
Railsで自作アプリを開発中の私。(bootstrapを使用)
swiperを使ってサイトの見た目を良くしたいと思い、さっそく導入することに。

その結果、問題なく動きました。

レスポンシブ対応もしました。

ただ、**画像がレスポンシブ対応してくれませんでした。**

swiperを使うときswiper-containerにheightを設定しますが、画面サイズが小さくなってもheightが固定なので変な余白が生じてしまいます。
またいい感じに調節しても画面幅を小さくすると、画像が見切れるといった別の問題が発生します。

私は当初、メディアクエリを用いてブレイクポイントごとにheightを変更するゴリ押し方法でこれらの問題を解決していました。(これが普通かもしれません。)

でもせっかくbootstrapを使用しているのに追加でメディアクエリを使うのはなんか嫌だなと思ったり。

そんなとき簡単に解決する方法を見つけました。
共有させていただきます。

##こんな人に向けて
1.Rails+bootstrapの開発中でswiperを使用したが、レスポンシブがうまくいか

元記事を表示

マルチスケールシミュレーション特論

# Introduction

[マルチスケールシミュレーション特論](https://qiita.com/daddygongon/private/48619d343221f405b6d7)の講義内容などを自分なりにまとめていく

# Lecture

– [week9] [Assert&Rubular](https://qiita.com/evendemiaire/items/6faaf8d014ac8067ddbc)
– [week8] [Rakeで自動化&Export](https://qiita.com/evendemiaire/items/4dbcfb1819fc23ac8ba9)
– [week7] [Rubyのお勉強<制御構造\_Ifとか>](https://qiita.com/evendemiaire/items/4f9550981bd3d6017cdd)
– [week6] [Rubyのお勉強<変数とMethod>](https://qiita.com/evendemiaire/items/8d6bfc813a1ce5534b02)
– [w

元記事を表示

【個人アプリ作成】情報管理アプリ制作1日目

Toshiです!自分の経過を残すために、個人アプリの制作の記録を残していこうと思います!!

正直、覚えたことを落とし込むのでは習慣を守るのがかなり厳しい、、、、
と言うわけで自分のキャッチアップや技術配信と、自分の個人アプリやPF作成などの成長日記の二本軸で書いていこうと思います!!

#そもそも何を作ろうとしているか

私は某プログラミングスクールでruby on railsやJSを学びました(まだ通学中ですが、、)。3ヶ月で一通りの作成要件は完了し、個人アプリ作成に移りました。
今作っているのは、引継ぎや情報管理の場面をメインとした少しBtoB向けの情報統制アプリを作っています。

簡潔に言うと情報管理して、検索とかですぐ見つけられる、「小さなGoogle+Trello」的なイメージです!

#今日やったこと

前提として1日目とか言いましたが、アプリの要件定義やペルソナを、画面デザイン、部分的にはDB設計などを行い、この日を迎えています。これらも踏まえた反省とやったことを今回は記載しようと思います。

今日やれたこととしては
>・アプリケーション作成
・devise ジェ

元記事を表示

Rspecのシステムテストでクッキーに関するテストしてみた

#はじめに
皆さん始めまして!
駆け出しエンジニアのプージニアことpoo3です!
今回初投稿となるので多めに見ていただけると幸いです。

###対象となる読者様
・Rspecのシステムテストでクッキーに関してテストを行いたい方

###参考記事
@rokさんの記事
https://qiita.com/rok/items/09f5cab47338d0fa9188

##結論:gem ‘show_me_the_cookies’を導入しよう
まずはGemfileに ‘show_me_the_cookies’を追加

“`ruby:Gemfile.rb
gem ‘show_me_the_cookies’
“`

次にみんな大好き ‘bundle install’ ??

“`
bundle install
“`
rails_helperの中でインストールした’show_me_the_cookies’を使えるようにincludeする
(システムテストの中で使う事を想定しております)

“`ruby:rails_helper.rb
config.include ShowMeTheCook

元記事を表示

reactでonClick実行時に引数を渡す

## 呼び出すとき
– bindを使う
– `onClick={this.handleClickDelete.bind(this, “渡したい値”)}`

“`react

“`

## onClickを受け取る側の関数
– `handleClickDelete(SubDomainName)`の形で受け取る
– `console.log(SubDomainName)`のように使う

“`react
handleClickDelete(SubDomainName) {
console.log(SubDomainName)
const json = {“Name”:SubDomainName};
const convert_json = JSON.stringify(json);
const obj = JSON.parse(convert_

元記事を表示

【Rails】carrierwave(キャリアウエーブ)で動画の投稿(保存) 

#はじめに
キャリアウエーブ(carrierwave)を導入しました。
画像ではなく、動画の投稿方法を紹介します。
 
###目次
1. carrierwave導入
2. 動画の保存準備
3. 動画の投稿

#開発環境
ruby 2.6.5
rails 6.0.0

#実装
それでは実装していきます〜

#1. carrierwave導入
まずはGemをインストールします。

“`:ターミナル
gem “carrierwave”
“`

“`:ターミナル
bundle install
“`
gemを読み込むために、`rails s` して必ずサーバーを再起動させてください。

##1.2 アップローダークラスの生成
動画専用のファイルを作成します。

“`:ターミナル
rails g uploader video_top
“`

構文はこちらです。

“`:ターミナル
rails g uploader アップローダー名
“`
今回はvideo_tpoという名前で作ります。

そうすると以下の様なファイルが自動生成されます。

![スクリーンショット 2020-1

元記事を表示

Nginx+Unicorn(WEB/APサーバーの分離構成)で静的ファイルが読み込めない対処について

アプリをAPサーバー側にデプロイし、Nginxを使ったリバースプロキシ設定を行ったところ、以下画像のようにcssがうまく読み込めない問題が発生したので、その解決までの工程を忘れないようにメモしておきます。

![qiita1.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/867277/156ab0f8-794b-192f-b58a-cad0e7b53790.png)

##今回の環境

![リバースプロキシ.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/867277/fff53b33-c7af-a6f6-d4ce-d3853497795b.png)

– WEBサーバーにはNginx
– APサーバーにはUnicorn
– ruby -v 2.6.6
– rails -v 5.2.4.4
– PC Windows10

##Google Chromeで検証
Chromeでエラーの出ているページを開いたら、F12か右クリッ

元記事を表示

RailsのTransactionの使い方について

#はじめに
はじめまして。
railsを使用した開発を行っている実務経験1ヶ月のひよっこです。
業務の中でトランザクションの処理の実装を担当させていただく機会がありましたので復習のために投稿させていただきます。
下記投稿の内容は
http://markdaggett.com/blog/2011/12/01/transactions-in-rails/
という内容を一部和訳したものとなっています。

#対象
railsを触り始めたばかりの初学者向けの内容となっております。もちろん経験者の方大歓迎です。不足している部分や間違っている部分ありましたらご指摘いただけますと大変嬉しいです。

##Transactionの目的
複数のSQL文の変更に対して、全てのアクションが成功した際にDBの変更を発生させるという条件を守らせるために使用するのがTransationの目的です。Transactionにより、データの統一性を保つことができます。
下記のコードは本を100円で購入→本のデータを保存→balance(残高)の保存という3つの処理の例を表しています。この中でどれか一つが失敗する、例えば

元記事を表示

rubyzip でZIPを作るときに秒がズレないように日時を入れる方法

`Zip::Entry.new` の後ろの方に日時を渡すのではなく、インスタンスの `time=` に渡すと秒がズレないようです

“`ruby
entry = Zip::Entry.new(zos, “foo1.txt”, nil, nil, nil, nil, nil, nil, dos_time)
“`

“`ruby
entry = Zip::Entry.new(zos, “foo2.txt”)
entry.time = dos_time
“`

下のが検証したコードです

“`ruby
require “zip”
require “zip/version”
require “time”

Zip::VERSION # => “2.3.0”

created_at = Time.parse(“2020-01-01 00:00:05”) # => 2020-01-01 00:00:05 +0900
dos_time = Zip::DOSTime.from_time(created_at) # => 2020-01-01 00:

元記事を表示

find_or_initialize_byとfind_or_create_byは何が違う?

#はじめに
`find_or_initialize_by`と`find_or_create_by`という便利なメソッドがありますが、今まであまり意識せず使っていました。
ふと違いが気になったので調べてみました!

#書き方
`モデル.find_or_initialize_by(条件)`
`モデル.find_or_create_by(条件)`

#両メソッドの違い

`find_or_initialize_by`
条件を指定して初めの1件を取得し,1件もなければ作成(new)

`find_or_create_by`
条件を指定して初めの1件を取得し,1件もなければ作成(create)

つまり新規作成して保存するか、しないかです。

#ソースコード
既に存在する場合は既存のレコードを取得

“`
User.find_or_initialize_by(name: “花山薫”, age: 20)
User Load (0.1ms) SELECT “users”.* FROM “users” WHERE “users”.”name” = ? AND “users”.”age” =

元記事を表示

OTHERカテゴリの最新記事