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

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

FactoryBotを導入する

### はじめに
Rspecを使って、テストを書いていたのだが、FactoryBotという便利なライブラリがあることを知ったので、導入してみる。

###

元記事を表示

【Rails】deviseを用いた名前ログイン機能の実装

#目標

![ezgif.com-video-to-gif.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/579893/6387f46a-3013-7da2-c528-424d29c64530.gif)

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

# ログイン機能の実装

### 1. アプリケーションを作成

“`terminal:ターミナル
$ rails new devise_name
“`

### 2. トップ画面を作成

“`terminal:ターミナル
$ cd devise_name
“`

“`terminal:ターミナル
$ rails g controller homes top
“`

“`ruby:routes.rb
Rails.application.routes.draw do
root ‘homes#top’
end

元記事を表示

【SearchConsole】data-vocabulary.orgが非推奨に、パンくずgemのgretelを互換性のあるbuoysに乗り換え

# railsの超有名gemであるgretelからbuoysに乗り換えました。
railsの言わずと知れたパンくずのgemである、gretelですが現時点(2020/04/08)ではdata-vocabulary.orgを利用しているため
schema.orgを利用している buoys にライブラリを乗り換えました。

乗り換え方法はページ下部に記載。

## rails の gretel もそのうち対応されそうです。
現時点では対応されておりませんが。
グレーテルのFork先でPRが作られた、対応される見込みはあるとおもいます。

https://github.com/WilHall/gretel/pull/17

issueの方でも対応する予定はありますとコメントがありますね。
https://github.com/WilHall/gretel/issues/16

## 背景はGoogleの仕様変更
Google は2020年4月6日以降、data-vocabulary.org を検索結果のリッチリザルトの対象外にすることを決めた。

検索順位に影響がでるという情報は見たところ

元記事を表示

【Rails】CarrierWave+MiniMagickでユーザーアイコンを作る

CarrierWave + MiniMagickでユーザーアイコンを作ります。

### バージョン情報

* rails 5.2.3
* ruby 2.6.3

### ユーザーアイコンを作る

##### 元画像を切り抜く

width 100px, height 100pxで切り抜き、第三引数で切り抜きを行う際の中心点を指定します。

(app/uploaders/icon _uploader.rb)

“`ruby
process resize_to_fill: [100, 100, “Center”]
“`

#### サムネイルの設定

30×30のサムネイルを設定します。`.icon.thumb.url`で呼び出せます。
(app/uploaders/icon _uploader.rb)

“`ruby
version :thumb do
process resize_to_fit: [30, 30]
end
“`

#### 画像の表示

ヘッダーにはサムネイルを表示します。

(app/wiews/layouts/appliacation.html.erb

元記事を表示

Dockerでannotateを起動させる手順

#はじめに
annotateは現在のスキーマでまとめたコメントを、それぞれの上部または下部に追加しするとを知り「これは便利♪」ということで導入
Dockerでの導入でしたがうまく起動せず躓いてしまったため備忘録的に書こうと思いました。
#解決した手順
▼開発時に使うものなので**development**内に記載します

“`Gemfile.rb
group :development do
gem “annotate”
end
“`

▼インストールしてコンテナを再作成

“`
$docker-compose build
$docker-compose up -d
original_db_1 is up-to-date
Recreating original_web_1 … done

“`

▼migrationをトリガーに実行するように設定ファイルを生成

“`ターミナル:ターミナル
docker-compose exec web bundle exec rails g annotate:install
“`

▼Gemの実行

“`ターミナル:ターミナル

元記事を表示

【Rails】ポケモンのような「経験値に連動して、レベルアップする機能」を実装したい!

## 自己紹介
– 現在プログラミングの学習中の者です
– 言い回しや知識に関して、諸所間違い等あるかと思います
– その際は、ご指摘いただけますと幸いです

## やりたいこと
Railsでポケモンのように「経験値に連動して、レベルアップする機能」を実装すること。

## 問題点
どのようにテーブルを設計するのかわからない。

## 結論
では早速参ります。
###1.テーブル設計
– モデル名:User、カラム名:level, experience_point
– モデル名:LevelSetting、カラム名:level, thresold

以上、2つのモデルを作成してください。名称はお任せします。
但し、データ型は全てintegerでお願いします。

