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

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

【Rails】Ajaxを用いた非同期フォロー機能の実装

#目標

![ezgif.com-video-to-gif.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/579893/4f03a5f1-9776-aa34-d86b-568467e8c135.gif)

# 開発環境
・Ruby: 2.5.7
・Rails: 5.2.4
・Vagrant: 2.2.7
・VirtualBox: 6.1
・OS: macOS Catalina

# 前提

ログイン機能を実装済み。

ログイン機能 ➡︎ https://qiita.com/matsubishi5/items/5bd8fdd45af955cf137d

# フォロー機能を実装

### 1.モデル

“`terminal:ターミナル
$ rails g model relationship follower_id:integer followed_id:integer
“`

“`terminal:ターミナル
$ bundle
“`

“`ruby:schema.rb
ActiveRecord:

元記事を表示

オブジェクト指向設計実践ガイド 第2章 「単一責任のクラスを設計する」

### 「[オブジェクト指向設計実践ガイド](https://www.amazon.co.jp/dp/B01L8SEVYI)」
第2章 「単一責任のクラスを設計する」 のまとめです

## 心に残ったことば

### *設計とは、アプリケーションの可変性を維持するために技巧を凝らすことであり、**完璧を目指すための行為ではない*

### 今回は「単一責任の原則」についてです

## 単一責任の原則(Single Responsibility Principle)とは?

– クラス、**メソッド**はそれぞれ一つの責任(役割)に徹すること
– メソッドの単一責任が大事!!
– 一つの責任に徹することで、
– ✅変更の副作用が少なくなる
– ✅変更を取り込みやすくなる
– ✅再利用しやすくなる
– 単一責任のクラス、メソッドは変更に強いアプリケーションの大前提

## クラスに属するものを決める
– 最も目立つのは「クラス」だが、「メッセージ(メソッド)」こそがオブジェクト指向設計の核
– メソッドをグループに分けクラ

元記事を表示

第13章〜マイクロポストを作る〜

#ユーザーのマイクロポスト
今回ユーザーが短いメッセージを投稿できるような機能を実装する。
#マイクロソフトモデルの作成
このMicropostモデルはデータ検証とUserモデルの関連付けを含んでいる
マイクロポストの内容を保存するcontent属性と特定のユーザーとマイクロポストを関連付けするuser_id属性の2つだけの属性だけをもつ。
Micropostはstring型ではなくtext型を使用する。
140文字制限をつけるので表示できる文字数などは差がないがtext型のフォームのほうがより自然な投稿フォームを実現できる。
Userモデルとの最大の違いはreferences型を利用している点である。
これを利用すると自動的にインデックスと外部キー参照付きのuser_idカラムが追加され、UserとMicropostを関連付けする下準備をしてくれる。

“`
add_index:micropost,[use_id,:create_at]
“`
このコードはあるユーザーを検索したいときにUsersテーブルのnameカラムにインデックスを張ってないと、プログラムは、Userテーブルの

元記事を表示

map 派? collect 派?

最近下記の記事を読んで。

* https://magazine.rubyist.net/articles/0038/0038-MapAndCollect.html

私、map 派でした。

そうか、関数型は結構合ってるのかもしれん。純粋関数型言語は使ったことなかったけど。なんとなく融通効かなさそう、とか、理想が高過ぎて実用的ではなさそう、みたいな先入観で捉えてましたが。しかし、私の理想とするプログラムの組み方は関数型だったのか。

仕組みと定義でソフトウェアを組み上げていくという考え方は 100% 同意。分かりづらいかもしれないが、ランダムという要素を無くしたパチンコ台みたいなもので、玉を転がしたらあるルールに従って然るべき所に自動的に転がっていくという。バグを一番少なくできるやり方だと思う。異常系も含めて想定外を無くす的な。オートマトンとかもそう。「やりたいことを宣言的に書いておけば、あとはコンピューターが頑張ってくれる」という発想は大事。

なので、初心者向けの講座で良くあるような「順に A やって、次に B やって」というプログラムの作り方はよろしくないと思うのです。

そう

元記事を表示

【Rails】繰り返し処理でメニューを簡単に作る方法

#はじめに
下の記事「【爆速実装】夢と魔法のeach文【Rails-haml】」の記事を見て爆速でメニューが作れることを知りました。
https://qiita.com/enjoy_omame/items/c9f14f9cbb9bd2408a18
すげぇ。なんじゃこりゃ!

で、この記事なんですが、あくまで”簡単に作る方法”を解説してくれています。遷移先などの実装には触れていません。
きっと**「ここからは自分で考えて実用的にしましょうね」**という意図があるのだろう。と、言っているんだと思います。僕には聞こえました。そんな副音声が!
なので、自分なりに考えて実用的な実装をしてみたので今回記事にしてみます。

#実装した内容
こんな感じのメニューを繰り返し処理で実装します。
今回は、usersコントローラ内のshowアクション(ここで繰り返し処理の元になるネタをしこむ)を介して、show.html.haml(ここで仕込んだネタを繰り返し処理して)表示するといった感じに処理が走ってます。
スクリーンショット 2020-04-09 0.46.1</p></blockquote>
</blockquote>
<aside class='widget widget-post'>
<div class='tag-cloud-link'>Ruby</div>
<div class='tag-cloud-link'>Rails</div>
<div class='tag-cloud-link'>配列</div>
<div class='tag-cloud-link'>each</div>
<div class='tag-cloud-link'>初学者向け</div>
</aside>
<div><a style='width:100%;' class='btn__link' href='https://qiita.com/dr_tensyo/items/5dc9b769e168249def8e'>元記事を表示</a></div>
<h3 id=Railsチュートリアル9章攻略の第一歩を踏み出す。【セッション永続化編】

##はじめに
9章の解説は私にとってあまりに複雑だったので
少しだけわかりやすく理解できるように、9章の中でも__セッションの永続化__に関する内容を簡単にまとめてみました。

##前提
Railsチュートリアルでログイン機能が実装してあり、尚且つ9章を一応は終えたがそれでも理解度は低めだと感じている方。

##内容
セッション永続化機能の実装。
簡単に言うと、ブラウザを閉じてもログインを保持することができる機能です。
見たらわかるめちゃくちゃ便利な機能って事で絶対に物にしたいです。

ほぼ箇条書きでまとめてあります。
キリの良いポイントまで一旦まとめてから、コードの記述を行っています。

##実装手順
前置きが長くなりましたが、進めていきます。
ログイン保持機能を実装する手順を簡単にまとめると以下のようになります。

__1.永続セッション作成の準備__
__2.永続セッション作成__
__3.上記を利用して、ログインユーザーのログインを保持する__
__4.永続セッションからログアウトできるようにする__
__5.上記機能実装により発生するバグを修正する__

では、より詳

元記事を表示

Capybaraのfill_inメソッドで、lavelがない時にfieldを特定する方法

#●はじめに
fill_inメソッドでlavelが無いfieldを指定する際に、どのように指定すれば良いか学習しました。

#●結論
text_fieldのvalue_nameで指定する。

#●方法
“`erb

