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

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

【ruby】クラスの定義方法(3つ)

備忘録用に書いていきます。

## ①
“`ruby
class Sample
.
.
.
end
“`

## ②

“`ruby
Sample = Class.new do
.
.
.
end
“`

メリット…ブロックの外の変数が呼び出せる

“`ruby
var = ‘hogehoge’

class Sample
# classブロックの内部からは、ブロックの外で定義されたvarは呼び出せない
puts var
end

Sample = Class.new do
# Class.newブロックの内部からは、varを呼び出すことができる
puts var
end
“`

## ③

“`ruby
self.class.const_set :’Sample’, Class.new do
.
.
.
end
“`

メリット…クラスを動的に定義できる

“`ruby
class Sample
def self.create_new_class(class_name)
# 引数の値に応じて

元記事を表示

【解決方法】gem ffi のインストール(アップデート)に失敗する

# 問題

`bundle update`を実行した際に、**ffi** のインストール(アップデート)に失敗した

“`terminal
$ bundle update

# …(略)

Fetching ffi 1.12.2 (was 1.10.0)
Installing ffi 1.12.2 (was 1.10.0) with native extensions
Gem::Ext::BuildError: ERROR: Failed to build gem native extension.

# …(略)

extconf failed, exit code 1

Gem files will remain installed in /Users/xxxxx/.rbenv/versions/2.6.3/lib/ruby/gems/2.6.0/gems/ffi-1.12.2 for inspection.
Results logged to /Users/xxxxx/.rbenv/versions/2.6.3/lib/ruby/gems/2.6.0/extension

元記事を表示

FizzBuzz問題のリファクタリング【Ruby】

## 修正ポイント
– if文のネストをなくす
– 条件が当てはまる確率が低い方から先に記述
– while分をeachメソッドに変更
– 変数の数を減らす
– コードを減らす

## リファクタリング前
“`ruby
def fizzBuzz(count)
i = 1
while i < count + 1 do if i % 3 == 0 then if i % 5 == 0 then puts 'FizzBuzz' else puts 'Fizz' end elsif i % 5 == 0 then puts 'Buzz' else puts i end i += 1 end end fizzBuzz(20) ``` ## リファクタリング後 ```ruby def fizzBuzz(count) (1..count).each do |c| if c % 15 == 0 puts 'FizzBuz

元記事を表示

サンプルアプリケーションを作ろう!!〜Railsチュートリアル3章〜

#ほぼ性的なページの作成
あのーうち実家暮らしで家でUDEMYとかYOUTUBEとかでプログラミング動画みることあるんだけど、その時に「静的なページが作れます〜静的なページが〜」とか連呼されると若干気まずくなるからほんと辞めてほしいと思う今日この頃、、、NSぱんだまんです。アニメとか映画とかはそういうシーン来るのだいたい分かるからボリューム落としたりするんだけどまさかこんな真面目な動画でくると思わなかったからいちいち弁明するのもあれだし、すぐ自分の部屋に逃げました。

さて今回は第3章〜ほぼ静的なページの作成〜ですね。
まず静的、動的ってようわからんかったので調べました。
静的、、、何度アクセスしても同じものが表示されるWebページ
動的、、、アクセスした時の状況に応じて異なる内容が表示されるページ
ということですね。静的なページは企業紹介のサイトとか見るユーザーに同じものを見せたいときに使用される特に動きのないページ。動的ページはSNSサイトとか掲示板とかユーザー毎によって表示される内容が異なるページのことを指すんだって。

まずセットアップします〜ここは何回もやってるから少しずつ慣

元記事を表示

よくわかんないけどToyアプリを作ろう!!(Railsチュートリアル2章)

#前回までのあらすじ
やりたくねーなと目を背けていたRailsチュートリアル。。真剣に取り組み始めました。。
なんとか環境構築、railsの導入、git.GitHubの導入に成功しました。
*ちなみにHerokuは一旦とばしました。とりあえず一周して余裕でたらやります。
今回から第2章やります。
#さあやります。
よーし頑張ってくぞー!!
内容としてはscaffoldっていうスクリプトを使ってTOYアプリっていうのを作っていくみたい。
うーん安定の意味わからんなー。。
とりあえずscaffold(スキャフォールド)っていうのは。。。

