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

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

Deviseを使ってController側からログアウトさせる

## 1. 経緯

userテーブルにflgを持たせて、0以外の人はログインさせたくないなぁ・・・
ということで調べてみたところ以下の内容でできました:raised_hands:

## 2. 結果

“`appllication_controller.rb
before_action :sign_out_user, if: :user_signed_in?
protected
# ログイン後のパス
def after_sign_in_path_for(resource)
root_path
end
# flgが0以外はログアウトさせる
def sign_out_user
sign_out_and_redirect(current_user) if current_user.flg == 0
end
“`

## 3. 詳しい内容

– after_sign_in_path_for
ユーザーがログイン後、どこに飛ばすか
https://rubydoc.info/search/github/plataf

元記事を表示

emun のform select対応 実際に使えたもの

上記ものもを日本語対応させたい場合、下のように書く

“`rb

<%= form.select :status, Post.statuses.keys,class:"form-control" %>
“`

“`rb

<%= form.select :status, Post.statuses.keys.map {|k| [I18n.t("enums.post.status.#{k}"), k]} ,class:"form-control" %>
“`

元記事を表示

条件付きバリデーション(特定の状況においてバリデーションを発生させる方法)

##実現したいこと
PostモデルのFormにてGenreモデルのnameはuniquenessかつnameは空でもバリデーションに引っかからないようにしたい。そして空のデータは表示させたくない。

整理すると、
1. カラムはuniqueness、しかしカラムが空であった場合でもデータ送信ができる。
2. 空の状態を保存したものは出現させない。

課題
カラムが空であった場合データ送信ができる=空の場合uniquenessのバリデーションには引っかからないようにする。

解決策
**条件付きバリデーションを作成する**

## 前提
新規投稿を作るformに置いてPostモデルとGenreモデルの2つのデータ送信を同時に行いたい。

Formの一部(ここでPostモデルのFormでGenreモデルのデータも同時に送信)

“`rb

<%= fields_for @genre, :genres do |form| %>
<%= form.label :新しくジャンルを作る %>
<%= form.text_field :name, class:"fo

元記事を表示

ruby: 個人でよく使うtrue falseを返す正規表現の書き方

__※備忘録__

__半角小文字の英文字かどうかを判定__

“`ruby

/\A[a-z]+\z/.match?(`kaye`)
=> true
“`

__半角大文字の英文字かどうかを判定__

“`ruby

/\A[A-Z]+\z/.match?(“KAYE”)
=> true
“`

__半角数字かどうかを判定__

“`ruby

/\A[0-9]+\z/.match?(21)
=> true
“`

__半角英文字と半角数字かどうかを判定__

“`ruby

/\A[a-zA-Z0-9]+\z/.match?(“kayeN21”)
=> true
“`
__半角英文字と半角数字かどうかを判定__

“`ruby

/\A[a-zA-Z0-9]+\z/.match?(“kayeN21”)
=> true
“`

__半角英文字と半角数字と特定の記号のみを許容する判定__

“`ruby

/\A[a-z0-9[.][_]]+\z/.match?(“kaye.nr”)
=> true
“`

適宜暇なときに追記していきます。
なお、こんな書き方の

元記事を表示

[Ruby on Rails] serverが起動せず”Usage: rails new APP_PATH [options]…”となってしまう場合の解決法

経緯

私がRailsの環境を構築する際「Rails s」でサーバーが起動しない問題に陥ったが解決に至ったためここにその方法を記載したいと思う。
投稿に至った経緯は以下の通り。

– Web上で私と同じように悩んでいる方が多く、またほとんどの記事において解決に至っていなかったため。

– 該当する記事がそうないように感じたため。

– 同じ状況に陥っている同志の助けになりたいと考えたため。

陥った状況

1. 前提として使用OSは Windows10
– コマンドプロンプトで`rails s`を実行すると「Usage: rails new APP_PATH [options] …(以下省略)」が表示されてサーバが起動できていない。
– Ruby、SQLite、Ruby on Railsはインストールされている。
– `rails new プロジェクト名`を実行済み ( 新しいrailsプロジェクトを生成するコマンド )
– `cd プロジェクト名`を実行済み ( プロジェクトのrootに移動するコマンド )

詳細な状況

– 本来は`rails s`を実行した際、下

元記事を表示

RubyとRailsの気になる単語

時々あの、あれ、あの〜意味なんだっけって単語を記していきます。
あくまで一言で行きたい。深追いはしない派。

– オブジェクト `クラスの参照とインスタンス`
– クラス `入れるべきデータとメソッドを記載した設計図`
– クラスの参照 `オブジェクトの所属するクラス`
– インスタンス `クラスの設計図から出来たもの`
– インスタンス変数 `クラス内であれば全メソッドで使用することができる、@で定義`
– module `ミックスイン、ネームスペースを提供`
– include `インスタンスとしてメソッドを追加`
– extend `クラスとしてメソッドを追加`
– ブロック `do~endもしくは{}で囲まれた処理のカタマリ`
– Proc `ブロックを持ち運び便利なオブジェクトにしたもの`
– Lambda `Procオブジェクトを作る方法の一つ。Procとの違いは引数チェックする&returnした後もメソッドを実行し続ける`
– joins `sqlでINNER JOIN`
– INNER JOIN `関係があるデータだけを取ってきてくれる`
– includes `データ

