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

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

Railsのfile_fieldで画像クリックでアップロードしてプレビューを差し替える

# 前段
`bootstrap_form`を使ってる場合は、下記のステップが必要です。
`bootstrap_form` を使ってると、このGemがよしなにUIを作成してくれるのですが、今回の実装では逆に邪魔になります。

“`erb
<%= f.file_field :image %>
““

![スクリーンショット 2020-11-06 10.34.09.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/37716/7713f9cf-f872-5757-d82d-df0d5b274299.png)

なので、 bootstrapのスタイルが適用されないようにしておきます。

“`erb
<%= f.file_field_without_bootstrap :image %>
“`
![スクリーンショット 2020-11-06 10.34.59.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/37716/0a0e4

元記事を表示

マスアサインメントの脆弱性とは?

概要

railsの勉強をしている際に出てくるマスアサインメントの脆弱性という言葉、正直何を言っているかよくわからなかったので調べて自分の言葉でまとめてみました。

マスアサインメントとは?

RailsのDBを更新する際などに複数のカラムを一括で指定できる事。
複数のカラムを同時に更新できるのはとても便利ですね。

注意点

便利な反面マスアサインメントには危険な部分もあります。それは、不正リクエストによって管理者権限などをいじられてしまう事です。

なぜ管理者権限などがいじられてしまうのか?

Chormeのディベロッパーツールなどを使用してフォームへの投稿内容を編集できてしまうためです。
例えばUserモデルにWebサイトの管理者であるかどうかを示す、admin属性というものがあるとします。
ディベロッパーツールのEdit as HTMLを使用してadmin属性を追加して値を入力して送信をするとそのままDBが更新されてしまいます。
こうなると、管

元記事を表示

ruby 満員電車の乗車率

#rubyで満員電車の乗車率を求める
一般的な通勤電車では、一両辺りの乗車定員は140人ほどと言われています。

一両に乗車した人数が入力として与えられるので、

一両辺りの乗車定員を140人としたときの乗車率を出力してください。

ただし、乗車率(%)は以下で求めることができます。

(乗車人数)/(乗車定員)× 100
###入力される値
入力は以下のフォーマットで与えられます

n

・nは一両に乗車した人数
###期待する出力
乗車率xを求め、

x%

(%は半角)のように出力してください。

ただし、乗車率は小数点以下を切り捨てて出力してください。
###条件
すべてのテストケースにおいて、以下の条件をみたします。

0 ≤ n ≤ 400
###入力例1
200
###出力例1
142%
#結論
“`java:
n = gets.to_f
t = 140
s = n / t * 100
print s.floor
print “%”
“`
#ポイントはto_fメソッドとfloorメソッド
##to_fメソッドは小数点を表示させるメソッド。逆にfloorメソッドは小数

元記事を表示

Railsの復習(初級編)

本投稿の目的

Railsの操作をメモするために議事録として書いていきます。
以前書いた[Rubyの復習1](https://qiita.com/naoto911/items/f46b35f84cc80f59cac3),[Rubyの復習2](https://qiita.com/naoto911/items/3528067588e6884a80ba)のRails編です。

学習に使った教材

Udemyの [“はじめてのRuby on Rails入門-RubyとRailsを基礎から学びWebアプリケーションをネットに公開しよう”](https://www.udemy.com/course/the-ultimate-ruby-on-rails-bootcamp/) を教材として使用しました。

Railsでの操作の流れ

①modelとviewの作成

~~~
rails g model モデル名(単数形) column情報
~~~
・”migraionファイル”と”model定義フ

元記事を表示

チャート式ruby-appendix-III(rake)

\![Mac OS X-10.15.7]() \![ruby-2.7.1p83]()

# make, antのruby版

前回のbundlerを少し思い出してください.

rake install:local

とすると自動的にhogehogeがinstallされましたよね.そこで使ったrakeというコマンドが今日のお題です.

rakeはmakeやantのruby版です.ちょっとした仕事をさせるときに便利なように作られています.典型的な例は,

“`ruby
task :default do
system ‘rake -T’
exit
end