railsアプリケーションの開発をする際にはMVCを作っていき、更に必要なルーティングを作成していく必要がある。これらの作業をまとめて行って、簡単にアプリケーションの雛形を作ってくれる機能のこと。scaffoldを使用することで素早くrailsアプリケーションを作ることができる。

なるほどねー。とりあえず内容を深くっていうよりはrailsのアプリケーションを素早く作って慣れましょう、みたいな章なのかな?

#アプリケーションの計画
はじめにどんなアプリ

元記事を表示

Rubyでシーザー暗号の解読

Rubyでシーザー暗号を解読して見た時のコードと解説をします。
##シーザー暗号とは?

そもそもシーザー暗号とはなにかなんですが、単一換字式暗号の一種らしいのですが、
簡単に言うと文字を特定数の文字ずらした際にそれが暗号鍵になる暗号の事です。

例)
暗号
hsnvld
2文字進めた文字が答えとなると
jupxnf
になります。

これをRubyですぐ表示できる様にアルゴリズムを書いてみました。

##Rubyでシーザー暗号の解読
暗号文に対して3文字進めるのが答えとします。
暗号文 hgmgkrd

“`ruby
def decryption(char)
char_ary = char.split(“”)#1文字ずつに分割する
changed_char_ary = []#空の配列を用意する
char_ary.each do |char|
changed_char_ary << (char.ord - 3).chr #ordメソッドで整数にしchrメソッドで文字に変換する    #空の配列に入れる end puts changed_char_

元記事を表示

【忘備録】Ruby on rails : パスワード登録

## 前提
今回はユーザーの新規登録する場面を想定しています。
以下がユーザーを登録する為のusersテーブルです。
password_digest カラムが新規登録する際に設定するパスワードを格納しています。

“`
+—————–+————–+——+—–+———+—————-+
| Field | Type | Null | Key | Default | Extra |
+—————–+————–+——+—–+———+—————-+
| id | bigint(20) | NO | PRI | NULL | auto_increment |
| name | varchar(255) | YES | | NULL | |
| email

元記事を表示

【Rails】bundler-auditの使い方

# `bundler-audit`とは

`bundler-audit`はプロジェクトで利用しているGemの脆弱性の有無をチェックしてくれるGemです。
システムの脆弱性チェックの一つとして利用できますね。

# 検証した環境

– Ruby 2.7.0
– bundler-audit 0.6.1

# 準備

## bundle install

Gemfileに以下を追加して`bundle install`

“`ruby:Gemfile
group :development do
gem ‘bundler-audit’
end
“`

“`sh
$ bundle install
“`

## 脆弱性チェックに使用するDBを更新する

脆弱性チェックを実行する前に、`bundler-audit`が使用するDBの更新を行いましょう。

“`
$ bundle exec bundler-audit update
“`

