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

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

検索機能の実装(form_tag・ransack)

#検索機能の実装
form_tagとransackをそれぞれ用いた2種類の検索機能の実装を行いました。
特にこだわりがなければransackを用いたほうが簡単に実装できると感じました。

##form_tagを用いた検索機能の実装

タスク一覧が表示されるtasks#indexページに、検索フォームを実装しました。
検索フォームに入力されたキーワードがデーターベースにあるタスク名と部分一致した場合、そのタスクを表示されるようにしました。
(html.slim, bootstrapを用いました。)

“`ruby:views/tasks/index.html.slim
h1 タスク一覧

= link_to ‘新規登録’, new_task_path, class: ‘btn btn-primary’

= form_with :method => “get”, local: true do |f|
.form-group
= f.submit “Search”, :name => nil ,class: “btn btn-outline-primary”
= f.

元記事を表示

【Rails】has_manyの数を制限するvalidate

例えば、Userが持てるPostの数を制限したいときは、Post側にvalidateを設定します。

“`ruby:user.rb
class User < ActiveRecord::Base has_many :posts, dependent: :destroy end ``` ```ruby:post.rb class Post < ActiveRecord::Base MAX_POSTS_COUNT = 5 belongs_to :user validate :posts_count_must_be_within_limit private def posts_count_must_be_within_limit errors.add(:base, "posts count limit: #{MAX_POSTS_COUNT}") if user.posts.count >= MAX_POSTS_COUNT
end
end
“`

これで、6個目のPostを作成しようとするとエラーになります。

ちなみに、Use

元記事を表示

#Ruby 配列/ハッシュでぼっち演算子を利用して nil エラーを防ぐ ( NoMethodError: undefined method `[]’ for nil:NilClass )

`[]` メソッド対して引数を与えれば良い

# Array

“`rb
[:a, :b, :c][0]
# => :a

nil[0]
# NoMethodError: undefined method `[]’ for nil:NilClass

nil&.[](0)
# nil
“`

# Hash

“`rb
{a: :x}[:a]
# => 😡

nil[:a]
# NoMethodError: undefined method `[]’ for nil:NilClass