ログイン

<%= f.email_field :email, autofocus: true, autocomplete: "email", placeholder: " Email" %>

“`
このようにtext.lavelが無く、コードからはどのように指定すれば良いかわからない。
そこで「検証」ツールを使用し、text_fieldのvalue_nameを確認する。

###1.右クリックを押し、検証を選択する。
![スクリーンショット 2020-04-08 23.37.47.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/553621/64063866-ff89-4661-a3e7-

元記事を表示

セッションハイジャック

##セッションハイジャック
セッションハイジャックとは名前の通り、なんらかの方法を用いて正規利用者ではないものが他人のセッションIDを乗っ取る攻撃手法です。
セッションハイジャックが行われた場合、アプリケーション内で正規の利用者ができることはほとんど実行が可能なので、正規利用者の個人情報閲覧、送金や物品購入、なりすましメールの送信やSNSへの犯罪予告など正規利用者への被害はとても大きくなります。
###セッションハイジャックの攻撃手法と対策
セッションハイジャックの具体的な攻撃手法
①セッションIDの推測
②セッションIDの盗み出し
③セッションIDの強制
###セッションIDの推測
Webアプリケーションに用いられるセッションIDの生成規則に問題があると、第三者にセッションIDが予測され、悪用されてしまう可能性があります。
生成規則に問題があるセッションIDは以下のようなものを元に生成されているものが多いです。
①ユーザIDやメールアドレス
②リモートIPアドレス
③日時
④乱数
上記のものをそのまま使う場合や、エンコードやハッシュ計算というものと合わせて利用される場合があります。

元記事を表示

Ruby on Railsのチュートリアル ~第3章ほぼ静的なページの作成~

# はじめに
webアプリケーションを作るための学習記録
(マッチングアプリを作る予定)

こちらのチュートリアルを片っ端から進めていく
【Ruby on Rails チュートリアル】
https://railstutorial.jp/

# 第3章ほぼ静的なページの作成
## まとめ
– 新しいRailsアプリケーションをゼロから作成したのはこれで3度目。今回も必要なgemのインストール、リモートリポジトリへのプッシュ、production環境まで行った
– コントローラを新規作成するためのrailsコマンドはrails generate controller ControllerName アクション名 (省略可)。
– 新しいルーティングはconfig/routes.rbファイルで定義する
– Railsのビューでは、静的HTMLの他にERB (埋め込みRuby: Embedded RuBy) が使える
– 常に自動化テストを使って新機能開発を進めることで、自信を持ってリファクタリングできるようになり、回帰バグも素早くキャッチできるようになる
– テスト駆動開発では「red ・ g

元記事を表示

Rubyのメソッドを理解しよう

#Rubyのメソッドについて
メソッドとは何、メソッドをなぜ使う必要があるのかと思っている人がいると思うので説明します。

この記事の内容は以下になります。
・メソッドとは
・メソッドを使うメリット
・メソッドの使い方
・メソッドのスコープ

##メソッドとは
メソッドは複数の処理をまとめたものです。
例を見てみましょう。

“`sample.rb
def introduce #(メソッド定義)
puts “満極尚輝”
puts “22歳”
puts “新潟出身”
end

