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

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

Rails Tutorial MEMO#8

#Rails Tutorial第8章
##基本的なログイン機構
本章では、ログインの基本的な仕組みを実装していく。
##8.1 セッション
HTTPはそれより前のリクエストの情報を全く利用できない、Statelessなプロトコル。故にユーザーのIDを保持しておく手段がHTTPプロトコル内「には」全く無い。
ユーザーログインの必要なWebアプリケーションでは、セッション(Session)と呼ばれる半永続的な接続をコンピュータ間(ユーザーのパソコンのWebブラウザとRailsサーバーなど)に別途設定する。
Railsでセッションを実装する方法として最も一般的なのは、`cookies`を使う方法。
###8.1.1 Sessionsコントローラ
`create`アクションにPOSTリクエストを送信すると、実際にログインする。
`destroy`アクションにDELETEリクエストを送信するとログアウトする。
Sessionsコントローラを生成する
`$rails generate controller Sessions new`
routesにリソースを追加する。

“`config/rou

元記事を表示

created_atで与えられる日時を整形する

 
sqlで生成されるcreated_atを整形するのに悩んだため、その実装方法のメモ

#sqlファイル
テーブルを作成する。

“`sql:table.sql
create table todos
(
id integer PRIMARY key,
body text,
created_at
);
“`

#rbファイル
active recordを用いて、先ほど作成したtodosテーブルをオブジェクトに結びつける。

“`rb:tlist.rb
class Todos < ActiveRecord::Base validates :body, presence: true end ```   オブジェクトをインスタンス変数に格納する。 ```rb:tlist.rb get '/' do @todos = Todos.all erb :index end ``` #erbファイル 時刻を表示してみる。 ```erb:index.erb

【Ruby理解度チェック】何が起きているか説明できますか? &&とand

面白い質問があったのでテスト形式でシェア

# 現象
“`ruby
def ampersand_return
puts “foo” && return
puts “bar”
end

def and_return
puts “foo” and return
puts “bar”
end

> ampersand_return
=> nil

> and_return
foo
bar
=> nil
“`

何が起きているか説明できますか?

