- 1. Deviseを使ってController側からログアウトさせる
- 2. Rubyの公式リファレンスで調べたいとき
- 3. 条件付きバリデーション(特定の状況においてバリデーションを発生させる方法)
- 4. ruby: 個人でよく使うtrue falseを返す正規表現の書き方
- 5. Rubyをインストールする(macOS)
- 6. [Ruby on Rails] serverが起動せず”Usage: rails new APP_PATH [options]…”となってしまう場合の解決法
- 7. 【初心者向け】Rubyで超簡単な本紹介アプリを作ってみる(カテゴリ指定ver)
- 8. WARN Selenium [DEPRECATION] Selenium::WebDriver::Chrome#driver_path= is deprecated. 対策
- 9. RubyとRailsの気になる単語
- 10. 異業種・異職種からIT業界への転職
- 11. Vim/Neovimのターミナル機能を使って瞬時にRSpecを走らせる
- 12. あっさり読むrails②(eachメソッド)
- 13. RailsでJSONファイルを読み込み、配列として扱う
- 14. Sign in with AppleのJWTをサーバーサイドで検証する
- 15. 【Rails】ユーザーログイン管理以外でsessionメソッドを使う
- 16. [MySQL] indexとは、たそ
- 17. 初心者によるプログラミング学習ログ 205日目
- 18. Ruby 2.7.0 で個人的にグッときた新機能をちょっぴり試してみた
- 19. 子モデルが空なら更新しない belongs_to has_one
- 20. 【Rails】rails g controllerコマンドで特定のディレクトリ以下にファイルを生成するコマンド
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
Rubyの公式リファレンスで調べたいとき
Rubyには公式リファレンス( https://docs.ruby-lang.org/ ) がありますが検索ができません。
おまけにググってみると、非公式のものばかりヒットします。
![Screenshot from 2020-01-07 10-43-18.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/487507/381b0bb8-e754-ce30-1a26-857907fbf0f6.png)
# 解決策
siteオプションをつけて検索します。
`attr_writer site:docs.ruby-lang.org` で検索してみると…
![Screenshot from 2020-01-07 10-51-10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/487507/fd8c75ad-5a0d-42f1-5e6e-bc72cc53eab5.png)
条件付きバリデーション(特定の状況においてバリデーションを発生させる方法)
##実現したいこと
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をインストールする(macOS)
rbenvを使ってRubyをインストールします(2020/1/7実施)
#環境
macOS Catalina 10.15.2#Homebrewのインストール
[こちら](https://brew.sh/index_ja)にアクセス
記載されているコマンドを実行します
“`
/usr/bin/ruby -e “$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)”
“`完了確認
“`
brew -v
“`バージョンが表示されて完了です
“`
Homebrew 2.2.2
“`
#rbenvのインストール[こちら](https://github.com/rbenv/rbenv#homebrew-on-macos)の手順通りコマンドを実行します
“`
brew install rbenv
“`初期設定を行います
“`
rbenv init
“`
以下のように表示されました“`
# Load rbenv automaticall
[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で超簡単な本紹介アプリを作ってみる(カテゴリ指定ver)
#Rubyで簡単な本の紹介アプリを作成。今回はeach do とif文を使って、categoryを指定して作ってみた。
#条件
・本の名前が登録できる
・著者が登録できる
・カテゴリ一覧を表示させる
・カテゴリには番号をつける
・カテゴリが登録できる
・最後に本の名前、著者名、カテゴリを一覧表示させる#擬似コードを考える
“`
puts “本の名前を登録”
title= 名前を取得
puts “著者を登録”
author = 著者名を取得
puts “本のカテゴリを入力してください”
categorys = 配列を使ってカテゴリ一覧を作る
カテゴリ名の横に数字をつける
each do を使ってカテゴリを表示させる
category = カテゴリ番号を取得もし1と入力されたら、○○と表示させる
もし2と入力されたら、○○と表示させる
もし3と入力されたら、○○と表示させる
もし1,2,3のどれでもなかったら、その他と表示させるputs “以下の通り登録しました”
puts “本の名前は○○”
puts “著者の名前は○○”
puts “カテゴリは○
WARN Selenium [DEPRECATION] Selenium::WebDriver::Chrome#driver_path= is deprecated. 対策
某所の申し込みフォームを自動入力するツールを久しぶりに起動したらこんなメッセージがでたのでなんとかする。
といっても `Selenium::WebDriver::Chrome#driver_path=` を使っているコードはない。GEMの内部ということでGemfileを以下のように編集して `bundle update` すればOK。
“` diff
-gem ‘chromedriver-helper’
+gem ‘webdrivers’, ‘~> 4.0’
“`そもそも `chromedriver-helper` が deprecated だそうで。
RubyとRailsの気になる単語
時々あの、あれ、あの〜意味なんだっけって単語を記していきます。
あくまで一言で行きたい。深追いはしない派。– オブジェクト `クラスの参照とインスタンス`
– クラス `入れるべきデータとメソッドを記載した設計図`
– クラスの参照 `オブジェクトの所属するクラス`
– インスタンス `クラスの設計図から出来たもの`
– インスタンス変数 `クラス内であれば全メソッドで使用することができる、@で定義`
– module `ミックスイン、ネームスペースを提供`
– include `インスタンスとしてメソッドを追加`
– extend `クラスとしてメソッドを追加`
– ブロック `do~endもしくは{}で囲まれた処理のカタマリ`
– Proc `ブロックを持ち運び便利なオブジェクトにしたもの`
– Lambda `Procオブジェクトを作る方法の一つ。Procとの違いは引数チェックする&returnした後もメソッドを実行し続ける`
– joins `sqlでINNER JOIN`
– INNER JOIN `関係があるデータだけを取ってきてくれる`
– includes `データ
異業種・異職種から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】ユーザーログイン管理以外で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が設定されたカ
初心者によるプログラミング学習ログ 205日目
# 100日チャレンジの205日目
twitterの100日チャレンジ#タグ、#100DaysOfCode実施中です。
すでに100日超えましたが、継続。100日チャレンジは、ぱぺまぺの中ではプログラミングに限らず継続学習のために使っています。
205日目は
おはようございます
205日目udemyでwebサイトコーディング
progateでRubyちょこっとやってみた#100DaysOfCode Ruby 2.7.0 で個人的にグッときた新機能をちょっぴり試してみた# 概要
Ruby 2.7.0 で導入された新機能のうち,次の機能を試してみた.– `irb` での複数行編集
– パターンマッチ[^2][^2]: 関数型言語で広く使われている機能.今回のバージョンで実験的に導入された.
# 詳細
## `irb` での複数行編集
Ruby 2.6 までの対話環境 Interactive Ruby でも複数行の関数などを記述することはできたが– 一度改行したら前の行に戻れない
– そもそも見づらいといった問題点が存在した.
![Ruby 2.6 までの複数行編集](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/478774/e3f21f5c-1d71-3b4a-0928-7e7a905bee22.gif “Ruby 2.6 までの複数行編集”)
しかしRuby 2.7 からは,改行しても前の行に戻ることができ,見た目もわかりやすくなった.
![Ruby 2.7 からの複数行編集](https://qiita-image-store.s3.ap-north
子モデルが空なら更新しない belongs_to has_one
# `mark_for_destruction`のフラグを立てる
DBにデータがあれば`child`が削除され、なければそのまま`parent`だけ登録される。
子モデルに`required: false`を設定しないと、子モデルの値が空のときに[xxx を入力してください]的なバリデーションエラーになる。“`rb:child.rb
class Child < ApplicationRecord belongs_to :parent, required: false end ``` ```rb:parent.rb class Clip < ApplicationRecord has_one :, :child => :destroy
accepts_nested_attributes_for :child
before_save :set_destroydef set_destroy
self.child.mark_for_destruction if self.child.present? && self.child.name.blank?
【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: