Ruby関連のことを調べてみた2019年11月09日

Ruby関連のことを調べてみた2019年11月09日

【Tips】Ubuntuへのsqlite3 gemインストール時に発生しうるエラーへの対処

# 問題
## 入力
“`sh
gem install sqlite3 -v ‘1.4.1’
“`

## 出力
“`sh
Building native extensions. This could take a while…
/home/【ユーザー名】/.anyenv/envs/rbenv/versions/2.6.3/lib/ruby/2.6.0/rubygems/ext/builder.rb:76: warning: Insecure world writable dir /home/【ユーザー名】/.anyenv/envs/rbenv/versions in PATH, mode 040777
ERROR: Error installing sqlite3:
ERROR: Failed to build gem native extension.

current directory: /home/【ユーザー名】/.anyenv/envs/rbenv/versions/2.6.3/lib/ruby/gems/2.6.0/gems/sqlit

元記事を表示

buildとcreateの違い

# buildとcreateの違い

– 記録する範囲が異なる
– build()メソッドはインスタンスをメモリ上にのみ記録する
– create()メソッドはテストデータベース上にも保存して、データを永続化させる

### 使い分け

– DBに書き込むのは時間がかかるので、DBに保存する必要がないときはbuildを使う
– 属性のチェックだけの場合もbuildで済む

参考記事:http://tkymtk.hatenablog.com/entry/2013/12/15/214420

元記事を表示

Rails5:deviseのOmuniAuthを使った時のエラー「ActionDispatch::Cookies::CookieOverflow」の解決

#環境
Rails5
devise4.7.1
oauth 0.5.4
omniauth 1.9.0
omniauth-oauth 1.1.0
omniauth-twitter 1.4.0
※oauth系のgemを適当に突っ込みまくってるのは無視してください。
#問題
deviseのomniauthを使用して、ログインを試みると、
**ActionDispatch::Cookies::CookieOverflow**

というエラーがでる。
#原因
[StackOverFlow](https://stackoverflow.com/questions/23021371/rails-cookie-overflow-with-omniauth-twitter-sign-up)

>omn​​iauthが提供するハッシュには、twitterから返されるすべてのデータが含まれています。

deviseのsessionがcookieへの保存を行うことがデフォルトになっているが、Oauthを使用した場合の暗号化が死ぬほど長くてエラーがでているとのこと。

#解決フロー
[omniauthの参考記

元記事を表示

学習記録#7

#今日やったこと

– progate:RubyⅣ-12まで(インスタンスメソッド)

#####読んだものピックアップ

– [なぜ「事実」と「意見」を区別して話せない人がいるのか。](https://blog.tinect.jp/?p=62453)
– [面接で見ているポイント](https://techlog.voyagegroup.com/entry/2019/10/29/080000)
– [【Qiita投稿初心者向け】アドベントカレンダー2019のすゝめ](https://qiita.com/rf_p/items/97f45ba1f08e2f7b2965)

##progate:RubyⅣ-12まで(インスタンスメソッド)

– self.変数でインスタンスで定義する変数をクラス内で定義
– initializeメソッドはインスタンス生成直後に実行される

元記事を表示

Bootstrap導入方法

# 環境

– MacOS Catalina
– Ruby 2.6.3
– Rails 5.2.3

# Bootstrapとは

Twitter社が開発したレスポンシブデザイン対応のCSSのフレームワークで、
簡単にお洒落なフォームやボタンなどを実装する事ができる。

# 【1】 gemをインストールする

“`ruby:Gemfile
gem ‘bootstrap’
“`

Gemfileに`gem ‘bootstrap’`を追加してbundle installする。

“`text
$ bundle
“`

# 【2】 SCSSファイルを作成する

“`text
$ rm app/assets/stylesheets/application.css
“`

を実行しCSSファイルを削除、
その後同じディレクトリにSCSSファイルを作成する。

“`text
$ touch app/assets/stylesheets/application.scss
“`

SCSSファイルを作成したら下記を記述しBootstrapを読み込む。

“`scss:appli

元記事を表示

mac Rails6 で 「syntax error , unexpected tIDENTIFIER, expecting keyword_end render」が出た話

# 目的