# 回答
原則として、`&&`と`and`の違いはその[優先順位](https://docs.ruby-lang.org/ja/latest/doc/spec=2foperator.html)にある

## `&& return`の方
`&&`が先に演算され、以下と同値になる

“`ruby
puts (“foo” && return)
“`

`”foo”`はtruthyなので、右辺の`return`が処理され、メソッドは何も出力せずreturnする。

## `and return`の方
`puts “foo”`が先に演算

元記事を表示

【Rails】hamlコード早見表

Github公式 [Haml-rails](https://github.com/haml/haml-rails)
チュートリアル [HamlTutorial](http://haml.info/tutorial.html)

# 導入

“`rb:Gemfile
# 以下を追加し`bundle install`
gem “haml-rails”, “~> 2.0”

# Rails4の場合
gem “haml-rails”, “~> 1.0.0”
# Rails3の場合
gem “haml-rails”, “~> 0.4.0”
“`

**html.erbをhtml.hamlに変換**
`$ rails generate haml:application_layout convert`
全てのerbファイルを変換する場合
`$ rails haml:erb2haml`

# HTMLコード

“`rhtml:erb

blue
blue
blue
元記事を表示

Railsでproduction環境運用する際にしたほうがいい設定

##ブラウザ上のエラー表示をdevelopmentとproduction環境で同じにする
まずdevelopment環境でERRORが発生するとブラウザに詳細情報が表示されます。
8c1d32d1432226f625cab33c2ed1fcc7.png
しかし、production環境だと何かしらのERRORが発生したとしても「We’re sorry, but something went wrong.」と表示されてしまいます。
![picture_pc_f8886f63bd354c264487153ad2c5c567.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/611668/f674015b-2a6f-d900-9a71-20

元記事を表示

備忘録 会計freeeAPI叩いた時ハマったこと

## GETでクエリ指定する場合は、ちゃんとuri.request_uriでhttp通信しようね

これに尽きます、会計freeeのAPI仕様とかじゃなくただ単に自分の凡ミスだった。

###rubyで叩いた

OAuth(オーオース)2.0でACCESS_TOKENは取得済み。
こんな感じでパラメーターをセットして

“`ruby
BASE_URL = ‘https://api.freee.co.jp’
MY_COMPANY_ID = ‘*********’
USE_ACCESS_TOKEN_HEADER = {
“accept” => “application/json”,
“Authorization”=> “Bearer *************************”
}
“`

以下のように取引先の詳細を取得するAPIを叩いたところ
(分かりやすくかなり単純なメソッドにしてます)

“`ruby
def get_torihiki_id(name)
uri = URI.parse(BASE_URL + ‘/api/1/partners’)
ur

元記事を表示

文字列から指定の文字以降を削除する

“`
str = “A30-60_10000”
“`

### 後ろを消す
“`
str.sub(/_.*/, “”)
“`
結果↓

“`
=> “A30-60”
“`

### 前を消す
“`
str.sub(/.*_/, “”)
“`
結果↓

“`
“10000”
“`

参考
https://qiita.com/flmil/items/8cbfbf49844ddef79000

元記事を表示

Webpacker::Manifest::MissingEntryError in Devise::Sessions#newというエラーが出た時の解決法

#開発環境
・Rails 6.0.3.1
・Ruby 2.6.6

#エラー時の状況

“`
$ rails s
“`

コマンドを実行して`localost3000`にアクセスすると、

“`
【エラー内容】

Webpacker::Manifest::MissingEntryError in Devise::Sessions#new
Showing /Users/XXXX_XXXX/Desktop/XXX_XXX_XXX/app/views/layouts/application.html.erb where line #9 raised:

Webpacker can’t find application in /Users/XXXX_XXXX/Desktop/XXX_XXX_XXX/public/packs/manifest.json. Possible causes:
1. You want to set webpacker.yml value of compile to true for your environment
unless you are usin

元記事を表示

Ruby インスタンスメソッドについて

インスタンスメソッドについての曖昧な知識の補完として書きます。
間違いなどありましたら、コメントいただけますと幸いです。

# インスタンスメソッド
・クラス構文内でメソッドを定義するとインスタンスメソッドになる。
・そのクラスのインスタンスに対して呼び出せる。

“`ruby
class Car
# インスタンスメソッドを定義する(ここではnameメソッド)
def name
“yellow cab”
end
end
# クラス名.newでインスタンスを作成して変数taxiに代入
taxi = Car.new
# インスタンスメソッドを呼び出す
taxi.name #=> “yellow cab”
“`

# まとめ
・インスタンスメソッドはクラス内で定義する。
・インスタンスを作成してから、インスタンスメソッドを呼び出す。
・インスタンスメソッドは、「インスタンス.メソッド」で呼び出せる。

# 参考にしたリンクや書籍
・メソッドとクラスメソッドとインスタンスメソッドが曖昧だった
https://qiita.com/right1121/items/c74d350

元記事を表示

もしもピカチュウが100まで数えたら

ゴミ箱に入っていたのをサルベージしました。
ピが2個続いている場所をよく聞けばピカピピカピカ=11にも対応できるのがコツ(?)
もしもピカチュウが「カピ」と鳴くことがあれば、もうこれは成立しない。

“`
(0..100).each{|i| p i;p i.to_s(2).rjust( (i.to_s(2).size % 2) + i.to_s(2).size ,”0″);puts i.to_s(2).rjust( (i.to_s(2).size % 2) + i.to_s(2).size ,”0″).scan(/.{1,#{2}}/).map{|a| a.gsub(/.*/,{“00″ =>”ピィカァ” ,”01″ => “ピカチュウ” ,”10″ => “ピカピ”,”11″ => “ピカピカ”})}.join(“”) }
“`

“`
irb(main):001:0> (0..100).each{|i| p i;p i.to_s(2).rjust( (i.to_s(2).size % 2) + i.to_s(2).size ,”0″);puts i.to_s(2).rjus

元記事を表示

Rubyを2行でセグフォらせる

流行ってると聞いたのでRubyでもやってみました

“`ruby
require ‘fiddle’
Fiddle::Pointer[0].ptr
“`

ワンライナー

“`sh
ruby -r fiddle -e ‘Fiddle::Pointer[0].ptr’
“`

なんでこれでセグフォるのかはあんまり理解していません…。

元記事を表示

.sort.uniq か、.uniq.sort か

配列をソートしてユニークするのに、`.uniq.sort` と `.sort.uniq` どっちが良いのか。

長いものには巻かれようと思ったものの、破壊的に実行すると、`.uniq!.sort!` は実行出来ないケースがある事が判明 `@2.7.1`

“`ruby:test.rb
r = {
‘s’ => [5,1,3,53,2],
‘t’ => [5,3,4,4,3,2],
}
r.each_key{|k|
#r[k].sort!.uniq!
r[k].uniq!.sort!
# => ダメ
}
p r
“`

“`shell-session:
$ ruby test.rb
Traceback (most recent call last):
2: from hoge2.rb:5:in `


1: from hoge2.rb:5:in `each_key’
test.rb:7:in `block in
‘: undefined method `sort!’ for nil:NilClass (NoMethodError)

元記事を表示

Time.strptime で、%j (年中の通算日)がアレ

他人様のコードをメンテする必要があって、コードを追ってると、`%j` な年月日を `UNIX time` に変換するのに、面倒な事やってた。

で、嫌気が差して、「`ruby` でも `strptime` あるだろ?」と適当に探すと、ビンゴ!!

## 問題発生

差し替える前に、テスト。

以下の様なコードを実行

“`
$ ruby -e ‘require “time” ; p Time.strptime(“2003,070,12:21:51 JST”, “%Y,%j,%H:%M:%S %z”).to_i’
1041391311
# ↑ 2003/01/01 12:21:51 JST
“`

問題発生。

え? `%j` 解釈してくれないの?

ググって見ても答えは得られず[^1]

[^1]: そもそも `%j` なんて使う事って特殊だし、、、

色々試して、、、

## 結論

古い `ruby` の `Time` クラス(モジュール?)の `.strptime` は、`%j` 解釈してくれないっぽい[^2]

検証では、`2.7.1p83` はOKだった[^3]

[

元記事を表示

三項演算子で、複数変数への代入

10年ぶりくらいに `ruby` のコードに立ち向かわなくてはならなくなった

“`shell-session:
$ ruby -e ‘i, j = 1 ? [1,2]:[3,4] ; p i, j’
1
2
“`

こんなので数時間悩んだのがアホみたい

元記事を表示

Error ExecJS::RuntimeUnavailable: 発生時の対処法

#発生現象
AWSのEC2でWebサーバ、アプリケーションサーバの設定時に、環境変数の設定をする際の`$ rake secret`を実行した際に下記Errorが発生。

“`terminal:terminal
ExecJS::RuntimeUnavailable: Could not find a JavaScript runtime. See https://github.com/rails/execjs for a list of available runtimes.
/var/www/chat-space/config/application.rb:7:in `
/var/www/chat-space/Rakefile:4:in `require_relative’
/var/www/chat-space/Rakefile:4:in `
(See full trace by running task with –trace)
“`
→Javascriptがうまく走っていないので、[Node.js](htt

元記事を表示

railsのバリデーションとnull: false 自分用メモ

バリデーションとは、リクエスト側が送信した特定のカラムの値が空のままだったり、意図しない形で保存されるようなことを防ぐために、予めモデルに記述しておく、門番のような役割。

valid.png

上記の例だと、

text「通りまーす」
validates「待て」
text「えっ」
validates「お前何も入力されてないじゃないか。やり直し」
text「ぴえん」

こんな感じ。

一方でnull: falseとは。
実はこちらも空のままのデータを受け入れないための門番、その2。
null.pngRailsの存在確認メソッド 使い分けメモ (any?/empty?/present?(!blank?)/nil?)

# はじめに
Railsのビューで、「画像があったら表示させる」みたいな処理を書く場面がありました。
存在確認のためのメソッドは、Rubyのもの、Railsのもの含め、いくつかあります。
ちょっと調べて、「よし、これで行こう!」とメソッドを選択してレビューに出したところ、おもいっきり玉砕したので、今後間違えないように備忘録として残しておきます。

# 環境
macOS Catalina Version 10.15.5
Ruby: 2.6.5
Ruby on Rails: 6.0.3

# 調査対象
– any?(Ruby)
– empty?(Ruby)
– nil?(Ruby)
– present?(Rails)

#動機
過去にも類似の記事はあり、実際に大部分、「[rubyの真偽判定メソッド(nil?/empty?/blank?/present?)を検証してみた結果、興味深いことがわかった](https://qiita.com/go_d_eye_0505/items/541110cb9821734b0623)」に乗っからせていただきました。そのうえで、今回投稿に至った理由は、以下とな

元記事を表示

【Rails】Bootstrap3を用いた画像スライドショーの実装

# 目標
![ezgif.com-video-to-gif.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/579893/99f925e0-0b2f-7adf-3aed-e09a36fd6597.gif)

# 開発環境
・Ruby: 2.5.7
・Rails: 5.2.4
・Vagrant: 2.2.7
・VirtualBox: 6.1
・OS: macOS Catalina

# 前提

下記実装済み。

・[Slim導入](https://qiita.com/matsubishi5/items/b639ffddecc626856039)
・[Bootstrap3導入](https://qiita.com/matsubishi5/items/b117c95f4dd71340cc80)
・[投稿機能実装](https://qiita.com/matsubishi5/items/1a5aeab651b5822d1f2c)
・[画像複数アップロード機能実装](https://qiita.com/matsub

元記事を表示

ruby mapメソッド

##mapメソッドとは
配列に対して変更を加えて配列を返すメソッド。

##書き方

“`
オブジェクト.map { |変数|
# 実行したい処理
}
“`

もしくは

“`
オブジェクト.map(&:メソッド名)
“`

##実行例

####書き方1の場合

“`
a=[2,5,3]

b=a.map{ |hoge|

hoge*2
}

#結果 b=[4,10,6]
“`

まず、a[0]の2がhogeに代入されます。そしてhoge*2で4がb[0]に入ります。
次にa[1]の5がhogeに代入されます。そしてhoge*2で10がb[1]に入ります。
最後にa[2]の3がhogeに代入されます。そしてhoge*2で6がb[2]に入ります。

結果として b=[4,10,6]という配列が生まれます。

####書き方2 オブジェクト.map(&:メソッド名) の例

“`
a=[“リンゴ”,”ゴマフアザラシ”,”シカ”]

b=a.map(&:length)

結果 b=[3,7,2]
“`
lengthメソッドは文字列の長さを返すメソッドです。

元記事を表示

【Windows】gem install sqlite3ができない

# 環境
ターミナル: MSYS2(mintty+bash+pacman)
Ruby 2.6 + DevKit
Windows10 64bit

# SQLiteのバージョンは問わないという人

SQLite 1.3.13をインストールしよう
コンパイル済だからエラー出ることはないはず。

“`
gem install sqlite3 –version 1.3.13 –platform ruby
“`

# mkmf.logを見て
[①~package configuration for sqlite3 is not found篇~](https://qiita.com/nicokazu/items/944318dc0ef5746e2b9d)
[②~Cannot create temporary file in C:\篇~](https://qiita.com/nicokazu/items/3f6a6bc4b8f31b300648)
模索中…

# 出てくるエラー
“`
C:\Users\foobar>gem install sqlite3 –platform ruby

元記事を表示

OTHERカテゴリの最新記事