introduce #(メソッド呼び出し)

#以下メモ ターミナル上

満極尚輝
22歳
新潟出身

“`

上記の様に、メソッドは複数の処理をまとめて、
1行で呼び出すことで定義された全ての処理を実行してくれます。

##メソッド使うメリット
メソッドのメリットはこの2つ。

・繰り返し行われる処理を1行で実行できる

・処理に名前をつける事で、見易いコードに

それぞれ解説します。

###繰り返し行われる処理を1行で実行できる

メソッドで複数処理をまとめることで、
プロ

元記事を表示

sortメソッドによる並び替え

#はじめに
controllerで、orderメソッドを使うことは皆さんも多いと思うが、orderメソッドはデータベース内の値を基準に並び替える際に役に立つが、データベース内の値以外で、並び替えを行いたい時には使えない。

そこで出てくるのがこのsortメソッド

ここでは、sortメソッドの使い方を簡単に記述していく。

#配列をsort

“`ruby
a = [2,3,1,4,5,1]
p a.sort
#=> [1, 1, 2, 3, 4, 5]
“`

デフォルトは昇順

降順にしたい時は、reverseメソッドを使う。

###reverseメソッド

“`ruby
a = [2,3,1,4,5,1]
p a.sort.reverse
#=> [5, 4, 3, 2, 1, 1]
“`

もっと拡張性の高い並び替えをしたい時は、sort_byメソッドを使用する。

###sort_byメソッド

“`ruby
s = [“aaaaa”,”b”,”cc”]
p s.sort_by {|array| array.size}
#=> [“b”, “cc”, “aa

元記事を表示

rubyを使ってS3にデータをuploadしてみた

## S3にデータをuploadする
awsのathenaを使う為に、圧縮したファイルを該当のパーティション(フォルダ)にuploadする為のソースを書いてみた

