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

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

[Rails]DMリストの表示順をjoinsを使用してソートする

# はじめに
前回の記事で作成したDMリストを、上からやりとりの新しい順に表示させます。
前回作成したコントローラーの記述を編集するだけで、すごい簡単に出来ます。
仕様などは以下を参考にしてください。
[[Rails]DMユーザーリストを表示](https://qiita.com/Masanori_N/items/3520358139c2d2ad2973)

## コントローラーの編集
orderを使用して、messagesテーブルのcreated_atで基準に並べ替えたいのですが、orderで他のテーブルを使う場合は、joinsでINNER JOINをしてあげないと探せないため、以下のように書きます。

““rooms_controller.rb
def index
@rooms = current_user.rooms.joins(:messages).includes(:messages).order(“messages.created_at DESC”)
end
““
これだけで新しい順に並べることができます。

## つまずき

““NG.rb
@

元記事を表示

#Ruby の #正規表現 で 末尾が数字でない行の改行コードだけを削除する例 ( ruby remove with regexp not newline last of line match )

– `? “あいうえお123\nABC”
“`

“`rb
“XY23\n123\nABC\n12DD\n333”.gsub(/(? “XY23\n123\nABC12DD333”
“`

# Original by Github issue

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

元記事を表示

[Rails]DMユーザーリスト表示

#はじめに
個人で学習のため作成しているアプリにログインユーザーがDMを行っている相手のユーザーリストを作成しました。
その中でhelperメソッドを作成し使用したため備忘録として書きます。

####仕様

– DMの部屋が存在する(過去に部屋を作成した)ユーザーを一覧で表示
– 表示内容は
– ユーザー名
– 最新メッセージの内容
– まだメッセージがなければ[ まだメッセージはありません ]と表示

– テーブル
– user: ユーザーデータ
– room: DMを行う部屋データ
– entry: userとroomの中間テーブル

###usersテーブル
| Column | Type | Options |
|:–|:–|:–|
| id | integer | |
| name | string | |
##### association

– has_many :entries, dependent: :destroy
– has_many :rooms, through: :entries

###roo

元記事を表示

rubyのforでハッシュを扱った時の挙動

普段for文なんて使わないので意外とその挙動を忘れていた。

“`
-> % ruby -v
ruby 2.6.5p114 (2019-10-01 revision 67812) [x86_64-darwin18]
“`
#### hashをforでループさせる場合、要素としてkeyとvalueから成る配列が代入される

“`rb:
#keyとvalueのペアを配列として扱う

for val in {a: 1, b: 2}
p val
p val[0]
p val[1]
end

#=>
[:a, 1]
:a
1
[:b, 2]
:b
2
“`

#### 要素を配列として扱いたくない場合には次のようにする

“`rb:
for key, value in {a: 1, b: 2}
p key
p value
end
#=>
:a
1
:b
2
“`

元記事を表示

AtCoderでRubyの数値配列 Numo::NArray を利用…する前の基礎勉強

2020年4月12日開催の [AtCoder Beginner Contest 162](https://atcoder.jp/contests/abc162) から、正式に Ruby 2.7 が使えるようになった。

> **お知らせ**
>
> * 本コンテストから、使用可能言語が変更となります。
> * 使用可能な言語は、[このページの下部](https://atcoder.jp/contests/language-test-202001)をご確認ください。

詳細情報を見てみると、個人的にRubyのバージョンより気になる記載があった。

| 項目 | 値 |
|:-:|:-:|
| 言語 | Ruby |
| 実装 | CRuby |
| バージョン | 2.7.1 |
| コンパイルコマンド | ruby -w -c {dirname}/{basename} |
| 実行コマンド | RUBY_THREAD_VM_STACK_SIZE=268435456 ruby {dirname}/{basename} |
| インストール済みライブラリ | **numo-narray**

元記事を表示

【herokuへのデプロイ時】bash: rails: command not found のエラー解決方法

herokuへのデプロイでタイトルのエラーが発生した為、解決方法を記載させていただきます

###環境
MacOS
Rails 5.2.4.1
heroku/7.39.2 darwin-x64 node-v12.13.0

###状況
開発環境で、作成したRuby on Railsのアプリケーションを、
herokuにデプロイするために、
**①heroku create**
**②git add .**
**③git commit -m “コミットメッセージ “**
**④push heroku ブランチ名**
行った。

⑤**heroku run rails db:migrate**
これで「heroku上でアプリが表示できる!」と期待するも、

“`
$ heroku run rails db:migrate
Running rails db:migrate on ⬢ アプリ名… up, run.1884 (Free)
bash: rails: command not found
“`
上記のエラーが出てしまった。

###原因

原因は非常にシンプルで、私がdevel

元記事を表示

Rails6 のちょい足しな新機能を試す 127(memory cache編)

# はじめに

Rails 6 に追加された新機能を試す第127段。 今回は、`memory cache` 編です。
Rails 5.2.4.2 や、 Rails 6.0.0 では、 キャッシュとして、 memory cache を使っていて、 キャッシュから値を取り出したあとで、その値を破壊的メソッドなどで修正すると、 キャッシュの値も変わってしまうというバグ(?) がありました。

Rails 6.0.1 以降では修正されています。

Rails 6.0.2.2, Rails 6.0.1, Rails 6.0.0, Rails 5.2.4.2 で確認しました。

“`shell
$ rails –version
Rails 6.0.2.2
“`

今回は、 User モデルを作って cache を使って値を取り出すメソッドを作成して確認していきます。

# Rails プロジェクトを作る

Rails プロジェクトを新たに作成します。

“`shell
$ rails new rails_sandbox
$ cd rails_sandbox
“`

# User モデルを

元記事を表示

Active Record Transactions のドキュメントを翻訳しました

# 概要
[Active Record Transactions](https://api.rubyonrails.org/classes/ActiveRecord/Transactions/ClassMethods.html) のドキュメント部分を翻訳しました。

# Active Record Transactions
トランザクションは、SQL 文が1つのアトミックアクションとしてすべて成功した場合にのみ、SQL 文が永続的なものとなる保護ブロックです。古典的な例は2つのアカウント間の転送で、そこでは引き出しが成功した場合にのみ預金を持つことができ、その逆も可能です。トランザクションはデータベースの整合性を強化し、プログラムエラーやデータベースの故障からデータを守ります。そのため基本的には、一緒に実行しなければならない SQL 文がいくつもある場合は、トランザクションブロックを使用するべきです。

例:

“`ruby
ActiveRecord::Base.transaction do
david.withdrawal(100)
mary.deposit(100)
en

元記事を表示

テーブルに外部キーを設定する方法

genre has_many tasks
task belongs_to genre
の関係性でtasks_tableにgenre_idの外部キーを設定する方法をメモしておきます。

##1 方法
まず外部キーをもったテーブルを作成するのと既存のテーブルに外部キーのカラムを追加するのとで方法が異なります。

##2 テーブルを作成する際に外部キーを設定する場合
コマンドで

“`:ターミナル
$ rails g model Task genre:references
“`

とすることで、genre_idを外部キーに持つTasksテーブルが作成されます。

##3 既存のテーブルに外部キーカラムを追加する場合

“`:ターミナル
$ rails g migration AddGenreRefToTasks genre:references
“`

とすることで既存のtasksテーブルに新しくgenre_idカラムが作成されます。

##4 rails db:migrate
テーブルを作成、カラムを追加した場合は忘れずに

“`
$ rails db:migrate
“`

元記事を表示

railsチュートリアル 8章 初心者が意識すべき事

#初心者がrailsチュートリアル8章で学ぶべき事
1.Sessionについて
2.digestメソッドについて
##Sessionについて
ここでは様々なサイトを参照させていただきます。
まず一つ目のサイト

「Cookie」と「セッション」と「セッションCookie」の違い


二つ目
https://qiita.com/ozackiee/items/4ee774c81b2a0c571c05
そして二つ目のサイトをより理解するため+Webの基本を抑える意味でこの本はとても参考になりました。
Web技術の基本
![download.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/619486/4521d43f-598b-9ec8-c3cf-d11291de2d52.jpeg)
Amazonサイト↓
https://www.amazon.co.jp/%E3%82%A4%E3%83%A9%E3%82%B9%E3%83%88%E5%9B%B3%E8%A7%A3%E5%BC%8F-%E3%81%93%E3%81%AE%E4

元記事を表示

Dockerを使用した既存のRailsプロジェクトの開発環境構築(Rails+Mysql)

#はじめに
今回はタイトルにあるとおりDockerを使用したRails+Mysqlの開発環境構築をしたので記事にします。

###対象読者
既存のrailsプロジェクトの開発環境にdockerを利用したいかた。(今回はdbをMysqlとしています。)dockerはダウンロード済みとしています。

###参考
こちらの記事を参考にさせていただきました!
[既存のrailsプロジェクトをDockerで開発する手順](https://qiita.com/kkyouhei/items/653760627bf9d4bc9e71)
[既存のRailsアプリにDockerを導入する手順](https://qiita.com/kenzoukenzou104809/items/b9e716204e0cd0cea447)

###環境
Mac OS

“`
docker -v
Docker version 19.03.8, build afacb8b

docker-compose -v
docker-compose version 1.25.4, build 8d51620a

“`

#ファイル構

元記事を表示

Gemにモンキーパッチを当てるサンプル

Railsで開発していると使っているGemの挙動を一部変更したくなることが稀にあると思います。
gemに限らずですが、外部ライブラリの挙動を変えるために書く仕組みはモンキーパッチと呼ばれます。

モンキーパッチについては下記のクックパッドさんの記事がわかりやすかったのでご覧ください。
この記事でもこのやり方を参考にしています。

モンキーパッチはある程度やり方が定型化されていますが、たまにしか実装しないのでやり方を忘れてしまいがちだと思います。
そこで備忘録としてよくありそうなモンキーパッチの当て方をこの記事に残しておこうと思います。

# 対象のgem

モンキーパッチを当てるsample_gemは下記の通り。

## 仕様
* incrementというクラス変数を持っている
* 渡した数値を+1して返却する
* 数値以外を受け取ると`SampleGem::NoIntegerError`
* initializeではnumを渡してインスタンス変数

元記事を表示

【Rails Tutorial11章】アカウント有効化機能の実装手順を整理してみました【後編】

##はじめに
Railsチュートリアル11章の内容を、少しでも理解の助けとなればと思い、割としっかり目に整理しました!
__備忘録です。__

##前提
Railsチュートリアル1〜10章までの内容が完了していること。

##内容
Railsチュートリアル11章の__アカウント有効化機能の実装手順__を、前中後半の3回に分けて整理おります。
後編である今回は、__アカウント有効化機能の実装__をしていきます!

前編→[__AccountActivationsリソースの作成__](https://qiita.com/kurawo___D/items/233ed8b4f8749c95df9e)
中編→[__アカウント有効化メール送信機能の実装__](https://qiita.com/kurawo___D/items/051ce6f6bb0837e3481a)

##3.アカウントを有効化する
  ●AccountActivationsコントローラのeditアクションに、アカウント有効化機能を実装する処理を記述していく。
  
  ●editアクションへのテストを

元記事を表示

【Ruby】ERROR: Error installing sqlite3: ERROR: Failed to build gem native extension.が表示される【環境構築時エラー】

#sqlite3をインストール時エラー

sqlite3をインストールする為に以下gemコマンドを実行しました。

“`
gem install sqlite3 –platform=ruby — –with-sqlite3-include=G:/sqli
te3 –with-sqlite3-lib=G:\uru
“`

するとエラーが生じました。

“`
Temporarily enhancing PATH for MSYS/MINGW…
Installing required msys2 packages: mingw-w64-x86_64-sqlite3
警告: 公開キーリングが見つかりません。’pacman-key –init’ を実行済みですか?
エラー: mingw32: キー “AD351C50AE085775EB59333B5F92EFC1A47D45A1” は不明です
エラー: キー “AD351C50AE085775EB59333B5F92EFC1A47D45A1” をリモートで検索できませ
んでした
エラー: mingw64: キー “AD351

元記事を表示

jsフレームワークstimulusでyahoo地図を操作してみた(その四、最終回)

# やったこと、やる予定のこと
#### 0. [railsアプリへのstimulus適用](https://qiita.com/wkya_4a/items/e85bd6324fe4085dce0e)
#### 1. [stimulusでyahoo地図を表示](https://qiita.com/wkya_4a/items/6e1224550ca0b7aed9d9)

#### 2. [表示した地図上で、指定座標に移動](https://qiita.com/wkya_4a/items/3e2f5bb6cf8abe525bf0)

#### 3. [住所から座標を取得し、それをDBに登録](https://qiita.com/wkya_4a/items/883ad988f2ad5cf58f55)(前回)

#### 4. 「3」で登録した情報を選択し、yahoo地図上でその場所に移動(←今ここ)

だいぶ間が空いてしまいましたが、最終回。
一覧画面にて、
【「3」で登録した座標情報を選択→その地図の場所に移動】
をできるようにします。

##まずは、一覧画面にて地図を表示
今回は、作成

元記事を表示

Applicationサーバのプラットフォームバージョン上げたところアプリケーションが消失

![adminVegewel-stg – ダッシュボード (2).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1593/b7165317-6874-dcad-2645-dcd5a4d16162.png)

【自分用メモ】StagingのApplicationサーバをバージョン上げたところアプリケーションが消失。
以下その対処。

### 状況

– 以前、Spree導入時にRubyとRailsのバージョンを上げたが、その際にStagingサーバのアプリケーションサーバのバージョンを固定
– 時間が経つにつれてプラットフォームのバージョンを上げるの推奨というアラートが出るようになったので言われるがままにバージョンUP
– 再構築が走る。そのままサーバが動作不良。サーバの/var/app/currentにあったソースも消失。
– EBのログ機能も作動せず
– .elasticbeanstalkに記載していたプラットフォームを削除したが変わらず

### 対処
– 画像にある「原因」の先にログを見る機

元記事を表示

database.ymlのパスワード管理方法2パターン -環境変数とcredentials.yml.encの使用-

database.ymlにユーザー名やパスワードを平文で入力しGithub等にあげてしまうと、セキュリティ上の問題が発生する。そこで何かしらの方法で隠す必要があるが、その時の2つのパターンを説明します。

#●環境変数の使用

“`ruby:database.yml
default: &default
adapter: mysql2
encoding: utf8
pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
username: <%= ENV['DB_USERNAME'] %>
password: <%= ENV['DB_PASSWORD'] %>
host: localhost
“`
<%= ENV['DB_USERNAME'] %>に該当する部分が環境変数を利用している部分です。
このコードを記載しておき

“`
$ export DB_USERNAME =sample_user
$ rails server
“`
と実行すれば、<%= ENV['DB_USERNAME'] %>の部分にsampl

元記事を表示

バリデーション復習してみた

超初心者なのでまだそんなこと言ってるの?など色々思われることがあると思いますが、個人の向上のためつらつらと書いていきたいと思います。
※「それちゃうで!」などあればどんどんご指摘ください。

・苦手なバリデーションは所詮基礎ができていない。

①そもそもバリデーションとは?
端的にいうと不正なデータをデータベースに記録する前にチェック(検証)してふるいにかけてくれるすごいやつ。
もちろん、不正なデータだった場合はそれをお知らせする手立てもあります。

②バリデーションを書く場所は?
状況:雑魚Twitterアプリを作成
バリデーションの記載はmodelに記述します。

validatesメソッド を設定する

“`ruby
※今回は存在性の検証と文字数制限(50文字)の検証
class Post < ApplicationRecord validates :content, presence: true, length: { maximum: 50 } end ``` 今回は存在性の検証と文字数制限(50文字)の検証 ③実際にバリデーションできているのか確認 ここまで準備できた

元記事を表示

Capybaraを使う!!!(Rails + Rspec + Capybara)

[**Rspecの導入がまだの方はこちら**](https://qiita.com/tksh8/items/f0b5b656580334181e3c
)

Rails + Rspec + Capybaraを前提として進めていきます。

# Capybara

テストのためのrubyフレームワークです
これを使うと画面表と同じ様な感覚でE2Eテストを実施できます。

## インストールする
#### 1.Gemfileに追加

“`ruby:Gemfile
group :development, :test do
gem ‘capybara’
gem ‘selenium-webdriver’
end
“`
インストールします、

“`
$ bundle install
“`

#### 2.spec_helper.rbに`require ‘capybara/rspec’`を追加

“`ruby:spec_helper.rb
require ‘capybara/rspec’
RSpec.configure do |config|
“`

#### 3.テストを書く

元記事を表示

railsチュートリアル 7章 初心者が意識すべき事

#初心者がrailsチュートリアル7章で学ぶべき事
1.SSLについて
2.Webサーバーについて
##SSLについて
railsチュートリアルでは
`config.force_ssl = true`
のコードだけ覚えておけば良いと思います。
ただ、この先自分のアプリを作ったり**Heroku**を使わずにデプロイするとき、Herokuが色々やっていてくれていた事を自分でしなければならないという事を把握はしておかなければならないと思います。
(現時点での僕も正直Herokuが具体的に何をしているのかは全くわかりません。
恥ずかしながら、**git push heroku**コマンドを打てば勝手にデプロイされています。
もっと勉強しないとなと日々感じています。)
##Webサーバーについて

Webサーバとは何か?仕組みやソフトウェアの種類をわかりやすく解説!


こちらのサイトを一読して進めれば良いかと思います。
#最後に
7章で大事なことは、プログラミング初心者がエンジニアとして仕事をする上では当たり前ですが、コードを打つだけではいけない事が身にしみる事、だと思います。
(今では

元記事を表示

OTHERカテゴリの最新記事