ちなみに、ここで**Userのlevelカラムのdefaultを1にして、experience_pointのdefaultを0にする**ことをお勧めします。(nilだと「加算」の時にエラーが起こりやすいため)
db:migrate前にマイグレーションファイルに追記するだけなので、是非調べてみてください。

“`
rails g

元記事を表示

秒を60進法表示に変更する方法

##やりたいこと

“`
8時間30分+10時間+10時間
=> 28時間30分
“`

↓↓↓ 秒数計算

“`
30600+36000+36000 / 60 / 60
=> 28.5
“`

**↑この数値を→「28:30」に直したい**

##合計値が24時間以内の場合

“`
Time.at(seconds).utc.strftime(‘%R’)

Time.at(30600).utc.strftime(‘%R’)
=> “08:30”
“`

これは問題なく動く!

しかし、、、

##合計値が24時間超えるとき(今回の問題)

“`
Time.at(102600).utc.strftime(‘%R’)
=> “04:30” ← 一周回った値しか返してくれない(Time.atを使用しているので当たり前だが。。。)
“`

#本題
##「28:30」のように表示させたい

“`
seconds = 102600
days = seconds / 86400
# days = 1
“`

↑ まずは何日分かを取得する

“`
time_at = Ti

元記事を表示

[あやふや解消シリーズ]ORMについて[vol.1]

# TL;DR
– ORMとは、オブジェクト指向のプログラミング言語で関係データベースを扱えるようにうまく変換してくれるもの。
– ORMを利用する際には「N+1問題」に注意する必要がある。
– Railsでは基本的にはORマッパーにAciruveRecordを使用している

# 3行で分かるこの記事を書いた動機
“`:
筆者:「Rails独学で勉強してます!」
????:「ORマッパーは何使ってる?」
筆者:「ミ°(学びの浅はかさを見破られ恥ずかしさのあまり舌をかみ切って死亡)」
“`

# ORMってなんの略?
ORMとは、
__`Object-relational mapping`
(日:オブジェクト関係マッピング)__の略称です。

# ORMって何?
>
– ORMとは、アプリケーションが持つリッチなオブジェクトをリレーショナルデータベース(RDBMS)のテーブルに接続することです。
– オブジェクト関係マッピングは、オブジェクト指向言語からリレーショナルデータベースにアクセスする技術である。
– オブジェクト関係マッピングとは、データベースとオブジェクト指向プ

元記事を表示

Rails コマンドが急に使えなくなった

久しぶりにrailsを起動しようとしたらrails sが通りませでした。
同じくrails -vやrails newをしても同じ様な状態になります。

色々調べたのですが、どうしても解決できずにこちらで質問させていただきます、、、
(初心者です、質問の仕方が間違っていたらすみません)