このコマンドでは、実際には`$HOME/.local/share`ディレクトリ配下に[rubysec/ruby-advisory-db](https:/

元記事を表示

bundle install でNokorigiインストール時に「Gem::Ext::BuildError: ERROR: Failed to build gem native extension.」エラーが出た場合の対処方法

`bundle install`でnokogiriインストール時に下記のようなエラー

“`
Gem::Ext::BuildError: ERROR: Failed to build gem native extension.
“`

が出てしまった場合

gem install時であれば `–use-system-libraries` オプションを付けて再実行してみるところですがbundlerの場合はどうすればいいかというと

`bundle config –local build.nokogiri –use-system-libraries`

というような感じでコマンドを実行します。

`–local`オプションは`app/.bundle/config`へ設定を書きます。
`–global`オプションは`~/.bundle/config`に書くようです。

まあよほどの事情がない限り、プロジェクトごとの`.bundle/config`に書いておくほうが良いと思います。その他、環境変数にも定義できます。

### bundle configの優先順位

bundle

元記事を表示

【14日目】Ruby(メソッド,クラス,インスタンス)

#はじめに
こんばんは。
今日でprogateのRubyカリキュラムは終了しました!
こんなレベルで大丈夫なのか一抹の不安は残りますが、
とりあえず進んでいこうと思います。

#本日の学び
– progate Ruby3
– progate Ruby4
– progate Ruby5

##Ruby
###メソッド
複数の処理を1つにまとめたもの

“`ruby
def print_info #def メソッド
puts “わんこでんきへようこそ!”
puts “今日はヘッドホンがセール中です!”
end
“`
###引数
複数の処理を1つにまとめたもの
メソッド内で作った変数はメソッド内でしか使えないので注意
キーワード引数は項目が分かりやすくなる

“`ruby

def print_info(item,price) #itemとpriceが引数
puts “わんこでんきへようこそ!” 
puts “今日は#{item}がセール中で#{price}円です!!”
end

print_info(“SDカード”,1200) #引数の値

def buy(item

元記事を表示

超最低限のRailsアプリをテストする(モデル編)

# この記事の基本的な方針
テストは重要です。
なぜなら、人間は不完全であるからです。
ではもし自分が完全であったら、テストは不要でしょうか?
いいえ。なぜなら他人にコードの妥当性を証明しなくてはならないからです。

“`
テストの目的以下です。
 ①コードの妥当性を自分で確認すること
 ②コードの妥当性を他人に示すこと
““
ここでは別記事、[超最低限のRailsアプリを丁寧に作る(もう一度きちんと復習して初心者を卒業しよう)](https://qiita.com/annaPanda8170/items/8856425be9d563fbffa7)で作ったアプリをテストします。

手を動かしながら読みたいようでしたら、以下でこの3画面アプリを手に入れてください。

“`bash:Terminal
$ git clone https://github.com/annaPanda8170/minimum_rails_application.git
$ bundle install
$ bundle exec rake db:create
$ bundle exec rake db

元記事を表示

【Ruby】繰り返しについて

rubyの繰り返し文についてまとめておきます。

#繰り返しを行うには?
以下のような構文又はメソッドを利用して繰り返し文を書くことが可能です。
今回はそれぞれの使い方をまとめて見ます。

・timesメソッド
・for文
・eachメソッド

##timesメソッド

一定の回数だけ同じ処理をさせたい場合はtimesメソッドを利用します。

“`ruby:qiita.rb
5.times do
p “りんご”
end

“`

“`実行結果.rb

“りんご”
“りんご”
“りんご”
“りんご”
“りんご”
“`

ブロック内で繰り返しの数値を使いたいときはdoの後に|変数|を加えます。

“`ruby:qiita.rb
5.times do |i|
p “りんご#{i+1}個を食す”
end
“`
“`実行結果.rb
“りんご1個を食す”
“りんご2個を食す”
“りんご3個を食す”
“りんご4個を食す”
“りんご5個を食す”
“`

##for文

timesメソッドとは異なりfor文はメソッドではないので記述方法が異なります。
1から10まで加算す

元記事を表示

【Rails】スレッドのレス投稿機能

プログラミング初心者です。
Ruby on Railsで掲示板のスレッドにレスを紐付けて投稿していく機能を作成しました。
結構苦戦したので、備忘のため貼り付けます。

【スレッド(親、tree)controller】

“`
def show
@tree = Tree.find(params[:id])
@response = Response.new(:tree_id => params[:id]) #ここを投稿用に使う
@responses = @tree.responses.all
end
“`

【レス(子、response)controller】

“`
def create
@response = current_user.responses.new(response_params)

if @response.save
redirect_to tree_url(@response.tree_id), notice: “投稿「#{@response.text}」を登録しました”
else

元記事を表示

[学習ログ]CVE-2020-5267について簡単に調べてみた[Rails]

# tl;dr
– CVE-2020-5267とは、__バージョン6.0.2.2および5.2.4.2以前のActionViewに存在する脆弱性__である。
該当バージョンのActionViewにおける__jおよびescape_javascriptメソッドにXSSの脆弱性が存在する可能性__がある。

– railsの場合は__Gemfile中のrailsをバージョンアップすることで対策が可能__`(6.0.2.2 or 5.2.4.2)`。

昨日、Githubから依存関係の脆弱性を指摘する以下のようなアラートが通知された。

>We found potential security vulnerabilities in your dependencies.
Only the owner of this repository can see this message.
Manage your notification settings or learn more about vulnerability alerts.

セキュリティアラートを確認すると、actionview

元記事を表示

Sinatraでタスク管理アプリ作ってみた

## 概要
環境構築〜MVCの動きが一通り表現できるまでの道のりを解説します。
ruby on Railsを用いて、Webアプリを作成した経験があったので、MVCの動きをどのように表現できるのかを確認する練習として作成しました。
ruby on Railsでアプリケーションを作成したことがある人向けへの説明になります。

##環境構築編
ruby,rails,mysqlがインストールされている前提での説明になります。
mysqlでのテーブル作成に関しての説明は他の記事に譲ります。
今回はDB名:sinatra_practice、テーブル名:commentとしています。

###sinatraのインストール
Sinatraとは、軽量なWebアプリケーションフレームワークです。
gemとして用意されているので、下記のコマンドでインストールします。

“` sinatra.command
gem install sinatra
“`

###sinatra_contribのインストール
sinatra_contribとは、コードを変更した際、Webサーバーを再起動せずに変更点を反映してく

元記事を表示

Railsのtext_fieldにCSSをあてる方法

## text_fieldにCSSってどうやってあてるんだっけ?
Railsアプリケーション作成時にフロント部分を作成していた時に

“`ruby:example.haml.html
.item__name
商品名
.name–input
= f.text_field :name, placeholder: “40文字まで”
“`

のようなhamlを作成していざscssを記述しようとしたときに
この`text_filed`にどうやってCSSをあてるのかが
ふと考えると分からなかったんです。

同じような`number_field`や`submit`などにも使えるやり方なので
是非覚えておいたほうがよいです。

##そもそも`text_field`で作られるHTMLは何なのか?
上の`= f.text_field :name, placeholder: “40文字まで”`で作られるHTMLを
chromeの検証で確認してみると
`

元記事を表示

Railsチュートリアルメモ – 第12章

(メモの目次記事はこちら)[https://qiita.com/yokohama4580/items/dedfd5510080273dc2a0]

(公式Railsチュートリアル第12章へのリンク)[https://railstutorial.jp/chapters/password_reset?version=5.1#cha-password_reset]

## サマリ
– パスワードの再設定
– パスワード再設定メールの送信
– トークンによる認証とパスワードの再設定

## ポイント
– パスワードリセット機能はUserモデルを拡張して使用するため、MVCのうち新たに作成するのはViewとControllerのみで良い
– 処理のコントローラーのアクションがいろいろ登場するので、流れを整理しないと混乱する

“`
sessions/new.html.erb
→password_resets_controller#new
→password_resets/new.html.erb
→password_resets_controller#create
→メール送信

元記事を表示

Railsでページ毎にsubmitの表記を変えたい

## submitボタンの表記を変えたい
submitボタンを実装した場合、デフォルトの日本語表記は下記のような形で表示されます
(色付けなどはCSSで加工済み)

スクリーンショット 2020-03-20 14.09.19.png

‘登録する’ というのがデフォルトのsubmitボタンとなります。

例えば、作成しているアプリで商品出品するページでは当然、’出品する’という表記にしたいですよね。
しかし、商品を編集して更新する場合は、’出品する’だと違和感があるので
‘更新する’と表記をしたいところです。

しかし、出品も更新も同じフォームを流用しているので
分岐分けで記入する必要があるところになります。

単純にsunmitボタンのテキストを変えたい場合なら
`

元記事を表示

[scss]hamlへの反映方法は2種類あった 備忘録

今までscssのhamlへの反映方法といったら
`application.scss`へ@import記述のみと思っていましたが。

実はそんなことをしなくてもコマンド入力で作成したscssには
自動的に反映される記述が入っているんです。
知りませんでした。。。
コメントアウトされ得た以下の3行があるとOKらしい

“`rails:scss
// Place all the styles related to the reset controller here.
// They will automatically be included in application.css.
// You can use Sass (SCSS) here: http://sass-lang.com/
“`

ですので、scssの反映方法を以下2種類をまとめたいと思います

##コマンドで作成する方法

***importいらないコマンド存在したー!!!***

“`rails:ターミナル
$ rails g assets 作成したいファイル名
“`
以上です。
あとはscssに記述したものは自

元記事を表示

【ruby】シーザー暗号を読み解く

シーザー暗号と呼ばれる、アルファベットをある文字数分ずらすという暗号方式をrubyで解読してみます。

3文字数分ずらし(戻し)暗号を解読してみます。

“`ruby
def to_decode(char)

char_ary = char.split(“”) # => [“k”,”h”,”o”,”o”,”r”]
changed_char_ary = [] # 空の配列を用意

char_ary.each do |char|
changed_char_ary << (char.ord - 3).chr # 3を引いた文字コードを文字列に変換する =>[“h”,”e”,”l”,”l”,”o”]
end
puts changed_char_ary.join # => “hello”
end

char = “khoor”
to_decode(char)
“`

元記事を表示

OTHERカテゴリの最新記事