– Rails6を使用してサービスを作成中にコントローラファイルを編集しsyntax errorが出た時の解決談を書く。

# エラー概要

– `render (“users/new”)`でsyntax errorが出ている。
– 簡単なrenderの処理を追加しただけでエラーが出たためテンパった。
– 時間をかけたが全く悪い箇所が見つからずにさらに焦った。
– エラーを日本語翻訳しても該当の行に悪い部分は見当たらなかった。→時間かかってどんどん焦っていった。
– 下記のコードをコントローラファイルに記載後、ブラウザで該当ページを確認するとsyntax errorが表示されていた。

“`ruby
# 問題のコード
def create
@user = User.new(name: params[:name], email: params[:email])
if @user.save
flash[:notice] = “登録完了”
redirect_to(“/users/#{@user.id}”)
else

元記事を表示

rails+vue ポートフォリオやること

  • 招待ボタン押したあとモーダル作成
  • チャットに画像を載せられるように
  • 通知機能
  • サイドワーク機能
  • UI整える
元記事を表示

Rails+vueポートフォリオ作成メモ

link_toでmethod: :postが使えない

グループ招待機能を作成するときに、メールで招待したかったので、メイラーをいじっていた時、メールのテンプレートに

“`
<%= link_to invite_url(...), method: :post %>
“`
としたのだが、createアクションに飛ばずにindexアクションに飛んでしまった。

これの原因は、 `method:` というのはjavascriptの機能なので、javascriptを呼ばないとうまくうごかない。
railsではもともと、 `application.html.erb` でjavascriptを呼んでいるので普通にコードを書いていても問題ないのだが、メールのテンプレートは、 `application.html.erb` の外であるため使えない。
なのでメールのテンプレートでjavascriptを読んであげればうまく動くようになる。
正確には、`rails-ujs` という機能らしい。

ActionController::InvalidAuthenticityToken

元記事を表示

【Ruby】すぐ出来る!`&:`による簡単リファクタリング

## はじめに
覚えれば誰でも出来る、**でも知らないと出来ない。**
そんなことって多いですよね。

きっと**キレイなコードを書ける人**は今回の記事にあるような内容をひたすら蓄積されているのだと思います。

**まずは簡単なところから**始めてみましょう!という思いで記事を書きました。

## この記事が役に立つ方
– とりあえず動くプログラムは作れる
– でもシンプルなコードを書く引き出しを持っていない
– Ruby初心者

## この記事のメリット
– 今までよりも`5文字`コードを短くできる(少ない!笑)

## 環境
* Ruby 2.6.3

## `&:`の意味
`map`などの繰り返し処理を行うメソッドと組み合わせているシーンを良く目にします。

下記コードは両方とも同じ意味です。`{}`内で使われています。

“`ruby
map{|n| n.to_s}
“`

“`ruby
map{&:to_s}
“`

つまり、
`|n| n.` == `&:`
ということですね。これで5文字削減!

正直、`|`って入力が面倒な場所にあるので何回も出てきてほしくな

元記事を表示

valid?とinvalid?について

# valid?とinvalid?について

Railsは、ActiveRecodeオブジェクトを保存する直前にバリデーションを実行する。また、バリデーションで何らかのエラーがあるとデータベースに保存されない。

valid?メソッドを使ってバリデーションをトリガすることもできる。

valid?を実行するとバリデーションが実行され、オブジェクトにエラーがない場合はtrue、エラーがある場合はfalseを返す。invalid?メソッドはその反対。

“`ruby
class Person < ApplicationRecord validates :name, presence: true end Person.create(name: "John Doe").valid? # => true
Person.create(name: nil).valid? # => false

“`

ActiveRecodeのバリデーションが行われた後は、errors.messagesインスタンスメソッドを使うと発生したエラーにアクセスできる。定義上は、バリデーション実行後にコレクショ

元記事を表示

【Ruby】タブ区切りテキストファイル(tsv)をjsonに変換する

#概要
アウトプット用に、学習した内容を紹介していきます。
昨日はRubyでtsvをcsvに変換しましたが、
本日はtsvをjsonに変換するお話です。

#環境
Mac OS Mojave 10.14.6
Ruby 2.5.3
エディタ VSCode

#tsvをjsonに変換
以下のタブ区切りテキストをjsonファイルに変換します。

“`meibo.txt
john m 18
paul m 20
alice f 15
dabid m 17
jasmin f 17
“`
ファイルの変換に用いたコードが以下。

“`Ruby:tsvtojson.rb
require ‘json’