` dlopen(/Users/ユーザー名/.rbenv/versions/2.5.1/lib/ruby/2.5.0/x86_64-darwin18/digest/md5.bundle, 9): Library not loaded: /usr/local/opt/openssl/lib/libssl.1.0.0.dylib (LoadError)
Referenced from: /Users/ユーザー名/.rbenv/versions/2.5.1/lib/ruby/2.5.0/x86_64-darwin18/digest/md5.bundle
Reason: image not found – /Users/ユーザー名/.rbenv/versions/2.5.1/lib/ruby/2.5.

元記事を表示

開発環境、テスト環境、本番環境って何?雑にメモ

3つの環境が用意されているよ

例えば、herokuにpushする場合は、本番環境を使用しているみたい

こいつらは、RAILS_ENVという環境変数を用いて動作モードを切り替えられる

例えば、コマンドプロンプトで普通に指令を送る場合は、開発環境に送っている。

じゃあ「本番環境」を指定して実行したい時は、、、

このコードを記述すればおk

RAILS_ENV=production

元記事を表示

クロスサイトリクエストフォージェリ(CSRF)の対策

##クロスサイトリクエストフォージェリ(CSRF)
Webサイトにスクリプトや自動転送(HTTPリダイレクト)を仕込むことによって、利用者に意図せず別のWebサイト上で何らかの操作(掲示板への書き込みや銀行口座への送金など)を行わせる攻撃手法のことをいいます。
CSRFの脆弱性が存在すると以下のような被害を被る可能性があります。
①利用者のアカウントによる物品の購入
②利用者の退会処理
③利用者のアカウントによる掲示板への書き込み
④利用者のパスワードやメールアドレスが変更
CSRF脆弱性の影響は「重要な処理」の悪用に限られるため、CSRFの脆弱性を個人情報の取得等に用いることはできません。
###CSRFの攻撃例
例えば、利用者が罠サイトを閲覧することによってパスワードが変更されてしまう場合
①利用者がexample.jpにログインしている
②攻撃者は罠を作成
③利用者が罠を閲覧する
④罠のJavaScriptによる、被害者のブラウザ上で攻撃対象サイトに対し、新しいパスワードabcdefがPOSTメソッドにより送信される
⑤パスワードが変更される
##CSRFの対策
CSRF攻撃を防

元記事を表示

React + Rails API + axios + react-router-domで複数のフォームを作成する

こんばんは!スージーです!
最近、学習し始めたReactにてフォームの扱い方で苦労したので備忘録。

# やりたい事

***railsのcreateアクションにてフォームに2つのデータを入力してDBへ保存しビューで一覧表示する。***
汚いレイアウトは勘弁して下さい。今回はCRUDの新規作成(Create)と一覧表示(Read)の実装をする。

![demo](https://gyazo.com/bf4b6026cfd334ddcfda590369c854a1/raw)

### 開発環境

Ruby 2.5.1
Rails 5.2.4
React 16.13.1

### 参考
>Ruby on Rails+ReactでCRUDを実装してみた
https://qiita.com/yoshimo123/items/9aa8dae1d40d523d7e5d

>[Rails API][React]axiosを用いて”POST”したい!
https://teratail.com/questions/166335

>Ruby on Rails+ReactでCRUDを実装してみた
http

元記事を表示

rspecで例外が起きたことを確認する

## この記事で書くこと :pen_ballpoint:
以下のような処理でのensureの処理が走ったかどうかを確認する方法

“`rb
class Cat < ApplicationRecord validates :todays_foods, presence: true def sing! sing_a_song! ensure say_hello end def say_hello 'にゃーん' end def sing_a_song! if todays_foods.empty? raise お腹が空いてたらエラー return end 'にゃにゃにゃーん!' end end ``` ## テストの中身 ```rb describe '#sing!' do context 'with exception error,' do let!(:cat) do cat = build(:cat, name: 'お腹すい

元記事を表示

クロスサイトスクリプティング(XXS)対策

##クロスサイトスクリプティング(XXS)
Webアプリケーションでは、外部からの入力などに応じて表示が変化するページを実装したいことがしばしばあります。
しかし、この部分のHTML生成の実装に問題があると、外部よりスクリプトを埋め込まれクッキーを盗まれたり、JavaScriptによる攻撃を受けてしまうおそれがあります。
こういった攻撃手法をクロスサイトスクリプティングと言います。
###XSSの攻撃例
では、実際にXSSの脆弱性を用いた攻撃例です。
ここでは登場人物を用いて説明します。
ユウスケ・・・ 一般ユーザ
タカシ ・・・攻撃を仕掛ける悪意のある者
1. タカシはXSSの脆弱性があるサイトに悪意のあるスクリプトを埋め込む
2. タカシは1.でスクリプトを埋め込んだサイトをリンクに指定する罠サイトを用意する
3. タカシはユウスケに罠サイトへ誘導するようなメールを送信する
4. ユウスケは罠サイトにアクセスし、タカシがスクリプトを埋め込んだサイトにアクセス
5. ユウスケのブラウザ上でタカシが埋め込んだスクリプトが実行される
※ここで出てくる罠サイトとは、スクリプトを埋め込んだX

元記事を表示

sidekiqのキューが処理されずCPU負荷が上がって困っている人へ

# 現象

– CPU使用率が100%近くで張り付いてしまう
– sidekiqのキューが処理されない

Compute_Engine_-_mixture_-_Google_Cloud_Platform.png
Sidekiq.png

# 原因

redis3系で運用しているシステムで`sidekiq`のバージョンを`> 5.2.7`から`< 6.0`に上げた為。 `> 5.2.7`まではredis2.8(3.0.3)以上であれば使えていた

元記事を表示

情報セキュリティとは

##情報セキュリティ
Webサービスにおいてのセキュリティ(安全保障)です。情報セキュリティにおける理想は、「不正なアクセスや情報の漏洩を防ぎつつ、権限がある人は便利に利用できる」状態を維持することです。「機密性」「完全性」「可用性」の3つの要素を維持することを目標にします。
①機密性 権限を持たない人が情報資産を見たり使用できないようにすること
②完全性 権限を持たない人が情報を書き換えたり消したりできないようにすること
③可用性 権限を持つ人がいつでも利用したいときに利用できるようにすること
##脆弱性(ぜいじゃくせい)について
コンピュータやネットワーク、アプリケーション全体のセキュリティに弱点を作り出すコンピュータソフトウェアの欠陥や仕様上の問題点のことを脆弱性と言います。Webアプリケーションに脆弱性があると、開発者側だけでなく、利用者側も被害を被る可能性があり、様々な被害が生じる可能性があります。脆弱性は、バグや、開発者のセキュリティチェック不足により生まれます。
###脆弱性によってもたらされる被害
脆弱性がアプリケーション内に存在することによって、以下のような被害が想定

元記事を表示

PostgreSQLのデータベースの存在を確認する

# はじめに
Railsのコマンドから、PostgreSQLにデータベースを作成/削除をして、本当に作成されているか、削除されているか、確認してみる。

# 環境
Vagrant + Ubuntu 16.04.5 LTS
Rails 5.2.4.2

# 手順
Railsのプロジェクトファイルを作成する。

“`cmd
$rails new test01 -d postgresql -B
$cd test01
“`

データベースを作成する。

“`cmd
$rails db:create
Created database ‘test01_development’
Created database ‘test01_test’
“`
データベースの一覧を表示する。

“`cmd
psql -l
“`
確かに、作成されている事が確認できます。一覧は、**qキー**で閉じる事ができます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/94029/c808e132-0ce5-c8

元記事を表示

【Rails】Ajaxを用いた非同期投稿の実装

#目標

![ezgif.com-video-to-gif (1).gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/579893/f73c1bf0-8892-b3d8-67f4-0bb2d1a9ba3f.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

# 投稿機能の実装

### テーブル

“`ruby:schema.rb
ActiveRecord::Schema.define(version: 2020_04_05_115005) do

create_table “books”, force: :cascade do |t|
t.string “title”

元記事を表示

RailsでERBを直接使い、文字列として結果を取得する

#はじめに

Railsのviewではなく、erbの結果を文字列としてほしいケースが有ったので、その方法です。

パスにRails固有のコードを使っていますが、そこ以外はRailsじゃなくても使えます。

# ERBのインスタンス生成

“` ruby
file = File.read(Rails.root.join(‘app’, ‘views’, ‘hoge’, ‘fuga.html.erb’).to_s)
erb = ERB.new(file)
“`

といった形でERBのインスタンスを生成できます。

Railsじゃない場合は、

“`ruby
file = File.read(‘/path/to’)
“`

みたいな感じですね。

# 結果の取得

“`
result_text = erb.result_with_hash(hoge:1, fuga:2)
“`

で結果の取得ができます。

引数に渡したハッシュが、そのままerb内でkeyを変数名、valueを値とするローカル変数として読み込まれます。

# あとがき

erbを直接使いたい状況、そこまで

元記事を表示

【Rails5】rails_adminで多対多の関連付けを上手く編集する方法

#はじめに
一瞬でめちゃイケてる管理画面を作ってくれる`rails_admin`
今までCRUDそれぞれ画面編集してたのはなんだったんだ……と思う完成度です。

しかし、多対多の関連付けの時、毎回のようにエラーが出ました。

#出たエラー
ActiveRecord::HasManyThroughOrderError in RailsAdmin::Main#edit

#原因
色々試しましたが、Modelでの関連付け設定の順番が原因でした。

#構成
タイトルごとに複数のタグ。
タグごとに複数のタイトル。

title has_many tags
tag has_many titles

これを実現させるために、tag_mapsというテーブルを間に挟んでいます。

[tag_maps]
id
title_id
tag_id

#解決したコード

“`ruby:model/title.rb
class Title < ApplicationRecord has_many :tag_maps has_many :tags, through: :tag_maps end ``

元記事を表示

OTHERカテゴリの最新記事