Ruby関連のことを調べてみた2021年01月24日

Ruby関連のことを調べてみた2021年01月24日

【Rails】js.erb で文字列の途中で改行する方法

# 背景
JSにRubyを埋め込みしていたのですが、長ったらしくなってしまったので、途中で改行したくなりました。

# 方法
行の最後に「\」をつける。

“`javascript
document.getElementById(‘messages’).insertAdjacentHTML(‘afterbegin’,

[Rails + jQuery]初学者向けAjaxを取り敢えず飛ばしてみたい

#課題
初学者が感覚掴むために取り敢えずAjax飛ばしてみたい。

例として以下フォームで入力された文字をサーバに送ってみる。

“`erb:form.erb
<%= text_field_tag :myname %>
“`
“`html:output

“`

![スクリーンショット 2021-01-24 11.18.12.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/239796/d2176686-3110-7b82-179c-2612146cd13a.png)

#結論
以下コードで取り敢えず飛ぶ。

“`javascript:ajax.js
$(“#myname”).change(function(){
let name = $(this).val();
$.ajax({
type: ‘GET’,
url: “/api/v1/users”,
data: { nam

元記事を表示

【Ruby】小数点以下を表示する方法 .to_f

# 背景
平均値を小数以下まで表示させたいシュチュエーションがあったので、調べてみました。

# 例

10÷3を小数点第3位まで出したい時

“`ruby
a = 10
b = 3
c = a.to_f / b.to_f

puts c.round(3)

=> 3.333
“`

# .to_f
文字列を10進数と解釈して、浮動小数点数Floatに変換するメソッドです。

# .round()
引数に少数点の桁数を指定することができ、四捨五入して表示されます。

元記事を表示

Rubyにおける「クラス」と「オブジェクト」の関係について分かりやすく解説してみる

Rubyの勉強を始めて、すぐに出てくる重要キーワード。それは「クラス」「オブジェクト」です。

Rubyにおいて重要な概念だと分かってるけど、なんとなくの理解で学習が進んでいってしまうことも多いのではないでしょうか。

* クラスはよく使うけど理解が浅い

* 「クラス」と「オブジェクト」の関係がいまいち掴めない

* どうやって「オブジェクト」を作れば良いかわからない

今日はこのような方に向けて、記事を書いていこうと思います。

## 「クラス」と「オブジェクト」の関係について

クラスとは「もの」を作るときの「設計図」です。

オブジェクトとは設計図をもとに作られる「もの」です。

クラスとオブジェクトの関係を図に表すと以下になります。

[![Image from Gyazo](https://i.gyazo.com/d014fca9c576993e1750ef74e597c4bd.png)](https://gyazo.com/d01

元記事を表示

(備忘録)Everyday Rails 第2章「RSpecのセットアップ」

#「Everyday Rails – RSpecによるRailsテスト入門」
Railsを使用したアプリケーションを作成したものの、テストの記述が全然分からない、という状態になったので、RSpecの勉強をできる教材を探していたところ、なんと[プロを目指す人のためのRuby入門](https://www.amazon.co.jp/dp/B077Q8BXHC/ref=dp-kindle-redirect?_encoding=UTF8&btkr=1) (チェリー本)の著者が翻訳を手がけた本を発見しました。
[こちらのサイト](https://leanpub.com/everydayrailsrspec-jp)から購入できます!
販売方法はなんと、購入金額を自由に設定できるという、画期的なシステムでした(最低購入価格は$19からですが)。
先日、なんとか1周は終わらせたのですが、全然理解できていない部分が多いので、復習がてらアウトプットしていきたいと思います!
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.

元記事を表示

ActiveRecordのwhere notの挙動について

#はじめに
普段、RailsはActiveRecord使っているんですが、条件を複数書いたときに、
where.not()の挙動が直感と反しており、なかなかバグに気づかなかったので、共有します。
#環境
Ruby : 2.7.1
Rails : 6.0.2
Posgresql : 13.1
#where.notの挙動
まず、where.not()の単数条件で名字が山田以外のuserを取得したい時を考えてみます。
発行されるSQLは以下のようになります。

“`rb
User.where.not(last_name: ‘山田’)
=> SELECT “users”.* FROM “users” WHERE “users”.”last_name” != $1
[[“last_name”, “山田”]]
“`
これは期待通りに`last name`が**山田でない**userを取得してくれます。

では次に**「名字が山田」かつ「名前が太郎」以外**のuserを取得するとしましょう。
僕の直感では以下のような記述で取得できると思ってましたが…

“`rb
User.where.

元記事を表示

【Rails】ルーティングの基礎的な書き方【Ruby】

# ルーティングの役割

railsガイド( https://railsguides.jp/routing.html )によると
> Railsのルーターは受け取ったURLを認識し、適切なコントローラ内アクションやRackアプリケーションに割り当てます。

とのこと。

「route」を直訳すると「経路」ですから、リクエストの道案内役といったところでしょうか。

基礎的な書き方について記してみたいと思います。

***
[基本の書き方](#基本の書き方)
[rootの指定](#rootの指定)
[resourcesを用いた書き方](#resourcesを用いた書き方)

***

# 基本の書き方

`HTTPリクエスト ‘URIパターン’, to: ‘コントローラー名#アクション名’`
もしくは
`HTTPリクエスト ‘URIパターン’, controller: ‘コントローラ名’, action: ‘アクション名’`

“`
Rails.application.routes.draw do
get ‘profile’, to: ‘users#show’
post ‘twe

元記事を表示

bundle installしてもエラーが続き沼にハマる。(備忘録として)

### bundle installしてもエラーが続き沼にハマる。(備忘録として)

rails newしてbundle installすると

“`
Make sure that `gem install #### -v ‘”#.#.#’ –source https:・・・・`
“`

のようなエラーが延々と続く。

gemを指定してinstallしてもエラーは解消されず。
ググった情報を頼りにカタカタするも、エラーは解消されず。

結局解決方法は以下でした。

>1rbenvでrubyを管理する
2xcodeのupdateをする

###1rbenvでrubyを管理する。
デフォルトのrubyを使っていたが、toolのアップデートかなにかで齟齬が出てしまった?のかもしれない。
標準rubyは一つしか入っていないためrbenvでrubyのバージョンを管理する。
基本的に開発ではrbenvを用いてrubyを管理する。
参考:https://qiita.com/hujuu/items/3d600f2b2384c145ad12

###2xcodeのupdateをする。
これが今

元記事を表示

パーシャルで繰り返し処理

教えていただいたことの備忘録として残します。

“`ruby:bar.html.erb
<%= render partial: 'foo', hoges: @hoges %>
“`

“`ruby:_foo.html.erb
<% hoges.each do |hoge| %>
<% hoge.name %>
<% hoge.price %>
<% end %>
“`

これでも動作確認はできましたが、以下のようにします。

“`ruby:bar.html.erb
<%= render partial: 'foo', collection: @hoges, as: 'hoge' %>
“`

“`ruby:_foo.html.erb
<% hoge.name %>
<% hoge.price %>
“`

こうすることで読み込み速度が向上します。
collectionオプションを使うと1回しか読み込まれないみたいです。

元記事を表示

railsで簡単ログイン(ゲストユーザーログイン機能)を実装する方法

今回はポートフォリオを見てもらう確率を上げるために必須な、簡単ログインの実装方法を書いていきます。

# 開発環境
Mac OS Catalina 10.15.7
ruby 2.6系
rails 6.0系

# 前提
devise導入済み
通常の新規登録、ログイン、ログアウト機能に関しては実装済み
投稿機能ができるアプリを作っており、postsモデルとpostsコントローラーが登場しますが、ご自身の例に置き換えてご理解ください。

# ルーティング設定

まずはルーティングを設定します。

“`rb
# HTTPメソッドはpostで、’/posts/guest_sign_in’というURLでpostsコントローラーのnew_guestアクションを参照する
post ‘/posts/guest_sign_in’, to: ‘posts#new_guest’
“`

“`routes.rb
Rails.application.routes.draw do
devise_for :users
root to: “posts#index”
# 次の1行を追加
post ‘

元記事を表示

投稿3日目

投稿3日目
Ruby超入門 220ページまで
ロジカルシンキングが大切という意味が少しわかった!!

元記事を表示

findメソッドとfind_byメソッドはどう違うのか

プログラミングスクールの課題アプリ開発の過程で、findメソッドとfind_byメソッドを勘違いしてまる1日エラーに悩まされた経験から、findメソッドとfind_byメソッドについて整理します。

## findメソッド
IDを指定してレコードを取得します。

“`rb
Fruit.find(1)
# 複数のIDを指定して、該当するレコードを取得できる
Fruit.find(1,4,6)
# 配列でも指定できる
Fruit.find([1,4,6])
# 同一ファイル内にidの情報を含むインスタンスがあれば、以下のような書き方ができる
Fruit.find(@fruit.id)
“`

## find_byメソッド
条件を指定してヒットした最初の1件を取得します。IDも条件に指定できます。

“`rb
Fruit.find_by(name: “strawberry”)
“`

Fruitsテーブルに以下のようにデータが入っているとします。

“`md
Fruitsテーブル
| id | name | color |
| 1 | apple | re

元記事を表示

Formオブジェクトを使用したテーブルの編集・更新のやり方

## 概要

この記事で使用している言語のバージョンは以下のとおりです。

* Ruby 2.6.5
* Rails 6.0.3.4

Formオブジェクトで編集・更新を行うにはどうするか調べたのですが、バージョンが古いものが多かったので自分なりに考えて出来たやり方をここで共有します。

もっと良い書き方出来るところが絶対あると思いますので修正すべき点は指摘して頂けると大変うれしいです。

今回作ったのはサンプルのアプリなので簡単な作りとなっています。ご了承をよろしくお願いいたします。

## 作成したコード

“`stations_controller.rb
class StationsController < ApplicationController def index @stations = Station.all end def new @station = StationForm.new end def create @station = StationForm.new(station_params) if @sta

元記事を表示

rails 検索機能の実装

# 1.ルーティングの指定

ルーティングの中に検索したいテーブルの中にserchを記述します。以下を例とします。collectionを使うことによって生成されるルーティングのURLと実行されるコントローラーを任意でカスタムできます。

“`ruby:config/routes.rb
resources :posts do
collection do
get ‘search’
end
end
“`
# 2.モデルの指定
モデルを指定します。以下のようにwhereメソッドとLIKE句を使い、検索をかけたいカラムを記述します。

“`ruby:post.rb
def self.search(search)
if search != “”
Post.where(‘text LIKE(?)’, “%#{search}%” )
else
Post.all
end
end
“`
# 3.この他に検索のカラムを追加したいとき
もしいくつかのカラムを

元記事を表示

$ rails db:seedを用いて初期データを格納

#この記事/メモについて(はじめに)
Twitterの呟きやそれに対するリプライ・コメントは、「ユーザーが送信した情報」をデータとしてデータベースに保存する、と言った仕組みのものです。
しかし、データベースへ格納するデータは必ずしもユーザーや第三者が投稿・送信してきたものだけとは限りません。

例えば、自分が行ったことのあるおすすめの国について紹介するWebサイトを制作しようとした時。
このサイトでは、ユーザーが「ここの国はおすすめだよ!」「この地域の料理、とても美味しかった!」と呟いたものではなく、開発者のみなさんが現地で感じた思いやおすすめのポイントなどを掲載したいですよね。

本記事では、そんな方々のために、開発者が裏側からデータを格納する方法についてご紹介しようと思います。

##手順 (2Stepで簡単にできます!)
裏側からのデータの格納は、

①seedファイルに保存したい初期データを記述
②「$ rails db:seed」というコマンドを入力する

という実に簡単な方法で行うことができます。
①番の記述の仕方を抑えてしまえば、特に難しい内容はありません。以下で詳し

元記事を表示

【Heroku×Ruby2.6.5】error: failed to push some refs to ‘https://git.heroku.com/●●.git’→Herokuのバージョンを下げて対応。

# エラーが発生した状況

– `Heroku create`でデプロイ用のアプリを作成。
– データベースの設定や、環境変数の設定を行った。
– 最後に`master`の内容を、Heokuへ反映しようと`git push heroku master`のコマンド実行したところ、下記の通りエラーが発生。

#### エラー画面(ターミナル)

![エラー内容(heroku).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/696641/1a224d33-1aab-7fa5-e7f5-429b9b16a3ba.png)

#### バージョン等

– ruby 2.6.5
– Rails 6.0.3.4
– MySQL Ver 14.14 Distrib 5.6.50

# エラーが起きた理由

– エラー文の中に書いてあるHerokuのURLを確認したところ、Ruby2.6.5のサポートが終了したとのことだった。

> https://devcenter.heroku.com/articles/r

元記事を表示

【if !status else end】否定の否定を考えさせるプログラミングはやめよう

Rubyを例にしますがどの言語でも同じことがいえます。

## 否定の否定を考えさせるってなに?

たとえば、以下の要件があったとき。
> 変数`status`が`false`のときには`いろんな処理`を実施し、`true`のときには`ちょっとした処理`を実施する。

要件に書かれている通りにプログラミングしました。(Ruby)

“`ruby
status = false

# bad
if !status
p ‘いろんな処理’
else
p ‘ちょっとした処理’
end
“`

次に、`ちょっとした処理`が実施される条件は何かを調べる必要が出てきたとき。
「`!status`の否定だから、`status == true`だな。」
と考えますね。
これが否定の否定を考える、です。プチストレスになりますので、こういうプログラミングは避けましょう。

`unless`を使った場合も同様です。
`unless`を使うときは`else`ブロックを書いてはいけません。

“`ruby
status = false

# bad
unless status
p ‘い

元記事を表示

【画像付き】RailsでDeviseを利用してLINEログイン機能を実装

## はじめに

自作アプリでLINEBotを作成する際にLINEログイン機能を実装しました。

実装するに当たって様々な記事を参考にさせて頂きましたが, 記事によって記述が異なったり, ここはもう少し簡潔に書けるのでは?と思ったり, 記事通りに書いてもエラーが出たり, そもそも記事が古かったりで苦労しました。。

今後また実装する時に自分の記事さえ見れば導入できるように画像付きでまとめていきたいと思います!

基本的にRailsを想定していますが, LINE Developersの登録などはRails以外の言語でも参考になる部分があるかと思いますので, 少しでも参考になれば幸いです?

## 0.導入方法
導入方法はおおまかに以下の4つです。順を追って説明します。
##### 1.Railsアプリを作成
##### 2.Deviseを導入
##### 3.LINE Developersに登録
##### 4.LINEログイン機能を導入
##### 5.LINEログイン詳細設定

## 1. Railsアプリを作成

– 以下の前提で進めていきます。(アプリやコントローラー名は任意の名

元記事を表示

【Mysqlエラー】Mysql2::Error: Specified key was too long; max key length is 767 bytes

#はじめに

アプリ開発中に起こったMySQLのエラーについて忘備録も兼ねて記録しておこうと思います。

#エラー文

`rails g devise user`でuserモデルを作成し、`rails db:migrate`を行うと下記のエラー文が表示。

“`sql

Mysql2::Error: Specified key was too long; max key length is 767 bytes
“`

直訳すると「指定したキーは長すぎます。キーの最大範囲は767バイトまでです」

意味は「Mysql2に格納できる最大文字データ量(767バイト)に対してオーバーしてしまったためエラーになった」ということのようです。

#エラー解決に向けての予備知識

##utf8
文字コードの中で世界で最も普及している文字コード。
通常は1~4バイトで文字を表現するが、MySQLでは**3バイト**の文字までしか扱えない。
__1文字当たり3バイト。__

##utf8mb4
データベースMySQLで扱うための文字コード。
__4バイト__の文字を扱えるため、絵文字を扱いたい場合はこ

元記事を表示

RubyonJetsをGithubActionsで自動デプロイする

## 概要
Ruby on Jetsを用いたアプリケーションをmergeやpushと同時に自動デプロイできるようにします。
GithubActionsが提供するランナーにはAWS CLIやrsync、zipなどが元からインストールされているみたいで、簡単にデプロイすることができました。

手順としては2ステップでできます!
1. AWS CredentialsをGithub Secretsに登録
2. .github/workflows/にymlファイルを記述する

## 環境
Ruby: 2.5.7
Ruby on Jet: 2.3.18

## 手順
### AWSのCredentialsをGithub Secretsに登録
[暗号化されたシークレット](https://docs.github.com/ja/actions/reference/encrypted-secrets)を参考にAWS_ACCESS_KEY_IDとAWS_SECRET_ACCESS_KEYを設定してください。
結構簡単に設定できます。

### GithubActionsの設定ymlを記述
今回の例ではma

元記事を表示

OTHERカテゴリの最新記事