## アップロードしたファイルのチェックについて
ファイルのサイズが5Mを超えると自動的にマルチパートのアップロードになってしまう。
5M以下なら、bucketの中からetagを取得して容易にチェックができるのだが、それ以上になるとbucket.etagでのチェックが出来なくなってしまう。
それでもマルチパートでのチェック方法はあるのだが、上手くいかなかったので、uploadしてバケットに登録されたファイルとuploadする前のファイルを比べてチェックすることにした。
(テストした結果、特に問題はなさそう)

“`
class call

ACCESS_KEY_ID = ‘asdfghjklzxcvbnm’
SECRET_ACCESS_KEY = ‘1234567890qwertyuiop’
REGION = “ap-northeast-1” # tokyo
BUCKET_NAME = “bucket_n

元記事を表示

もっとプログラマ脳を鍛える数学パズル 感想文

# はじめに
アルゴリズムの勉強として、*[もっとプログラマ脳を鍛える数学パズル アルゴリズムが脳にしみ込む70問](https://www.amazon.co.jp/dp/B078LMFXXC)* を~~写経~~読んでいます。
70問目まで終わりましたので、その感想を投稿いたします。
# いいところ
アルゴリズムの説明がべったりとしておらず、(中級者以上の方は)サクサクと進められます。使用されているアルゴリズムは基本的なもの(二分探索、幅優先探索、順列組合せ、ユークリッドの互除法 等)です。

ソースの説明も最低限に抑えられており、下記のコードを見て、「ああ、インスタンスなハッシュね」とわかるレベルの人は、安心してお薦めできます。

“`hash.rb
@memo = {}
“`
Ruby 2.5.0 で動作を確認されているそうですが、手元の環境 (Ruby 2.7.0) でも正常に動作しました。
# 悪いところ
いいところの裏返しで、初心者の方は、分からないところを自身で調べながら進める必要があります。
しかし、同じようなクラスやメソッドが繰り返し出現しますので、調べる量として

元記事を表示

条件分岐 if文

##環境,前提
Ruby 2.5.1
MacOS Mojave Ver.10.14.6

本記事はRubyがインストールされた前提の記事です。
Rubyをインストールしたあと、とにかくRubyをいろいろ触ってみて慣れていくための記事です。お役に立てば幸いです。

# if文とは

プログラミンングには必ず登場するif文、
**「もし●●の時、◯◯を実行する」**というような形で
条件が適用されたら処理を実行し、条件に応じて処理を実行するプログラムです。

##if文の基本構造

“`sample.rb
if 条件 then
処理
end
“`

「条件通りなら処理を実行する」そうでない場合は何もしません。
**ifにはendがセットなのでend忘れには注意しましょう。**if の後の then は省略可能です。

##数値を比較する条件分岐

if文で数値を比較します。以下のコードはpower(変数)に100を代入してその値を比較しています。
if 条件部分の「>」は powerが99より大きい場合は条件が真になり処理が行われます。

元記事を表示

#3 プログラミング言語どれ選べばいいの?  ~好きなものを選ぶんじゃ~ 

読んでくださってありがとうございます:relaxed:
毎度あつぎです。

今回は「プログラミング言語」についてちょっと小話を。
C言語ムズイって結構言われてますけど、個人的には書くことより、開発環境を整えて余計なこと(基礎としては大事)を書きまくるからわからなくなると思うんです。(ただの感想)
![emily-morter-8xAA0f9yQnE-unsplash.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/505304/0201851b-b0f1-478c-b9d5-dde844229c47.jpeg)

C言語みんなバリバリやってるかと思いきや、
「わかんねー!」「動かない」なんて声も目に見えて上がってきているところであります。
それでも、環境自分で探して作って、課題こしらえたが最後。
明日から○○という言語やってねと、パーになりました。アーメン?

#■C言語は大事?もっと楽しくてもいいんじゃない?
趣味でもなんでも、好きなこととか実感がないと人間モチベーションはあがりません。
ビジネスマン

元記事を表示

アプリが正しく動かない時に、検証ツール、ターミナルのログ、binding.pry、正しく挙動する別アプリとの比較を使って、原因を探ってみた。

## 「問題の切り分け」と「仮説→検証」の重要性
上手くアプリが動かない時に、闇雲にコードを修正するのではなく、原因となりうる箇所を細かく切り分けながら解決していくことが重要だと、感じます。
そこで今回は、そのような手順でについて、いかに記していきます。

## 【今回の問題点】掲示板を編集し、更新ボタンを押しても内容が変更されない。

掲示板の投稿文を編集し、更新ボタンを押しても、編集前の投稿文から何も内容が変わらないという問題が発生しました。

### ソースコード
“`
(app/views/boards/edit.html.erb)
<% content_for(:title, t('.title')) %>