desc ‘hello NAME’
task :hello do
name = ARGV[1]
puts “Hello #{name}!”
exit
end
“`

です.これをR

元記事を表示

Railsもどきを作ってみよう(ビュー編)

# はじめに
railsを使ったアプリ開発は、ブラックボックス化されているとよく言われます。

そこで、少しずつ解剖していこうと思います。その手段として、Railsもどきを作っていきます。

今回は、ビュー編として、rubyのライブラリーであるWEBRickを利用して、サーバを立て、ホームページを表示することを目指します。

目指すディレクトリ構成は下記の通りです。

“`
directory
|- app
|- views
|- basic_pages
|- home.html.erb
|- srv.rb
“`

## 環境
・ruby 2.7.1
・Ubuntu 20.04.1 LTS

## 対象となる読者
・この記事に興味を持ってくれた方
・Railsを使ったことがあって、その仕組みを考えてみたい方

## ポイント
1.サーバを立てる
 ①サーバを立てるスクリプトファイル(srv.rb)を作る
 ②srv.rbをコンパイルする

2.ホームページを表示する
 ①ホームページのビューファイル(app/v

元記事を表示

superは単に親クラスのメソッドを呼び出すものではない

## はじめに
ruby gold取得に向けて勉強中superについて自分の中での理解が変わり共有したいと思いました。

## 本題
まず初めに以下のコードを実行するとどのような結果が出力されるでしょう?

“`ruby

module M
def foo
super
puts “M#foo”
end
end

class C2
def foo
puts “C2#foo”
end
end

