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

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

Ruby on Rails 日英対応 i18n

# 環境
– rails 5.2
– ruby 2.5

# 方針
– できるだけ手軽に日英対応

# 概要
1. 言語切り替えボタンをヘッダーに設置
2. コントローラー内でセッション変数session[:locale]などにロケール情報を格納
3. before_action で各ページ読み込み前に言語設定
4. ymlファイルへ訳文記入
5. Viewなどで使用

# 実装
### 1. 言語切り替えボタンをヘッダーに設置
簡単に切り替えができるようにヘッダーにボタン設置しました。

“`erb:application.html.erb
ヘッダーに以下を設置
<% if session[:locale] == "en" || session[:locale].blank? %>
<%= link_to "/home/change_language/ja" do %>
日本語
<% end %>
<% elsif session[:locale] == "ja" %>
<%= link_to "/home/change_language/en" do %

元記事を表示

【Rails】request specでsigned/encrypted cookiesにアクセスする

# 環境

– Rails 5.2.3
– RSpec 3.9.0

# 問題/やりたいこと

そのままでは request spec 内で signed cookie 及び encrypted cookie にアクセス出来ません。
具合的には、以下のようなエラーが出ます。

“`ruby
NoMethodError:
undefined method `signed’ for #
“`

これは、request spec 内で使われている cookies オブジェクトが `ActionDispatch::Cookies::CookieJar` ではなく `Rack::Test::CookieJar` のインスタンスであり、`signed` や `encrypted` メソッドを実装していないためです。

# 解決方法

“`ruby
it do
get some_url
expect(response).to have_http_status(:success

元記事を表示

link_toメソッドの使い方

link_toメソッドはerbに埋め込みます。
アセットパイプラインにより、erbファイルをhtmlに変換する事でlink_toからaタグに変わります。
このように、Rubyのコードを自動で変換する機能がついているのがRuby on Railsです。
えへへ

元記事を表示

【Ruby】メソッドの定義まとめ

#【Ruby】メソッドの定義まとめ

rubyのメソッド定義に関する記述のまとめ。

メソッドの定義方法は基本的にpythonと類似。
Rubyは1行目文末に「:」不要。終わりに「end」が必要。

「:」を使ったキーワード引数で、引数名で値を渡すことができる。

**目次**

1. [メソッド定義](#メソッド定義)
2. [メソッドの呼び出し](#メソッドの呼び出し)
3. [引数を渡す](#引数を渡す)
4. [戻り値](#戻り値)
1. [メソッドで戻り値を使う](#メソッドで戻り値を使う)
2. [戻り値で真偽値を返す](#戻り値で真偽値を返す)
3. [returnでメソッドが終了する](#returnでメソッドが終了する)
4. [戻り値とif文(戻り値をif文に渡す)](#戻り値とif文戻り値をif文に渡す)
5. [戻り値とif文メソッド内でreturnとif文を使う](#戻り値とif文メソッド内でreturnとif文を使う)
5. [キーワード引数](#キーワード引数)

##メソッド定義

“`ruby:
def メ

元記事を表示

【Rails】APIモードでcookieを使う

# 環境

– Rails 5.2.3

# 前提