元記事を表示

Vue.js入門としてWEBブラウザで使える会社の歓送迎会用費用計算機を作った。

# はじめに
会社の歓送迎会の幹事。会社員ならば必ずと言っていいほどやらされる面倒くさい仕事。
2019年12月、ちょうど参加者20人を超える歓送迎会の幹事をやることになった。そこには歓送迎者に加え部長、課長、平社員勢揃いで、全員から同じ参加費を取るわけにもいかないので傾斜計算をする必要があった。

そして、いざ計算する時にやっぱり思う、「めちゃくちゃ面倒くさい…」
ゲスト3人タダで、部長が6000円で課長3人が5000円で平社員20人が4000円で…え?●●さんやっぱ出れない?→再計算が始まる。悪夢。

# できたもの
さっそくできたサイトは以下。着想からリリースまで1週間、15時間ぐらい。
「[歓送迎会の会費計算 | Cocktail -f liquor](https://cocktail-f.com/entry_fee)」
![スクショ.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/161682/0fb7dd3d-d72f-3436-dc9c-f2d3d38df690.png)

# 使った

元記事を表示

異業種・異職種からIT業界への転職

# はじめに
IT業界の有効求人倍率が上がり、IT人材の雇用待遇はどんどん良くなり、異業種からIT業界へ転職したい人が増えているかと思います。

しかし、全ての人にIT業界を進めるというようなことはしたくなく、どういう仕事であれば自分が頑張っていけるのかということを自己分析した上でIT業界が合っていると考えてくださった方へ向けた記事となります。

とういうのも、定年退職の年齢は60歳でしたが、それが65歳、70歳、・・・とどんどん引き上げられてきています。(再雇用も同様です。)
誰かが言っていた言葉ですが、労働の形が今までの長__時間__労働から長__期間__労働に変化していきます。
上記のような現状から筆者としての考えとしては、長い期間楽しく働くために、好きなことを仕事にして生きていくことがこれからの時代で一番重要なことになってくると考えています。

大学などでプログラムを扱ってきた人と比べると異業種からのIT業界への転職は積み重ねの数が圧倒的に違います。
この積み重ねの差を埋めるために、追いつくための努力は並大抵のものではありません。
IT業界への転職がうまくいったからと言って必ず

元記事を表示

Vim/Neovimのターミナル機能を使って瞬時にRSpecを走らせる

VimのターミナルでRSpecを実行したかったので実装してみました
![out.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/402968/9aaa5cf8-329f-29d1-ff16-da720404f590.gif)
(DB設定をしていないのでエラー吐いてます)

## 実装
[kassio/neoterm](https://github.com/kassio/neoterm)というVim/Neovimのターミナル機能のラッパーを使うと簡単に実装できました

`neoterm#do()`関数に実行したいコマンドを引数として渡すことで、ターミナルでコマンドを実行することができます

“`vimscript:(例)開いているファイルのspecを実行する関数
let g:neoterm_rspec_cmd=’bin/rspec’

function! termrspec#file() abort
let l:filename = expand(‘%’) ” ファイルのパス取得
call

元記事を表示

あっさり読むrails②(eachメソッド)

#はじめに
railsにおける`eachメソッド`の使い方を、極めてあっさり書いてみようと思います。
色々端折っていますが、ご了承ください。
#前提
今回は`Productテーブル`という、下記の様な設計のテーブルのデータを使用し、
登録されている全ての商品の`名前`と`金額`と`画像`を表示させたいと思います。

| Column | Type | Options |
|:———–|————:|:————:|
| name | string | null: false |
| price | integer | null: false |
| image | string | null: false |

#実行

コントローラーにてテーブルのデータを取得します。
(アクションは`index`としています)

“`ruby
def index
@products = Product.all
end
“`

ビューファイルには次のように書

元記事を表示

RailsでJSONファイルを読み込み、配列として扱う

備忘録。グローバル変数とか使っているのもしかしたらよくないかもしれないですね。あと、そもそもコントローラにこう言った内容は書くべきなのでしょうか。

# 目的
自分がPHPで作った、[第66回理工展の特集ページ一覧](https://rikoten.com/php/pages/events/feature/)をRailsで再現するために調べました。

# 実践
### JSON
適当にpublicフォルダの下に置きました。
`/public/json/sample.json`というJSONファイルを扱うと仮定します。中身はこんな感じ。
(先述の特集ページ一覧に類似したJSONを作りました。)

“`json:/public/json/sample.json
[
{
“name”: “脱出ゲーム バイオプロット”,
“text”: [
“――世界を、壊せ。”,
“チームで協力して謎解きをして、陰謀を暴け。”
],
“url”: “/feature/hexatrick”

元記事を表示

Sign in with AppleのJWTをサーバーサイドで検証する

# これはなに?
モバイル端末のapp側で Sign in with Apple を実施、ここで入手したトークンをサーバ側で検証する方法についてのメモ。
![スクリーンショット 2020-01-06 15.42.25.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/86923/5184e0d5-8d86-9a0d-ec77-8feb83d6c289.png)

# 環境
– ruby: 2.6
– rails: 5.3
– jwt: 2.1

# 概要
サーバ側での実施項目は以下。

– 公開鍵を取得、OpenSSL::PKey::RSAを作成する
– JWTをデコード、検証する

# 公開鍵を取得、OpenSSL::PKey::RSAを作成する
`https://appleid.apple.com/auth/keys`から公開かぎを取得、作成する。

“`ruby:publick_key.rb
module Apple
class PublicKey
def create_key

元記事を表示

rails グループ機能の実装

グループ機能の実装について書きます。
基本自分がやってきた内容の備忘録なので
内容が足りないところがありますが、御愛敬で

# 目次

1.コントローラ、モデルを作成する
2.ルーティングを設定する
3.グループに関するビューを作成
4.グループ作成機能を実装する
5.ルーティングを変更し、作成したグループをgroups#indexのサイドバーに表示する
6.グループ編集機能を実装する

## 1.コントローラ、モデルを作成

### 必要ファイルの作成
まず三つのコマンドを行い。作成する

“`bash:ターミナル
$ rails g controller groups
$ rails g model group
$ rails g model group_user
“`

### モデルからのデータベースの作成

“`ruby:groupモデルのマイグレーションファイル
class CreateGroups < ActiveRecord::Migration[5.2] def change create_table :groups do |t| t

元記事を表示

【Rails】ユーザーログイン管理以外でsessionメソッドを使う

初めて記事を投稿します。

現在Web系企業への転職を目指してポートフォリオを作成中です。
その中で、ログインユーザーのセッション管理に**session**メソッドは使用していましたが、
それ以外の用途で、**session**メソッドを使用して、ある機能を実装できたので
記事にして共有したいと思います。

[【参考】 sessionメソッドについて Railsチュートリアル](https://railstutorial.jp/chapters/basic_login?version=5.1#cha-basic_login)

#元ネタ
現在作成しているアプリにて、登録済みユーザーによって投稿された記事を、
・新しい投稿順
・「いいね」が多い順
での表示に切り替えられるそれぞれ用のボタンを作成しました。

どちらのボタンを選択しているかの判別用パラメータを、
ログインしているユーザーは、DBにてそのユーザーのレコード上に保存していたのですが、
ログインしていないユーザーの場合の管理方法について悩んでいました。

#解決策
Railsのsessionメソッドを使用することで解決しました

元記事を表示

[MySQL] indexとは、たそ

## はじめに
どうも、Pirikaraです。
終電を逃したので漫画喫茶で記事書いてます。よろしくお願いします。

[前回の記事](https://qiita.com/gakinchoy7/items/663a226f6aa1f23c59d1)で簡単にDBのパフォーマンス検証をしてみたのですが、「そういえばindexを使うと検索速度がはやくなるって聞いたことがあるぞ」と思ったので今回はindexについて書いてみます。

indexについては〇〇エキスパートのカリキュラムでも勉強はしましたが、正直「検索がはやくなるよ」程度の知識しかなかったので頑張って掘り下げようと思います。

とりあえずキーワードの意味合いをざっと追いかけたあと、indexを使用した場合の検索パフォーマンスを検証してみたいと思います〜。
学習中なので間違ってたら指摘していただけると助かります。

##Indexってなに?
「データベーステーブル内の検索処理を高速化するために設定する、本の索引のようなデータ構造のこと」だそう。へえ。
要するに普通のデータベーステーブルとは別に「索引」が作られて、
indexが設定されたカ

元記事を表示

【Rails】rails g controllerコマンドで特定のディレクトリ以下にファイルを生成するコマンド

## はじめに
通常は`controllers/`以下に作成されてしまうコントローラーを、特定のディレクトリ以下に作成するコマンドです。

## 環境
“`yaml
OS: macOS Catalina 10.15.1
Ruby: 2.6.5
Rails: 6.0.2.1
“`

## 通常
今回は、`posts_controller`を`index`アクションと`create`アクション付きで作成する場合を例にします。

通常は、以下のようにして作成しますがこのままでは`app/controllers/`ディレクトリ内に作成されます。

“`shell
$ rails g controller posts index create
“`

これを`controllers/api/v1/`内に作成したい場合は、以下のようにします。
 
## `api/v1/`以下に作成する場合

“`shell
$ rails g controller api/v1/posts index create
“`
もしくは

“`shell
$ rails g controller api:

元記事を表示

【Rails】ローカル環境構築であのホーム画面表示に辿り着いたのでメモとして残します(mac)

# はじめに
~~解説が不足した雑な~~備忘録です。
ローカルの構築でいろいろ苦戦してましたが一応目標のホーム画面が確認できたので手順残しておきます?

# 過去の失敗と環境の変更点
構築で引っかかっていたところは主に以下のところ

“`
$ bundle install
$ bundle exec rake db:create
“`
<対応(失敗)>
① サーバ起動 $ sudo mysql.server start (停止も含む)
② database.yml での password 設定
③ mysqlに権限付与

##環境
OS : Mac OS Catalina 10.15.1
Ruby : v 2.6.3p62
Rails : ~~v 6.0.1~~ → Rails : v5.2.4.1に変更
Homebrew : v 2.1.16
Bundle : v 1.17.2
~~MySQL : v 8.0.18 for osx

元記事を表示

Ruby環境構築とRailsについて エンジニア戦記#3

Ruby開発環境構築

* 「Homebrew」をインストールする
* 「Homebrew」を用いて「rbenv」をインストールする
* 「rbenv」を用いてRubyをインストールする

Ruby MVCとRouting

Model データを扱う
View  表示を扱う
Controller 指令塔
Routing コントローラーの機能

★ツイでのお勉強★

ファイル名変更

変更したいファイルを選択
→enter

tab+Command アプリ切り替え
デスクトップ戻る F11

アプリを終了させるショートカット
tab+Command q

元記事を表示

Rails SNSの基本機能実装 エンジニア戦記#4

Progateでお勉強したことまとめ

学習コースⅡとⅢを完走

Twiiterを模したクローンSNSの作成
全体ページと詳細ページの作成

ガイダンスに従って、下記機能を実装しました。

★全体
投稿一覧ページを表示する機能
新規投稿ページへのリンクの貼り付け

★投稿詳細
投稿詳細ページにcreate_atを表示する機能

★新規投稿ページ

新規投稿ページを表示する機能
新規投稿ページに文字入力する機能
新規投稿ページにおける投稿ボタンから投稿一覧ページにリダイレクトする機能
新規投稿ページにおける投稿ボタンからデータベースに保存する機能
保存した投稿を一覧ページに表示する機能
保存した投稿をcreated_idの降順で表示する機能

【感想】

何気なく実現していた操作をプログラム単位で見ていくのは、
人間の行動を心理学、もしくは脳科学という単位で理解できるときと同じような快感がある

元記事を表示

Railsで「Raty」を使った星機能をつける

コンビニで気軽に採れる高タンパク質を管理するサイトを作成時
ユーザーが口コミ投稿できる機能を作成、星による評価機能があるといいなと思ったので実装。
似たような記事は他にもあるが、slimで書かれている記事がなかったので執筆。

## 対象者、環境
・Railsで「Raty」を使って星の機能を作成したい人
・slimを使用している
・Rails 5.2.4

## ゴール

・星の入力(0.5単位)
・星の表示
・平均点算出

## 参考URL

http://wbotelhos.com/raty

イメージ

Image from Gyazo

## 前提

・Userモデル
・Foodモデル
・Reviewモデル

があることを前提にすすめます。[テーブル相関図](https:/

元記事を表示

OTHERカテゴリの最新記事