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

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

EC2のRailsを起動する

##はじめに
こちらの記事は「AWSのサーバーを利用する」ための3つ目の記事です。
1つ目の記事を読まれていない場合は → [こちら](https://qiita.com/maca12vel/items/902dde37a267ceca1c53)
2つ目の記事を読まれていない場合は → [こちら](https://qiita.com/maca12vel/items/68d6ae3d4308e330847d) からお願いいたします。

##EC2のサーバーに開発中のアプリケーションのコードをクローンする準備
###EC2サーバーのssh鍵のペアを作成し、GitHubにssh鍵を登録する

ターミナル(EC2内)で以下のコマンド入力して、EC2サーバのssh鍵ペアを作成
※途中で「passphrase」など3段階ほど入力を求められることがあるが、すべて何も入力せずにEnterキーを押す

“`
[ec2-user@ip-***-**-**-*** ~]$ ssh-keygen -t rsa -b 4096
Generating public/private rsa key pair.
E

元記事を表示

テストコードを書くときに、ランダムで情報を生成したい

【概要】
—————————————-
1.結論

2.導入方法

3.ニックネーム,email,パスワードの書き方

4.別の書き方

補足:日付/苗字・名前(漢字とカタカナ)の書き方

1.結論
—————————————-
gem”faker”をgemfileに記載し、bundle installする。
そして、specフォルダにfacroiesフォルダを作り記載したいファイルを作ってプログラミングする。

2.導入方法
—————————————-
※ここではgem”rspec-rails”,gem”factory_bot_rails”の導入の話は割愛します!その2つをbundle installしている前提でお話しします。”Rspec”,”FactoryBot”の記事を投稿した場合はこちらにもリンクを貼らせていただきます!

元記事を表示

JavaScriptの概要と基礎的な文法

“`
前提
プログラミングを始めたて(1~2ヶ月)の自分が学習した内容をまとめています。
実際の現場では通用しないことや間違いなどあるかもしれません。
お気づきの際はコメントにてご報告いただければ幸いです。
“`
## JavaScriptは何ができる?
JavaScriptというとプログラミングを全く知らなかった私でも聞いたことのある単語でした。
そしてプログラミングを学び始めるまではプログラミング言語であるということすら知りませんでした。
### JavaScriptとはなにか。そして何ができるのか。
Javascriptとは?
JavaScriptはクライアントサイドで主に使われる言語
ブラウザ上のアプリの使いやすさやリクエストの贈り方の工夫ができる
#### 具体的な役割の例
・ページ遷移無しで画面の表示を切り替え
カーソルを合わせると動的な動きをする仕組み
webページの上部のグローバルメニューにカーソルを合わせると項目が出てくるようなあれです。
・画面を更新せずにサーバーから値を取得
twitterでいいね押すとその画面で数値が増えたり減ったりがページの更新をせずに見れ

元記事を表示

save!メソッド

フリマアプリを作成中、キーは取得できているのにデータが保存されない原因が分からなかった。メンターさんに質問したところ原因を探る方法を教えてくれたのでメモ。

# save/save!メソッドとは
データを保存するためのメソッド。

### saveメソッド
saveメソッドは、保存に成功したらtrueを、保存に失敗(バリデーションに失敗)したらfalseを返す。

### save!メソッド
save!メソッドは、保存に成功したらtrueを返すが、保存に失敗(バリデーションに失敗)したら例外が発生します。だから、保存できなかった場合の処理はrescue節で行う必要がある。

■私の場合、`binding.pry`を使用したところ、キーは取得できていたので、`@user.save!`を使って原因を探った。
↓保存できなかった時の記述

“`
[8] pry(#)> @user.save!
(0.2ms) BEGIN
↳ (pry):12
User Exists (13.4ms) SELECT 1 AS

元記事を表示

Rubyドリル 閏年問題

#####問1.

ある年のある月の日数を求めるメソッドを作りましょう。
問題となるのは2月、つまり閏年かどうかですね。  

閏年かどうかは以下の判定基準があります。

① その年が4で割り切れる場合は閏年の可能性がある

まず、閏年は4で割り切れる年であることが最低条件ですね。4で割り切れる年は閏年である可能性があります。ただし、4で割り切れるだけでは閏年とはかぎりません。例外が1つだけあります。

② 年が100で割り切れて400で割り切れない場合は閏年ではない

これが厄介な条件です。その年が4で割り切れても100で割り切れて400で割り切れない場合は閏年でないのです。

では具体的な例を見てみましょう。

例1:2000年

2000年は4で割り切れますね。そして100でも割り切れます。さらに400でも割り切れます。100でも400でも割り切れるので、2000年は閏年となります。

例2:1900年

1900年は4で割り切れますね。そして100でも割り切れます。ただし、400では割り切れません。100で割り切れて、400で割り切れないため、1900年は閏年ではありません。

元記事を表示

【Ruby】結局`!!`って何のために使うの?

####はじめに

ぐぐってもピンとこない、、、なくなくないみたいな日本語使ってる違和感がある、、、

という事で調べて見た僕なりの解釈で書きます

####`!`は論理演算子

論理演算子とはtrueかfalseを返す演算子の事

論理演算子には他には`and`や`or`等もある

`!`はオブジェクトを評価して

nilかfalseならtrueを返す

trueならfalseを返す

それが`!`

つまり否定の論理演算子
>例

>“`
irb(main):018:0> !nil
=> true
irb(main):019:0> !false
=> true
irb(main):020:0> !true
=> false
“`

####`!!`は否定の否定の論理演算子

nilかfalseならfalseを返す

trueならtureを返す

つまり否定の否定の論理演算子
>例

>“`
irb(main):025:0> !!false
=> false
irb(main):026:0> !!nil
=> false
irb(main):027:0> !!true
=> t

元記事を表示

jbuilderちょっとした小技

“`ruby
json.id @hoge.id
json.name @hoge.name
json.age @hoge.age

# { id: 1, name: “hoge”, age: 1 }
“`

“`ruby
json.extract! @hoge, :id, :name, :age

# { id: 1, name: “hoge”, age: 1 }
“`

と同義です。

配列の中にObjectが存在しない場合[]を、返したいときは

“`ruby
json.hoges @hoge.hoges do |hoge|
json.extract! hoge, :id, :name, :age
end

# object が存在する時
# { hoges: [{id: 1, name: “hoge”, age: 1}] }

# object が存在しない時
# { hoges: [] }
“`

とかけます。

Objectが、nilの時はnullを返したい時

“`ruby
json.extract! @hoge, :id, :name, :age

元記事を表示

Cを使ってRubyのメソッドを書く (Numo::NArray編)

###はじめに
C++でRubyの拡張ライブラリを書く方法は、「[C++を使ってRubyのメソッドを書く](https://qiita.com/ki073/items/b35e1e0ecc4862ea3c14)」にありますので参考にしてください。C++さえ書ければほとんど苦労せずにライブラリが作成できるように思います。
ここでは、Cで書かれた関数を拡張ライブラリにする方法を紹介します。

###単純な変数への受け渡し
簡単な例として、単純な変数を受け渡しする関数を書いてみました。ごく普通のCの関数です。SWIGを使ってRubyから呼び出せる拡張ライブラリを作ってみます。
2倍の値を返す関数と文字列の長さを返す関数です。

“`c:test1.h
#include

double twicefold_d(double x);
int string_length(char* str);
“`

“`c:test1.c
#include “test1.h”

double twicefold_d(double x){
return(x*2.0);
}

in

元記事を表示

GraphQLで変数を用いたクエリを作成する方法【Ruby on Rails使用】

#はじめに
※本記事は
前回の記事「[RailsでGraphQL APIからデータを取得・表示する](https://qiita.com/hinokage/items/243b55477172317eb126 “Qiia”)」の追記内容です。
よろしければ前回の記事から読んでいただけると有り難いです(ダイレクトマーケティング

前回の記事で紹介したGraphQLのクエリの書き方において
「変数をクエリの中で使うにはどうすればいいの?」と疑問に持つ方がいらっしゃるかと思います。

私の場合は
REST APIで取得したデータをGraphQL APIに渡したかったので
どうすればクエリに変数を組み込めるんだろう?という疑問を持ちました。

で、「GraphQL クエリに変数渡す」とかググると
__やっぱり分かりやすい記事がヒットしない!__

というわけで今回も、初学者の方向けに分かりやすく(自分も初学者ですが…
GraphQLのクエリで変数を使う方法を解説しようと思います。

#静的なクエリ
今回は以下のクエリを例に説明します。

“`
query {
repositoryO

元記事を表示

【ruby】今夜、ループ処理まとめてみました【times, break…】

[前回](https://qiita.com/beanbeenzou/items/4c8534b8dc42a10220a9)は、配列に因んだ繰り返し処理など紹介しました。
今回は、配列もしかり。範囲オブジェクト等にも使うようなループ処理に着目して、まとめてみます。

#早見表

###繰り返し処理

|メソッド / 文法|繰り返し回数
|:–|:–
|for ~ in ~文|オブジェクトの要素分
|while文|指定した条件がtrueの間
|until文|指定した条件がfalseの間
|timesメソッド|任意に指定
|loopメソッド|無限

###繰り返し処理に関するテクニック

|文法|機能
|:–|:–
|next|スキップ
|redo|やり直し
|break|中断

#繰り返し回数を変化させるメソッド / 文法たち

##for ~ in ~
要素(範囲)の分だけ、繰り返す

“`ruby

for num in 1..5 do
p num
end
“`

“`console:戻り値
1
2
3
4
5
=> 1..5
“`

##while
条件

元記事を表示

本番環境でデータベースを作成する

##はじめに
こちらの記事は「AWSのサーバーを利用する」ための2つ目の記事です。
1つ目の記事を読まれていない場合は → [こちら](https://qiita.com/maca12vel/items/902dde37a267ceca1c53) からお願いいたします。

##データベースの用意
データベースには以下のような種類がる。

・階層型データベース
・ネットワーク型データベース
・リレーショナルデータベース

この中でもっとも利用されているのが“「リレーショナルデータベース」“
エクセルの表のような形で情報を整理し、管理できる。
そして、このリレーショナルデータベースを管理するソフトウェアは
**リレーショナル・データ・ベース・マネジメント・システム(RDBMS)**と呼ばれる。

そんなRDBMSの中でも代表的なものの1つが“MySQL“
そして、MySQLから派生した“MariaDB“というデータベースもある。

「MariaDB」とは、MySQLの派生として開発されているオープンソースソフトウェア。
MySQLとの互換性があります。Amazon Linux

元記事を表示

EC2の初期設定

##はじめに
こちらの記事は「AWSのサーバーを利用する」ための1つ目の記事です。

##AWSの環境構築
AWSアカウントにログインし、アカウントの隣にある「リージョン」を東京に設定します。

##EC2インスタンスを作成
EC2インスタンスとは、AWSで「仮想マシン」と呼ばれるもの。
「サーバーを生成する」といっても、AWSがすべてのサーバーを物理的に用意しているわけではなく、
実際には「仮想マシン」と呼ばれるソフトウェアを利用して、仮想的に1つのLinuxサーバーを利用できる仕組みを利用しする。

AWSアカウントにログインし、トップページに遷移したら左上の「サービス」から「EC2」を選択
[![Image from Gyazo](https://i.gyazo.com/174eaf75d5cdc41b0d04339c9ae5cc01.png)](https://gyazo.com/174eaf75d5cdc41b0d04339c9ae5cc01)

「インスタンスを起動」をクリック
[![Image from Gyazo](https://i.gyazo.com/78cfbcb

元記事を表示

Railsでlink_toを使ってボタン遷移を実装する

##概要
今回実装したいのは、以下の画像のようなボタンにlink_toメソッドでリンクを与える実装です。

![syuppinn.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/696517/82ac4946-1df3-e606-e9e0-22176c4bf6b1.png)

この’出品する’ボタンをクリックすると、与えた商品投稿ページのリンクへ遷移することができます。

##二通りのやり方がある
この機能の実装には二通りのやり方があります。
なぜlink_toの方が良いのかはわかりません…

・a href要素での記述

“`ruby:xxx.html.erb

出品の画像やテキストの記述

“`

・link_toでの記述

“`ruby:xxx.html.erb
<%= link_to("URL") do %>
 ここにHTMLのコードを記述する
<% end %>
“`

##例
今回の実装で記述したコードを参考例として貼っておきます。

“`rub

元記事を表示

【Rails】wicked pdfの導入方法、ハマったところと対応

##導入方法
“`rb:Gemfile
gem ‘wicked_pdf’
gem ‘wkhtmltopdf-binary’
“`
“`terminal
$ bundle install
$ rails g wicked_pdf
“`
“`config/initializers/wicked_pdf.rb
WickedPdf.config = {
:exe_path => “#{Gem.loaded_specs[‘wkhtmltopdf-binary’].full_gem_path}/bin/wkhtmltopdf”
}
“`
ここで一度サーバーを再起動

“`pdfs_controller.rb
def bill
respond_to do |format|
format.pdf do
render pdf: ‘bill’,
layout: ‘application’,
encording: ‘UTF-8’,
end
end
end
“`
“`erb:views/layouts

元記事を表示

Sinatra と Chartkick でグラフを描画する

# はじめに
前回作成した、*[家族用todoリスト](https://qiita.com/superrino130/items/20f588f6a8b4d607c081#)*を改良してグラフを描画してみました
# 完成画面
![20200828.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/538241/7a0310f0-4acf-eaef-b2bb-4265c882e705.png)

# 設定
“`main.rb
require ‘sinatra’
require ‘sinatra/reloader’
require ‘date’
require ‘active_record’
require ‘rack/csrf’
require ‘chartkick’  # 追加
“`
“`bash.sh
$ ls public/
chartkick.js main.js style.css
“`
publicに`chartkick.js`を仕込みます
# ソース
“`main.rb
get ‘

元記事を表示

crud処理、deviseを使った製作物について(初心者向け)

#### わたしが今回投稿した理由
オンラインスクールで学んだことを活かして
その備忘録として今回執筆することにいたしました。
素人が書いているものなので、もし違っている内容があった場合はご容赦いただけると幸いです。
早速ですが、初めていきましょう。

# 開発環境
– rails 6
– データベース:postgresql(のちにherokuでデプロイさせたかったため)
– VSCode
– 今回はresourcesで使用
 (これを使用したらshow,destroy,update,edit,index等を一括で定義できます)

### コード
rails new 自分の作りたいアプリ名 -d postgresql
❇︎基本railsはSQLite3がデフォルトになっているので、-dとするとデータベースを指定することができる。

### そのあと実行すること
– 自分が作ったアプリ名のフォルダに戻るような感じにする
例)cd my_favorite

#### このあとrails db:createを実行
##### 自分で作ったアプリのフォルダをVSCodeにドロップしてあげる

元記事を表示

2つのdeviseを作成した時にdevise_parameter_sanitizerを個別に設定したい

####2つのdeviseを作成し、個別devise_parameter_sanitizerの設定をしたい時の手順を書きます。
オリジナルアプリケーション作成中です。

ruby ‘2.6.5’
rails ’6.0.0′

まず前提条件として各deviseの、ルーティング、モデル、コントローラー、ビューの設定ができている状態でスタートします。
上記作成方法は[こちら](https://qiita.com/kinpin/items/067eff7d2fbe74d85c83)を参考にしてください。

さて通常1つのアプリケーションに対して1つのdeviseであれば、application_controller.rbファイルにbefore_actionを使ってdevise_parameter_sanitizerの処理を行います。

app/controllers/application_controller.rb

“`ruby
class ApplicationController < ActionController::Base before_action :config

元記事を表示

HTTPメソッドの指定がない場合はブラウザ側はGETでリクエスト

#環境
・Rails 6.0.3.2
・mysql Ver 14.14 Distrib 5.6.47
・osx10.15

#はじめに
Railsで初めてWebアプリを作成中、`form_with`や`link_to`を使用するとき`HTTPメソッド`の指定がないのに`ルーティング`が動いていいることに疑問を感じて調べた内容です。

#ルーティングとは
`URI Pattern`と`HTTPメソッド`を受け取り、どのアクションを動かすかを指定する役割があります。
なのでブラウザ側で`URI Pattern`と`HTTPメソッド`を指定する必要あります。

#たとえば

詳細ボタンを押すとあるアクションが動く記述(こちらはPrefix)

“`erb
<%= link_to '詳細', tweet_path(tweet.id), method: :get %>
“`

とか(こちらはURI Pattern)

“`erb
<%= link_to '削除', "/tweets/#{tweet.id}", method: :delete %>
“`

みたいに`method:`でHT

元記事を表示

クラスとインスタンスについての考察

クラス、インスタンスについて

クラスフィールド・クラスメソッド・インスタンスメソッドのスコープ及びインスタンス変数の効果範囲がいまいち理解できていなかったのでまとめてみました。

理解は深まったのですが、新たな謎が生まれました。

指摘や補足など、教えていただけると幸いです。 

◆記述内容(説明)

“`ruby
class Zoo
def self.kind(animal_name)
@animal_name = animal_name
puts @animal_name #出力:キリン
puts animal_name #出力:キリン
puts @name #出力:空欄
puts name #出力:Zoo
end

def self.kind_name
puts @animal_name #出力:キリン
# puts animal_name #出力:NameError
end

puts @animal_name #出力:空欄
# puts animal_name #出力:NameError

def initialize(new_anim

元記事を表示

timesメソッドについての考察

timesメソッドについて

 

timesメソッドのスポットの位置と、ブロック変数の意味は0から数える以外にあるのか正確な認識ができていないと感じ、何パターンか試して自分なりにまとめてみました。 

“`ruby

colors = [“あか”, “あお”, “きいろ”]
element_count = colors.length

i = 0
num = 0

element_count.times do |i|
i += 1
num += 1
end

# num = 0 ここでnumを定義=>変数が定義されていないのに+は何故のエラーが発生
# → timesメソッド内をnum = 1にすると出力はでるが、0となる(スポット)

puts i #出力は0
puts num #出力は3

#——————————————————————
#ブロック変数iで定義されたiを出力しようするとNameError(変数名iは定義されていない)。
#ブロック変

元記事を表示

OTHERカテゴリの最新記事