– Rails を [APIモード](https://railsguides.jp/api_app.html)で使っている(←のドキュメントの[英語版](https://guides.rubyonrails.org/api_app.html))。

または

– `ActionController::API`を継承して API用のcontrollerを使っている。

# 問題/やりたいこと

そのままでは [cookies](https://api.rubyonrails.org/v5.2.3/classes/ActionDispatch/Cookies.html)にアクセスできないので、アクセスできるようにしていきます。

# やり方

ここでは後者(`ActionController::API`を継承して API用のcontrollerを使っている)前提とします。

## ActionController::Cookies を include する

`ActionController::API`を継承しているベースコントローラ

元記事を表示

【Ruby】基本コード一覧。実例で基本をおさえる

#【Ruby】基本コード一覧。実例で基本をおさえる

忘備録用のrubyの基本事項の一覧。

puts、ハッシュ、シンボル、each文の書き方、if文のelsifを覚えておけば、あとは他の言語とほぼ共通。

**目次**

1. [拡張子(.rb)](#拡張子)
2. [出力(putsメソッド)](#出力putsメソッド)
3. [コメントアウト(#)](#コメントアウト)
4. [文字をつなげる(+)](#文字をつなげる)
5. [変数定義(=)](#変数定義)
6. [代入演算子](#代入演算子)
7. [変数展開(”#{ }”)](#変数展開)
8. [if文(条件分岐)](#if文条件分岐)
9. [比較演算子](#比較演算子)
10. [論理演算子](#論理演算子)
11. [配列](#配列)
12. [each文(繰り返し処理)](#each文繰り返し処理)
13. [シンボル(:値)](#シンボル)
14. [ハッシュ](#ハッシュ)
1. [ハッシュ値の更新](#ハッシュ値の更新)
2. [ハッシュに要素追加](#ハッシュに要素追加)
3. [

元記事を表示

Rubyプログラム内で別のコマンドを起動する方法

Rubyプログラム内で別のコマンドを起動する方法について.
主に `popen`について書く

# 方法1: system()関数
system()関数にコマンドを文字列で与える.
最も簡単。
## 例1 引数無し
“`ruby:sys0.rb
system(“ls”)
“`

実行すると
>ruby sys0.rb
>>a.txt b.txt c.txt sys0.rb sys1.rb sys2.rb

## 例2 引数あり
“`ruby:sys1.rb
system(“ls *.txt”)
“`

実行すると
>ruby sys1.rb
>>a.txt b.txt c.txt

## 例3 終了ステータスの取得
Exit status (終了ステータス, 脱出ステータス)は `$?` で取得できる

“`ruby:sys2.rb
system(“ls abc”)
print $?, “\n”
“`

実行すると
>ruby sys2.rb
>>ls: cannot access abc: No such file or directory
>>pid 13

元記事を表示

[JavaScript]入力フォーム漏れがあった時のアラート表示方法

#はじめに
RailsでECサイトを作成しています。
カートに商品を追加する時に、数量選択がなかった場合に以下のようなポップアップを表示させたいと思いました。今回はその備忘録です。
スクリーンショット 2020-05-29 23.12.14.png

#補足情報
– Ruby 2.5.1
– Ruby on Rails 5.2.4.2

#フォームの内容

上記写真のページは以下のようなViewファイルになっています。

“`ruby
.showMain
.showMain__Boxes
.showMain__Boxes__leftBox
= image_tag @product.image, width: 450, height: 450, class: “showMain__Boxe

元記事を表示

【初心者】記事を見ながらRubyでAtCoderの問題を解こう!

#はじめに
RubyでAtCoderをはじめました。
これが面白くてどハマりしてしまい、プログラミングというものの面白さが心の底から分かった瞬間でした。

さて、僕はプログラマではないのですが、
AtCoderを始めるにあたって、知っておいた方が良いTIPSをまとめました。
以下を参照にAtCoderに挑むことにより、なんとか戦えると思います。

AtCoderのアルゴリズムの勉強を通して
Rubyの面白さ、プログラミングの面白さを伝わるといいと思います。

###文字列を分割する(失敗例)
“`
gets.split(”)
aaa
=> [“a”, “a”, “a”, “\n”]
“`
/nが入っちゃってますね。

###文字列を分割する(成功例)
“`
gets.chomp.split(”)
aaa
=> [“a”, “a”, “a”]

“`
chompを入れたらいい感じに分割できました。

###数字を出力する方法(失敗例)
“`
gets.chomp
1
=> “1”
“`
出力が文字列になっていますね。

###数字を出力する方法(成功例)
“`
g

元記事を表示

【Rails6+Bootstrap4】コピペだけ!Bootstrap4をRails6で使うための手順完全版

## 環境

ruby 2.6.4

Rails 6.0.2.2

rbenv 1.1.2

bootstrap 4.3.1

mysql2 0.5.3

## やりたいこと

コピペだけでBootstrap4をRails6で使える手順を共有します

手順通りに進めれば魔法のように導入できちゃいますよ

## 完全手順

### 1. bootstrap 4.3.1を追加
“`
$ yarn add bootstrap@4.3.1 jquery popper.js
“`

### 2. application.jsに下記コード追加

“`app/javascript/packs/application.js

import “bootstrap”
“`

### 3. webpack/environment.jsを修正

“`config/webpack/environment.js

const { environment } = require(‘@rails/webpacker’)
const webpack = require(“webpack”)
environme

元記事を表示

【Rails】セレクトボックスを活用した多階層構造データの表示について

# 経緯
とあるプログラミングスクール受講生です。
存知の方も多いでしょう「フリマクローンサイト」作成にあたり、出品カテゴリーをajaxで実装しましたので、自分の頭の整理を兼ねてまとめていきたいと思います。

なお、カテゴリーの設定は「ancestry」というGemを使用しております。
今回の記事につきましては、カテゴリー設定後を想定しております。

※説明が必要ない方はコードのみ追ってもらえれば実装できると思います。

# 完成イメージ
![category.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/643366/524e374a-98f0-ebc6-fcc6-e0dfbdc2cad8.gif)

# コード
“`haml:ビュー(items.new.html.haml)
.form-title
=f.label “カテゴリ”
.form-title__required
%label 必須
.form-input-select
= f.select :category, @c

元記事を表示

【Ruby on rails】rails db:migrate:resetコマンドでFATAL: Listen error: unable to monitor directories for changes.と表示される。【Rails tutorial】

##エラーについて
以下コマンド実行時にエラーが発生。

“`
rails db:migrate:reset
“`

“`
FATAL: Listen error: unable to monitor directories for changes.
Visit https://github.com/guard/listen/wiki/Increasing-the-amount-of-inotify-watchers for info on how to fix this.
“`

##対処法
調べてみると、inotifyのインスタンス上限を変更することで対処可能なようです。
catで以下ファイルについて確認。

“`
cat /proc/sys/fs/inotify/max_user_instances
“`
“`
128
“`

128から524288に変更していきます。
設定ファイルに追記します。
“`
echo fs.inotify.max_user_watches=524288 | sudo tee -a /etc/sysctl.conf
“`

“`

元記事を表示

Ruby ハッシュについて

# ハッシュとは
ハッシュとは、キーと値の組み合わせでデータを管理するオブジェクトです。
配列は複数の値を並べて管理するのに対して、ハッシュはそれぞれの値にキーと呼ばれる名前をつけて管理します。

## ハッシュの作成
ハッシュを作成する場合は、以下のような構文(ハッシュリテラル)を使用します。 

“`ruby:index.rb
#キーと値の組み合わせを2つ格納するハッシュ
{キー1 => 値1, キー2 => 値2}
“`
(例)
キーと値の間は、=>で繋ぎます。要素と要素はコンマ(,)で区切ります。

“`ruby:index.rb
{“fruit” => “apple”, “color” => “red}
“`
ハッシュは、Hashクラスのオブジェクトです。
コンソール上で空のハッシュ{}を作成し、そのクラス名を確認すると、Hashとなっていることがわかります。

“`console
{}.class
“`
結果

“`console
=> Hash
“`
## ハッシュを変数に代入
ハッシュを変数に代入できます。
(例)

“`ruby:index.rb
f

元記事を表示

マイグレーション入門

#マイグレーション入門

##マイグレーションとは

> text
マイグレーションは、データベーススキーマの継続的な変更を、簡単に行なうための便利な手法です。マイグレーションではRubyのDSLを使っているので、生のSQLを作成する必要がなく、スキーマへの変更をデータベースの種類に依存せずに済みます。

なるほど本来であればテーブルを追加したときや、テーブルに対して属性を追加した時などは
SQLを作成する必要がありますよね。

CREATE TABLE HOGE

こんな感じで生のSQLを書いてデータベースへの変更をするがそれをする必要がなくなります。
またデータベースの種類に依存しません。
なんとなく使ってたけどすごいよねー。

##マイグレーションの例

productsというテーブルを追加する例です。

nameというstringカラムと、descriptionというtextカラムが含まれています。主キーはidという名前で暗黙に追加されます。idはActive Recordモデルにおけるデフォルトの主キーです。

“`ruby.rb

class CreateProduct

元記事を表示

【Rails】TwitterのOGPを設定する

Gemなしです。

TwitterのOGPを表示させるために必要なmetaタグについては以下の記事を参考にしました。
[【2020年版】Twitterカードとは?使い方と設定方法まとめ](https://saruwakakun.com/html-css/reference/twitter-card#section3)

## 実装
“`app/helper/application_helper.rb
def full_title(page_title = ”)
base_title = ‘MC BATTLE CHANNEL’
if page_title.empty?
base_title
else
“#{page_title} | #{base_title}”
end
end

def full_url(path)
domain = if Rails.env.development?
‘http://0.0.0.0:3000’
else
‘https://mcbattle

元記事を表示

RailsのViewでの微妙に異なる繰り返しの書き方をいくつか

# 概要

以下みたいなコードを見ると思う。4件だからいいが10件とかあったり、ネストが深いと悲しくなってくる。
どうにか簡単に、繰り返しを少なく書きたい。ついいろいろ試してしまう。

“`erb

  • ユーザ名
    <%= user.name %>
  • メールアドレス
    <%= user.email %>
  • 性別
    <%= user.sex == 1 ? '男性' : '女性' %>
  • 役割
    <%= user.role %>

“`

## 1. 単純な繰り返しの場合

[Draper](https://github.com/drapergem/draper)と[Active Recordモデルの翻訳](https://rail

元記事を表示

【Rails】whenever による定時バッチ処理

#【Rails】whenever による定時バッチ処理

Wheneverを使ってRailsでのバッチ処理を実装したのでまとめます。

## 目次
* [動作環境](#動作環境)
* [やりたいこと](#やりたいこと)
* [手順](#手順)
* [wheneverのインストール](#wheneverのインストール)
* [railsにlibを加える](#railsにlibを加える)
* [バッチ処理の記載](#バッチ処理の記載)
* [schedule.rbの作成・編集](#schedule.rbの作成・編集)
* [実行結果](#実行結果)

—————————————
## 動作環境
`OS : macOS Mojave 10.14.6`
`ruby : 2.6.3p62`
`rails : 5.2.4`

## やりたいこと

決まった時間に定期的に実行するタスクを作成したい

## 手順

### wheneverのインストール

“`ruby:Gemfile
gem ‘whenever’, re

元記事を表示

rubyでtripleDESやったらめちゃハマった話

## やりたいこと
tripleDESのCBCモードで暗号化したデータを先方のサーバーにリクエストすると、同様の方式でデータがレスポンスするので復号する。

で、このtripleDESについて全く無知だったのでググってみると、Rubyの記事って案外情報が見つかりにくいんですね。
色々検索してこちらのページにたどり着きました。
http://timolshansky.com/2011/10/23/ruby-triple-des-encryption.html

実際ここで書かれているコードを実行すると、ちゃんと動くんです。が、ここからが長かった。

## 先方の認証サーバーにリクエストするもうまくいかない
いただいた鍵を使って、その他パラメータを何度確認してもミスはない。ぐぬぬ…

恥を忍んで先方の方が暗号化の際に使っているコード(別の言語)を見せていただくと….おや?暗号化したバイトの先頭に何かくっつけているぞ?

## 初期化ベクトルというもう一つの鍵
実は、今回の暗号化方式(des-ede3-cbc)では、秘密鍵の他に**初期化ベクトル**という物を実質鍵のように使って暗

元記事を表示

【rails】javascriptのファイル名がコントローラと同じ場合にイベント発火しなかった時の記録

javascriptのイベントが発火しない。

“`ruby:app/assets/javascripts/users.js

$(function(){
$(“#user-search-field”).on(“keyup”, function() {
console.log(“OK”);
});
});
“`

jsのファイル名を変えてみた。

“`ruby:app/assets/javascripts/test.js

$(function(){
$(“#user-search-field”).on(“keyup”, function() {
console.log(“OK”);
});
});
“`

イベント発火した。

いろいろなファイル名を試した。

○ test.js
○ ttt.js
○ user.js
× users.js
× groups.js
○ group.js

コントローラと同じファイル名だけダメ。

よくみたら次のようなファイルがあることに気付いた。

app/assets/javascripts/…
grou

元記事を表示

Ruby 複数の配列を結合する

# はじめに
配列は要素に別の配列を持つことができるので、

“`ruby
[1,2,3,[4,5,6],7,8,9]
とか
[[1,2,3],[4,5,6],[7,8,9]]
“`
みたいな形の配列を作ることができます。
元々別々の配列を上記のように一つの配列にする場合、配列を結合・追加するメソッドや演算子はたくさんあります。

– `push`
– `<<` - `+` - `concat` - `unshift` ですが、色々使っていたら混乱してきました。 しかも使い方が少しずつ違うようですのでいくつか試してみましたのでこちらにまとめます。 ## 1. `push`メソッド pushメソッドは配列の最後尾に要素の一つとして指定された値を追加します。 ```ruby a = [1,2,3] b = [4,5,6],[7,8,9] c = [10,11,12],[13,14,15] a.push(b) => [1, 2, 3, [[4, 5, 6], [7, 8, 9]]]
b.push(a)
=> [[4, 5, 6], [7, 8, 9], [1, 2, 3]]
b

元記事を表示

OTHERカテゴリの最新記事