hash_array = []

# dump用の配列hash_arrayにデータを格納
File.foreach(‘meibo.txt’) do |line|
person = line.chomp.split(“\t”)
hash = {
‘name’ => person[0],
‘gender’ => person[1],
‘age’ => person[2]

元記事を表示

色々なツールのHTTPSリクエストを覗き見る方法メモ

HTTPSで通信する色々なコマンドにMITMするためのパラメータの渡し方が微妙に違っていて毎回調べている気がするのでこっちに証明書ファイルとproxyのURLの渡し方をメモしていきます。
デバッグ用途で使う想定。

# 前準備
## pemファイル作る
`DER -> PEM`の変換

“`sh
openssl x509 -inform der -in cert.crt -out cert.pem
“`

## proxy立てる
立てるだけ。ここでは`127.0.0.1:8080` に立ってる想定で話をします。

# Ruby
v2.6 `net/https` でためした

“`sh
$ SSL_CERT_FILE=./cert.pem HTTP_PROXY=”http://127.0.0.1:8080″
“`

# gcloudコマンド
`Google Cloud SDK 269.0.0` でためした
gcloudコマンドはHTTP_PROXYとHTTPS_PROXY環境変数を受け付けてそう。
configで証明書指定するとうっかりunsetし忘れそうなので誰か環境変数でセ

元記事を表示

Ruby 演習問題

インプットのばかりでアウトプットが足りていないので、プログラミング脳を鍛えるために演習問題を解いてみた

> buy_ticketsメソッドを定義する演習

“`
コンテンツ概要
コード例で呼び出しているbuy_ticketsメソッドを定義しましょう。buy_ticketsメソッドの処理は、出力例から推測してください。

この演習を回答するのに必要と思われる時間は、10分です。

演習
コード例の実行結果が出力例のようになるよう、コード例の中で使われている「buy_tickets」メソッドを定義してください。

コード例
buy_tickets(“Sam”, “Dave”, “David”)
buy_tickets(“John”, “Paul”, “Ringo”, “George”)
出力例
Buying a ticket for Sam.
Buying a ticket for Dave.
Buying a ticket for David.
Buying a group ticket for John, Paul, Ringo, George.
“`

“`ruby
de

元記事を表示

文字列リテラルはその都度オブジェクトが生成される

# 文字列リテラルはその都度オブジェクトが生成される

“`ruby
colors = { ‘apple’ => ‘red’, ‘banana’ => ‘yellow’ }

colors.each do |key, value|
puts value if key == ‘banana’
end

=> yellow
“`

のような処理を行いたい場合、’banana’オブジェクトが繰り返し処理が行われるたびに生成されてしまい、無駄である。

“`ruby
‘banana’.object_id
=> 70183968739080
‘banana’.object_id
=> 70183956909760
‘banana’.object_id
=> 70183956844260

# 全て異なるオブジェクト
“`

#シンボルはオブジェクトがその都度生成されない。

“`ruby
:banana.object_id
=> 3021148
:banana.object_id
=> 3021148
:banana.object_id
=> 3021148

# 全

元記事を表示

bundle install時のエラー

ディレクトリ作成後bundle insatallをするとエラーが出た。

$ bundel insatall
~
Gem::Ext::BuildError: ERROR: Failed to build gem native extension.
~
An error occurred while installing mysql2 (0.4.10), and Bundler cannot continue.
Make sure that `gem install mysql2 -v ‘0.4.10’ –source ‘https://rubygems.org/’` succeeds before bundling.

対処法を検索

$ bundle config –local build.mysql2 “–with-ldflags=-L/usr/local/opt/openssl/lib”

と叩いて

You are re

元記事を表示

神記事まとめ

神記事の備忘録

## Git
[【永久保存版】Gitのあらゆるトラブルが解決する神ノウハウ集を翻訳した](https://blog.labot.jp/entry/2019/07/01/183204)

## フロントエンド
[【保存版】Webフロントエンド基礎力(初心者向け)](https://qiita.com/teradonburi/items/43c52d7cffc318e9b1e9)

## Ruby
[[初心者向け] RubyやRailsでリファクタリングに使えそうなイディオムとか便利メソッドとか](https://qiita.com/jnchito/items/dedb3b889ab226933ccf)

## Rails
[【初心者向け】丁寧すぎるRails『アソシエーション』チュートリアル【幾ら何でも】【完璧にわかる】](https://qiita.com/kazukimatsumoto/items/14bdff681ec5ddac26d1)

元記事を表示

Rails アソシエーション関連のエラー(ActiveRecord::HasManyThroughOrderError)

#該当のエラー
ActiveRecord::HasManyThroughOrderError

Cannot have a has_many :through association ‘Group#employees’ which goes through ‘Group#group_employees’ before the through association is defined.

#実現したいこと 
社員は複数のグループに所属できて、
グループは複数の社員を持っているという風に結びつけたい。
グループに所属している社員。つまり@group.employeesを
実現したい。

#原因

エラーメッセージにある通り
HasManyThroughOrderError
文字通りの順番(Order)が原因らしい

“`rb:Groupモデル
class Group < ApplicationRecord has_many :group_employees has_many :employees, through: :group_employees end ```

元記事を表示

Wantedly における Go 導入にまつわる技術背景

(本記事は [Go Conference 2019 Autumn](https://gocon.jp/) にて無料配布した冊子『WANTEDLY TECHBOOK GoCon Edition vol.2』からの掲載です)

配布した冊子の前半では Go の導入にあたってどのような工夫をしてきたのかを紹介しました。そこに書かれていたように、新しいプログラミング言語を導入するにはそれなりの整備コストがかかります。それではなぜそこまでして Go を導入したのでしょうか。本記事では Go を導入した背景について説明していきたいと思います。

## なぜ Go か

### 技術的・事業的背景

どのプログラミング言語を採用するかや、どのようなアーキテクチャを選定するかというようなことは非常に影響範囲の大きい決断になるため、会社全体の技術的・事業的なコンテキストと切り離しては語れません。そこでまずは Wantedly の技術的・事業的な背景について、この後の話をするために必要最低限の部分を紹介したいと思います。

Wantedly というサービスはもともと、一つの Ruby on Rails の

元記事を表示

LINE Messaging API・LINE Botを使ったKPT分析に特化したWEBアプリ(Rails)を作る

# TL;DR
この記事は、LINE ログインとLINE BotによりWebアプリと連携を行うことを目的としています。

このアプリはスクラム開発を行っている方が対象となっています。
主な機能として、スプリントごとにKPTを管理できたり、タスクの管理が行えます。
ログインはLINEアカウントにより可能です。

実際に作成したWebアプリはこちらになります。
ぜひ、使ってみてください!
[KPT分析・タスク管理アプリ DONE](https://tmrekk121-done.herokuapp.com)

# アプリ概要
![linebot-flow.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/366133/c6a6a08e-1fdc-400e-98b4-ef5c8da20aa6.jpeg)

LINEBotは用途として現在はタスクを取得・登録することのみ可能です。

# 環境
– Ruby version 2.6.0
– Rails version 6.0.0
– MySQL 8.0.17

# 実

元記事を表示

【Rails】gemなしで検索機能を実装する

# 実装環境
Rails 5.1.7
Ruby 2.4.0
Slimで実装

#やりたいこと
実装済のuserを検索したい
検索条件はあとから追加できるようにしたい
今回は名前検索を行う

# 参考記事

【開発メモ】Railsアプリに検索機能を実装する方法をわかりやすくまとめてみた。

【Rails入門】where likeであいまい検索!複数条件やOR条件も解説


※ 個人的にわからないところがいっぱいだったので調べながら

“`ruby:models/user.rb
class User < ActiveRecord::Base def self.search(search) if search User.where(['name LIKE ?', "%#{search}%"]) else User.all end end end ``` ```slim:検索フォーム = form_tag users_path, method => ‘get’ do
p
= text_field_tag :search, params[:sea

元記事を表示

OTHERカテゴリの最新記事