<%= t ('.title') %>

<%= render 'form', { board: @board } %>

元記事を表示

Ruby on Railsのチュートリアル ~第2章Toyアプリケーション~

# はじめに
webアプリケーションを作るための学習記録
(マッチングアプリを作る予定)

こちらのチュートリアルを片っ端から進めていく
【Ruby on Rails チュートリアル】
https://railstutorial.jp/

# 第2章Toyアプリケーション
## まとめ
– Scaffold機能でコードを自動生成すると、Webのあらゆる部分からモデルデータにアクセスしてやりとりできるようになる
– Scaffoldは何よりも手っ取り早いのがとりえだが、これを元にRailsを理解するには向いていない
– RailsではWebアプリケーションの構成にMVC (Model-View-Controller) というモデルを採用している
– Railsが解釈するRESTには、標準的なURLセットと、データモデルとやりとりするためのコントローラアクションが含まれている
– Railsではデータのバリデーション (validation) がサポートされており、データモデルの属性の値に制限をかけることができる
– Railsには、さまざまなデータモデル同士を関連付けを定義するための組み

元記事を表示

シンボルと%記法

###%s
シンボルの作成

“`ruby:ruby
%s!i love soccer!
%(i love soccer)
#=> :”i love soccer”
“`

###%i
シンボルの配列を作成

“`ruby:ruby
%i(soccer baseball basketball) #=> [:soccer, :baseball, :basketball]
“`

###to_sym & to_s
シンボル化と文字列化

“`ruby:ruby
string = ‘soccer’
string.to_sym #=> :soccer

symbol = :baseball
symbol.to_s #=> “baseball”
“`

元記事を表示

each文の基本3

##環境,前提
Ruby 2.5.1
MacOS Mojave Ver.10.14.6

本記事はRubyがインストールされた前提の記事です。
Rubyをインストールしたあと、とにかくRubyをいろいろ触ってみて慣れていくための記事です。お役に立てば幸いです。

# eachメソッドをハッシュで使う

[each文の基本2](https://qiita.com/TOMARU4400/items/ca4fcda76f6097a52152)の続きです。eachメソッドをハッシュで使ってみます。ハッシュのキーと値を順番に取り出すときもeachメソッドが使えます。
変数(ブロックパラメータ)を2つ用意すればキーと値を順番に取り出せます。

#その前に式展開
**#{}の形は式展開**といい、#{}に中に式や変数を入れるとその式や変数が文字列の中に展開されます。

“`sample.rb
name = “Yamada”
puts “私の名前は#{name}です。”

“`
実行結果は以下のようになります。

“`:Tarminai
私の名前はYamadaです。
“`
#ではそれを踏まえ

元記事を表示

ハッシュから配列、配列からハッシュ

###ハッシュから配列
to_aメソッド

“`ruby:ruby
money = { japan: ‘yen’, us: ‘dollar’, india: ‘rupee’ }
money.to_a #=> [[:japan, “yen”], [:us, “dollar”], [:india, “rupee”]]
“`

###配列からハッシュ
to_hメソッド
なお、key重複の場合は最後の配列要素を採用する

“`ruby:ruby
money = [[:japan, “yen”], [:us, “dollar”], [:india, “rupee”]]
money.to_h #=> { japan: ‘yen’, us: ‘dollar’, india: ‘rupee’ }
“`

Hash[]

“`ruby:ruby
money = [[:japan, “yen”], [:us, “dollar”], [:india, “rupee”]]
Hash[money] #=> { japan: ‘yen’, us: ‘dollar’, in

元記事を表示

OTHERカテゴリの最新記事