nil&.[](:a)
# nil
“`

# Original by Github issue

https://github.com/YumaInaura/YumaInaura/issues/3166

元記事を表示

Rubyでチンチロゲームを作る  第2回 勝敗判定

# 1.はじめに
 前回にひきつづきチンチロゲームをつくります。今回は自分と相手の役を比較し、どちらが強いかを判定させます。

# 2.勝敗判定の概要
 登場する役を書き出すとこんなかんじになります。
“`
(最弱) ヒフミ < 目なし < 通常の目(1)...通常の目(6) < シゴロ < ゾロ目 < ピンゾロ (最強) ```  サイコロを3つ振ってそれぞれの目が「1,2,3」となるヒフミが最弱。すべての目が1のピンゾロが最強となっています。  勝敗判定は自分と相手の役を引数とし、勝ち負けを出力させます。やってみましょう。 # 3.メソッドの作成  はじめにメソッドをこんな感じで考えました。 ```ruby def check_win_lose(my_hand,opponent_hand) strength_relationship = [ 'ヒフミ','目なし', '通常の目(1)','通常の目(2)','通常の目(3)', '通常の目(4)','通常の目(5)','通常の目(6)', 'シゴロ','ゾロ目','ピ

元記事を表示

Railsチュートリアル学習記録(第1章)

※チュートリアル2周目。開発環境はAtomを使用しています。
※頭の整理と備忘を兼ねて、学習内容を記録しています。
※表現の厳密さや精緻さよりも、直感的に理解しやすいよう記録しています。

・第1章でやりたいこと
⇨開発環境(アプリを作っている場所)で、「Hello World」という文章を表示させるプログラムを作成し、本番環境(アプリを公開する場所)に公開する。

・最初にRailsをダウンロードする。「-v 5.1.6」でバージョンを指定している。バージョン毎に機能が異なったりするので気をつける。

“`ruby:filename.rb
$ gem install rails -v 5.1.6
“`

・アプリ開発に必要なファイル等を一括ダウンロード(ここでもバージョン指定)

“`ruby:filename.rb
$ rails _5.1.6_ new hello_app
“`

・実装したい機能に応じてgemfileを修正し、必要なgemをインストール。
※gem:ある機能のソースコードの塊。機能を実装するたびに一からコードを書くのは大変なので、よく使う機能のコード

元記事を表示

Ruby:インスタンス変数(attr_accessorとself)に関して

本記事はまだ更新の可能性があります。
※2020/5/14時点

・attr_accessorメソッド
・インスタンス変数(メソッド内で定義するself)

これらの関連性と整理を追求する記事です。

出発点はメソッド内で
@変数名やself.変数名などの使い方がややこしすぎて
わけがわからなくなってしまったので始めています。

各種の初心者用説明サイトなどでは個別には説明されているものの
両方を混ぜ込んだコードでの説明はあまり見つけられませんでしたので
ここで自分の備忘録としても記載したく思います。

本記事は、なんとなく整理ができた成果物としてのコードを載せております。

それぞれの考察に関しては

###[attr_accessorメソッドについて](https://qiita.com/fumi1011/items/bfe585d726f9a8c92061)

###[メソッド定義の中におけるselfについて](https://qiita.com/fumi1011/items/484a4366ca424e06345e)

上記の2つの記事を参照ください。

元記事を表示

Kinx ライブラリ – Database (SQLite3)

# Database / SQLite3

## はじめに

**「見た目は JavaScript、頭脳(中身)は Ruby、(安定感は AC/DC)」** でお届けしているスクリプト言語 [Kinx](https://github.com/Kray-G/kinx)。言語はライブラリが命。ということでライブラリの使い方編。

今回は SQLite3 です。実際には後述するように Database オブジェクトを使用したほうが良いです。

* 参考
* 最初の動機 … [スクリプト言語 KINX(ご紹介)](https://qiita.com/Kray-G/items/ca08b6fb40d15dd0ec76)
* 個別記事へのリンクは全てここに集約してあります。
* リポジトリ … [https://github.com/Kray-G/kinx](https://github.com/Kray-G/kinx)
* Pull Request 等お待ちしております。

SQLite ライブラリ自体は開発初期の段階からあったのですが

元記事を表示

ActiveRecordでnew => build => save! するとどうなる

関連付けのあるモデルにおいて、親レコードをnew => 子レコードをbuild => 親レコードをsave! したときの挙動が複雑な気がしたのでメモ。

(理解力が不足しているだけかもしれない。)

検証環境: ActiveRecord 6.0.2.1

# 結論を言葉で

– has_oneでは親レコードと子レコードのvalidityは独立している。
– has_manyでは子レコードが1つでもinvalidなら親レコードもinvalidになる。

親レコードをsave!したとき、

– 親レコードがinvalidならraiseする
– 親レコードも子レコードもvalidな場合、insertがtransactionで囲まれて実行される
– 親レコードがvalidで子レコードがinvalidな場合(上記の性質によりhas_oneでのみありうる)、親レコードのinsert処理のみが実行される

# 実験

サンプルは以下。

migrations:

“`ruby
class CreateTables < ActiveRecord::Migration[6.0] def chang

元記事を表示

herokuを使ったデプロイ手順

今回はherokuを使ったデプロイ方法について紹介していきます。

#手順

1.herokuにログインする(herokuのアカウントがない人は下記のURLからアカウントを作成しましょう)
https://signup.heroku.com/

2.Gemfileを以下のように編集

*DBでsqliteを使用している場合*

“`ruby

group :development do

gem ‘sqlite3’
# Access an interactive console on exception pages or by calling ‘console’ anywhere in the code.
gem ‘web-console’, ‘>= 3.3.0’
gem ‘listen’, ‘>= 3.0.5’, ‘< 3.2' # Spring speeds up development by keeping your application running in the backgroun

元記事を表示

【FactoryBot】外部参照キーのカラムデータの作成方法

# 【FactoryBot】外部参照キーのカラムデータの作成方法

FactoryBotで外部参照キーとなるカラムデータを作成する方法を調べたので内容をまとめます.
例えばPostモデルでファクトリデータを作成する際に一緒に投稿者となるUserのファクトリデータを作成するような状況です。

## 目次
1. [状況](#状況)
* [動作環境](#動作環境)
* [手順](#手順)
* [結果](#結果)
* [当初つまづいた点](#当初つまづいた点)
* [おわりに](#おわりに)

## 状況

Messageモデルのテストを行うためにConversationモデルとUserモデルのデータが必要です。
下記が今回のER図です。

Messageモデルは`belongs_to :user, belongs_to :conversation`というアソシエーションを持ちます。

すなわちMessageモデルのFactoryBotを実行した際にConversationモデルとUserモデルのデータを生成する必要があります。

![image.png](https://qiita-ima

元記事を表示

Rubyのsortとsort_byを理解してマルチソートをしよう

Rubyの配列を並び替えるときは`Array#sort`か`Array#sort_by`を使うことになるかと思います。

“`ruby
data = (1..10).to_a.shuffle
p data.sort # [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
“`

こんなシンプルなsortをする場面なんてほとんど無いでしょうから、なんの参考にもなりませんね笑

よくあるものですと、DBやcsvなどのデータを取得したあとに並び替えたいときですね。

“`ruby:サンプルデータ
require ‘date’
data = [
{id: 1, name: ‘吉田(A)’, ruby: ‘yoshida’, join_date: Date.new(2009, 4, 1)},
{id: 2, name: ‘鈴木’, ruby: ‘suzuki’, join_date: Date.new(2015, 4, 1)},
{id: 3, name: ‘吉田(B)’, ruby: ‘yoshida’, join_date: Date.new(2009, 4,

元記事を表示

Rails パンくずリスト gretel の使い方

## 概要
こんにちは、今回はパンくずリストを作成する際に使ったgretelというgemの使い方を記載します。

[gretel](https://github.com/WilHall/gretel)

こんな感じです。
スクリーンショット 2020-05-14 19.22.42.png

## インストール

“`
gem ‘gretel’
“`

bundle installします。

## ファイル作成
下記コマンドを打つと専用の設定ファイルが作成されます。

“`
$ rails generate gretel:install
“`
config/breadcrumbs.rbというファイルが作成されたはずです。

## パンくずを作成

前項で作成された設定ファイルにパンくずを設定していきます。

元記事を表示

AtCoder Beginners SelectionでRuby学習【PracticeA】標準入力

## はじめに
Ruby学習の一環として「競技プログラミング(競プロ)」に挑戦します。
そのための学習の中で学んだことをアウトプットしていきます。
今回は「AtCoder Beginners Selection」の一問目(PracticeA)より、標準入力について。
https://atcoder.jp/contests/abs

## 問題
整数a,b,cと、文字列sが与えられます。
a+b+cの計算結果と、文字列sを並べて表示しなさい。

制約
1≤a,b,c≤1,000
1≤|s|≤100

入力は以下の形で与えられる。

“`ruby
a
b c
s

# 例
1
2 3
test
“`
a+b+cとsを空白区切りで1行に出力せよ。

“`ruby
出力例
# 上記例の場合
6 test
“`

## 解答例
“`ruby

a = gets.to_i
b,c = gets.chomp.split(“”).map(&:to_i)
s = gets.chomp

print(“#{a+b+c} #{s}\n”)
“`
ここで使われている標準入力に関わるメソッドを一

元記事を表示

hamlの導入方法

今回はhamlを導入し、erbをhamlに変換する方法を紹介していきます。

#手順

1.Gemfileに以下を記述

“`ruby

gem ‘haml-rails’
“`

2.bundle install

“`
bundle install
“`

3.ターミナルで以下のコマンドを実行し、拡張子がerbのファイルをhamlに変換する。

“`
$ rails haml:erb2haml
“`

※Would you like to delete the original .erb files? (This is not recommended unless you are under version control.) (y/n)
と聞かれるため、yと入力するとデフォルトで作成されたerbファイルはHamlに変換される。

以上

元記事を表示

bootstrapの導入方法

#bootstrapってなに?

RubyのフレームワークはRuby on Railsで言うところの、
boootstrapとはCSSのフレームワークみたいなものです。

bootstrapを学べば、効率的にビューを実装できるので知っておいて損はないです。。

#導入方法

1.Gemfileに以下を記述する。

“`ruby

gem “sass-rails”,”~>5.0″
gem “bootstrap-sass”,”~>3.3.6″
gem “jquery-rails”
gem “jquery-ui-rails”
“`

2.bundle updateする

“`
 $ bundle update
“`

3.appcation.cssを.scssに拡張してから下記を記述する。

“`ruby
 @import “bootstrap-sprockets”;
 @import “bootstrap”;
“`

4.appcation.jsの中に下記を記述。

“`  
//= require jquery //= require~と書いてる部分の一番上に記述
//=

元記事を表示

モデルの単体テストの書き方

#はじめに

みなさん単体テストは好きですか??
私は苦手です。。。。

多分苦手な方も多いと思うので、今回はモデルの単体テストの書き方について紹介できればいいかなと思います。
私も未熟なので、参考程度にしてください。おねがいします。。

#1.Gemfile

はじめにgemfileにrspecを導入していきます。
今回はfactory_botも使うので、以下のようにgemfileに記述していきましょう。

“`ruby
group :development, :test do
gem ‘rspec-rails’, ‘~> 3.8’
gem ‘factory_bot_rails’, ‘~> 5.0’
end
“`

bundle installも忘れずに!

“`
$ bundle install
“`

#2.RSpecの設定

ターミナルで以下のコマンドを記述。
specというディレクトリが生成されます。

“`ruby
$ rails g rspec:install
“`
.rspecに以下を記述

“`ruby
–format documentati

元記事を表示

【簡潔】Brakeman導入方法-Rails-

###Brakeman導入方法
####Brakemanとは
Brakemanとはアプリケーションを開発した際にセキュリティ検査ができるgemの一つです。
Railsでは元からセキュリティについては比較的維持できるものですが、私が開発した際に補助的にこのようなツールを使ってみました。ちなみにBrakemanは静的なツールです。

####導入方法

作成中のプロジェクトの`Gemfile`内の`group :development do`と`end`の間に`gem ‘brakeman’, require: false`を追記します。

“`Gemfile

group :development do
gem ‘brakeman’, require: false
end
“`

次にターミナルの作成中アプリのディレクトリで`brakeman`と叩けばBrakemanでのセキュリティチェックが始まります。

“`ターミナル
% brakeman
“`
出力はこんな感じです。

“`ターミナル
== Brakeman Report ==

Application Path:

元記事を表示

CurrentBranchにMasterBranchの情報を反映させたい

#背景

チーム開発において自分の作業ブランチにマスターブランチの情報をもってきたい!!
だけどどうすればいいかわからない、、、

そんなときの解決策を今回は紹介します。

以下の4つのコマンド実行するだけです。

コマンドを実行する前の注意点として、編集途中のファイル等がある場合は、一度コミット&プッシュして何もない状態にしておきましょう。

“`


$ git checkout master


$ git pull origin master


$ git checkout 開発中のブランチ名


$ git merge origin master

“`

以上

元記事を表示

devise導入したときのカラムの増やし方

#悩み事

devise導入したらデフィルトでemailとpasswordしか入ってないじゃん、、、、
usersテーブルにnameやaddressカラムとかも追加したいのにどうすればいいかわからない!!

ってこと一度はありますよね。

今回はそのお悩み解決いたします!!

#1.usersテーブルにカラムを追加

今回はnameカラムを追加してみようと思うので、
以下のようにターミナルでコマンドを実行しましょう。

“`
$ rails g migration AddNameToUsers name:string

$ rails db:migrate
“`

#2.application_controller.rbを編集

application_controller.rbを以下のように編集しましょう。
これでユーザー登録時にnameカラムが保存されるようになります。

“`app/controllers/application_controller.rb
class ApplicationController < ActionController::Base befo

元記事を表示

【rails】active_hash セレクトボックス作り方

# 目的
active_hashを使うと
セレクトボックスの選択肢を作る上で…
DBを使わずに、使うことができる。
![e45d5968e89b3a236c6a55a3f25b2777.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/628336/873419f5-fab3-9ce1-e647-aa5bb5ac1569.gif)

# 準備

1.Gemfileに以下を記述する。

“`
gem ‘active_hash’
“`

下記と合わせてサーバの再起動も行う

“`
$ bundle install
“`

準備はこれだけ

# 実装例
itemsテーブルにregion_idカラムを用意して、itemの登録の時にregion(発送元の地域)をアクティブハッシュから選択する。(下のgifのようなイメージ)
![e45d5968e89b3a236c6a55a3f25b2777.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws

元記事を表示

OTHERカテゴリの最新記事