class C < C2 def foo super puts "C#foo" end include M end C.new.foo ``` 選択肢1 >
C2#foo
C#foo

選択肢2
>
C2#foo
M#foo
C#foo

選択肢3
>エラーが表示される

僕はずっと1と思ってました。
ちなみに正解は `選択肢2`
きちんと理解して正解した方はもうこれ以上見なくて大丈夫です。
ここまで見てくださってありがとうございます。

まず、僕がどのようにして選択肢1を選んだのか

「Cクラスのfooメソッドやな、ふむふ

元記事を表示

Rubyの復習2

本投稿について

前回の[Rubyの復習1](https://qiita.com/naoto911/items/f46b35f84cc80f59cac3)の続きです。
“目的”と”教材”は[Rubyの復習1](https://qiita.com/naoto911/items/f46b35f84cc80f59cac3)を参照ください。

①用語のメモ

○オーバーライド

・親クラスから子クラスへ継承した際のメソッドの上書き処理のこと
・同じ名前のメソッドでも子クラスが優先される

○RoboCop

・”Rubyの規約を守れているか?” 自動で判定してくれるソフト
・目的は,規約やめちゃめちゃ多いため,人力で処理したら日が暮れるため

○オブジェクト

・数値,処理などの総称
・ruby内の1集合体はすべてオブジェクトと呼ばれる
・クラス → メソッド → 値 の順に階層が進む

○破壊的な編集

・値の書き換え等の結果を保存すること
・コードでは “!” を末尾につける
・これをし

元記事を表示

Deviseを使ってユーザー管理機能を実装

#Deviseをインストール
何と言ってもまずは、このgemをinstallするところから全ては始まります。

“`ruby:deviseのインストール
% gem’devise’
% bundle install
% rails g devise:install
“`
これでdeviseのインストールが完了です。

##devise関連のファイル

###modelを生成

“`
rails g devise user
“`
ユーザーモデルとマイグレーションファイルが生成されます。
またこのコマンドを実行すると`config/routes.rb`に自動でdeviseのルーティングが設定されます。

“`config/routes.rb
Rails.application.routes.draw do
devise_for :users
# For details on the DSL available within this file, see https://guides.rubyonrails.org/routing.html
end
“`

元記事を表示

これから学ぶ言語まとめ

これからプログラミングの学習を始めるにあたり言語の内容や役割を調べてみました。下記にまとめましたのご確認ください。間違い等ありましたご指摘の方よろしくお願いいたします。

HTMLについて
HTML(エイチティーエムエル、HyperText Markup Language)は、ウェブページを作成するために開発された言語であり、 現在、インターネット上で公開されてるウェブページのほとんどは、HTMLで作成されている。
ハイパーテキストでは、ウェブページから別のウェブページにリンクをはったり、 ウェブページ内に画像・動画・音声などのデータファイルをリンクで埋め込むことができ、 HTMLには、このハイパーリンク機能で関連する情報同士を結びつけて、情報を整理するという特徴がある
身近なHTMLとしてウェブサイト、電子メール(HTML形式)、スマホアプリがあげられる。

CSSについて
CSS(Cascading Style Sheets、カスケーディング・スタイル・シート)とは、ウェブページのスタイルを指定するための言語です。 ワープロソフトなどで作成される文書も含めて、文書のスタイルを指定

元記事を表示

if文や分岐処理について

#分岐処理

##順次処理
変数やputsを用いれば、ある程度基本的な計算や画面への出力が出来ます。
しかし、ブログラムとしてはいまひとつ物足りないというのも事実です。
ブログラム中に記速された様々な処理を、その順番とおり実行するだけの処理を、
順次処理(じゅんじしょり)と言います。
![Qiita](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/596221/5ac8c873-6854-ef01-2a52-c5804f81f6bd.png)
##分岐処理
しかし、ブログラムは、順次処理だけでは出来上がりません。様々な状況に応じて、違った処理を行わなくてはなりません。例えばゲームプログラムを作っているとしたら「もし、敵に当たったらゲームオーバー」などといったような、条件に応じた処理の分岐が必要になります。こういったように、ある条件で処理の流れが変わる処理を、分岐処理(ぶんきしょり)と言います。

![Qiita](https://qiita-image-store.s3.ap-northeast-1.amazo

元記事を表示

rubyで変数を使える範囲【スコープ】

変数のスコープについて、かなり単純なコードで説明したいと思う。

下記のようなコントローラーが記述されていたとする。

“`ruby
class SampleController < ApplicationController def test1 sample_1 = 10 test3(sample_1) end def test2 sample_2 = 10 test4 end private def test3(num) sample_3 = num + 10 end def test4 sample_4 = sample_2 + 10 end end ``` 見たところ、test1アクションではプライベートメソッドのtest3(num)アクションを呼び出すことになり、test2アクションではプライベートメソッドのtest4アクションを呼び出すことになる。 結論から先に書くと、test1からのtest3(num)の呼び出しと処理は上手くいくが、test2からのtest4の呼び出し

元記事を表示

Access denied for user ‘root’@’localhost’ (using password: NO) エラーの対処法

## エラーの内容
`rails s` をした後、ブラウザを見てみると下記のようなエラーが発生しました↓

Mysql2::Error::ConnectionError
Access denied for user ‘root’@’localhost’ (using password: NO)

要するに、
パスワードがないからアクセスできないぞ!
ということです。

##エラーの解決方法
エラーの解決方法は2通りあります。
1. MySQLで設定したパスワードをdatabase.ymlにベタ書きする。
2. rootユーザーのパスワードを空にする。

個人で開発する際は1でもいいのですが、チーム開発となるとチームでパスワードを共通化する必要があり、少し面倒なので今回は2について詳しくやっていきます。1についても簡単に記載します。

##1. database.ymlにベタ書きする。

“`database.yml
default: &default
adapter: mysql2
encoding: utf8mb4
pool: <%= ENV.fetch("RAILS

元記事を表示

【ざっくり解説】Railsで本番環境と開発環境の動作を分ける方法

## いきなり結論

### コントローラーの場合
#### 本番環境

“`rb:users_controller.rb
if Rails.env.production?
#本番環境の定義です
end
“`
#### 開発環境
“`rb:users_controller.rb
if Rails.env.development?
#開発環境の定義です
end
“`

### ビューの場合
#### 本番環境
“`erb:index.html.erb
<% if Rails.env.production? %>
<%# 本番環境の表示です %>
<% end %>
“`
#### 開発環境
“`erb:index.html.erb
<% if Rails.env.development? %>
<%# 本番環境の表示です %>
<% end %>
“`

## 秒速でまとめ
「開発環境と本番環境でズレが出てしまう…」
「仕方なく本番環境に合わせてるけど、開発環境の時に不便だな…」

そんな時に使える条件分岐をご紹介しました。
本番環境って難しい!Rails

元記事を表示

ブラックボックスに感じていたdeviseのコントローラーを触ってみた

#はじめに
 deviseとは、ユーザー管理機能の実装を簡単にしてくれるGem。簡単にしてくれているが故に、「なぜ、動作するのか」がわからない部分が多々存在していた。オリジナルのアプリケーションを作成していて、今までとは仕様を変更したいと思い、色々と試行錯誤し、以前よりもdeviseの使い方がわかってきた気がする。

##deviseのコントローラー
 deviseについて初めて学習した時は、コントローラーについて、全く扱わなかった。他の機能ではMVCモデルを意識して、実装しているにも関わらず、deviseについては、ルーティングも勝手に生成されるし、コントローラーは存在すらしなかった。RailsがMVCモデルを謳っている以上、「コントローラーがあるのだろうが、見えなくなっているんだろうなぁ」程度の考えで今まで学習してきた。
 ターミナルでコマンドを確かめると、

“`bash
rails g –help

=>
Devise:
devise
devise:controllers
devise:install
devise:views
“`

deviseでコント

元記事を表示

Ruby技術者認定試験Silver合格に向けた学習メモ

## 本記事について
模擬問題を解く中でよく間違える問題をまとめました。
どなたかの参考になれば幸いです。

**11/10受験 諸々追記予定**

## Ruby技術者認定試験 Silver(Ver 2.1)とは

以下、[Rubyアソシエーションの公式ホームページ](https://www.ruby.or.jp/ja/certification/examination/)から引用です。
> Ruby技術者認定試験について
Ruby技術者認定試験制度は、Rubyベースのシステムを設計、開発、運用するエンジニア、Rubyでシステム提案を行うコンサルタント、Rubyを教える講師及びRubyを学ぶ学生などを対象とした認定試験制度です。認定者は、Ruby技術者としての技術力を公正に評価され、高い水準のRubyによるシステム開発能力を持つことを認定されます。
認定によりRubyベースでシステム開発を行ううえで必要な基礎的な知識と応用力をもつことをアピールすることができます。試験の合格者は、Rubyアソシエーションにより「 Ruby Association Certified Ruby Pro

元記事を表示

Formオブジェクト~1つのフォームで複数モデルとやりとりをする画期的なヤツ~

理解するのになかなか苦労しましたがタイトルでも書いてあるとおり、formオブジェクトは複数モデルにまとめて情報の保存・更新などを行う際に用いられるものです。

まずはイメージ図です
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/629333/8c74267e-2a83-f57c-714b-8ed26f99372b.png)

このように複数モデルを介す必要のあるフォーマットを実装するのにformオブジェクトを使います。

では具体的にformオブジェクト内にはどのような記述が必要か考えていきましょう。

・formオブジェクトを使用するモデルに設定していたバリデーションの移行
・コントローラでformオブジェクトを使えるようにする記述
・モデルを介すための記述

大まかにこの3つが必要になりますね!
では今回はユーザー情報と住所情報を同時に登録するフォーマットを作成していきます。
※deviseを使用しないため、簡易的になっておりますのでご了承を

1. アプリの骨格を作る

元記事を表示

【AWS・EC2】unicornを起動の際のエラー文master failed to start, check stderr log for detailsの解決法・rails6 master.key周りの解決法も

##したいこと
unicornの起動を成功させたい。(エラー文master failed to start, check stderr log for details)

####経緯
本番環境としてEC2を使ってポートフォリオをデプロイしようとしています。
rails6で作成したアプリです。
下記記事を参考にしています。
https://qiita.com/Yuki_Nagaoka/items/dbb185feb6d4f051c2f2
https://qiita.com/naoki_mochizuki/items/5a1757d222806cbe0cd1#unicorn%E3%81%AE%E8%A8%AD%E5%AE%9A

####出ているエラー
下記コマンドを実行し、

“`
$ bundle exec unicorn_rails -c /var/www/rails/アプリ名/config/unicorn.conf.rb -D -E production
“`

以下の様にエラーが表示される。

“`
master failed to start, check st

元記事を表示

再帰関数入門 : 再帰関数とは

## 再帰関数をつくってみる
再帰関数とは、関数の中で自分自身を呼び出す関数のことです。
例えば、以下のコードは再帰関数と言えます。

“`rb
def hello
puts ‘hello!’
hello
end
hello
“`
helloという関数の中で、`hello!`という文字列を出力した後に、またhello関数が呼び出されています。
ちなみに上のコードを実行してみると、ただひたすら`hello!`という文字列がずっと出力されます。(rubyだと「SystemStackError」で強制終了されます)

再帰関数を作るというだけだと上記のコードで目的達成ですが、ただ文字列を出力する再帰関数は面白くないので、再帰関数実装の初歩問題として「階乗の計算」を取り上げてみます。
nの階乗を計算するコードを書いてみました。
まずは再帰関数を使わず実装してみます。

“`rb
res = 1
while n > 0
res *= n
n -= 1
end
puts res
“`
こんな感じでしょうか。
またrubyには`times`メソッドという便利なメソッドがあるの

元記事を表示

rails s を実行しると”A server is already running.”のエラーの対処法

rails sを起動しようとすると、このようなエラーが、、、

“`
$ rails s -b 0.0.0.0
=> Booting Puma
=> Rails 5.2.4.2 application starting in development
=> Run `rails server -h` for more startup options
A server is already running. Check /ディレクトリパス/tmp/pids/server.pid.
Exiting
“`

これはサーバーがすでに実行中のために起こってしまうエラーです。

##server.pidのPIDをkillする
以下のコマンドを実行しする。

“`
$ lsof -i:3000
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
ruby2.5 3033 vagrant 16u IPv4 27499 0t0 TCP *:3000 (LISTEN)
“`

上記のPIDの値を以下の値で削除しま

元記事を表示

OTHERカテゴリの最新記事