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

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

Ruby on Rails APIモードでいいね機能を実装する【初学者のReact×Railsアプリ開発 第6回】

#やったこと
* ログイン中のユーザーが、ポスト(投稿)に対して、「好き」「嫌い」「興味ない」を投票でき、更新もできるようにした。
* likesテーブルをpostsテーブル、usersテーブルとリレーションさせた。
* counter_cultureを使って、関連レコードの集計(postsテーブルのsuki_countなど)を行った
* PostgreSQL 12の新機能であるGenerated Columnを使用して、関連レコードの集計結果の計算(postsテーブルのall_count, suki_percent)を行わせた。

###完成したデータベースのイメージ(dbconsoleを使って確認)
“`
app_development=# select * from likes;
id | user_id | post_id | suki | created_at | updated_at
—-+———+———+——+—————————-+

元記事を表示

#Ruby or #Rails で unixtimestamp の数値を Time.zone の日時に変換する

# In Ruby need require

“`
require ‘active_support/core_ext’
“`

# Time

“`rb
Time.at(1580655600)
# => 2020-02-02 15:00:00 +0000
“`

# Timezone UTC

“`rb
Time.use_zone(‘UTC’) { Time.zone.at(1580655600) }
# => Sun, 02 Feb 2020 15:00:00 UTC +00:00
“`

# Timezone JST

“`rb
Time.use_zone(‘Tokyo’) { Time.zone.at(1580655600) }
# => Mon, 03 Feb 2020 00:00:00 JST +09:00
“`

# Original by Github issue

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

元記事を表示

#Ruby on #Rail / Convert unix timestamp to date with Time.zone ( UTC / JST Tokyo examample )

# In Ruby need require

“`
require ‘active_support/core_ext’
“`

# Time

“`rb
Time.at(1580655600)
# => 2020-02-02 15:00:00 +0000
“`

# Timezone UTC

“`rb
Time.use_zone(‘UTC’) { Time.zone.at(1580655600) }
# => Sun, 02 Feb 2020 15:00:00 UTC +00:00
“`

# Timezone JST

“`rb
Time.use_zone(‘Tokyo’) { Time.zone.at(1580655600) }
# => Mon, 03 Feb 2020 00:00:00 JST +09:00
“`

# Original by Github issue

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

元記事を表示

Rails6 rails consoleからカラムのデータ型を確認する

# 目的

– rails consoleからのカラムのデータ型の確認方法をまとめる

# 実施方法

1. railsアプリ名フォルダ直下で下記コマンドを実行してrails consoleを起動する。

“`terminal
$ rails console
“`

1. rails console上で下記コマンドを実行してカラムのデータ型を確認する。

“`
>モデルの名前.columns_hash[‘カラムの名前’].type
“`

元記事を表示

初心者によるプログラミング学習ログ 209日目

#100日チャレンジの209日目

twitterの100日チャレンジ#タグ、#100DaysOfCode実施中です。
すでに100日超えましたが、継続。

100日チャレンジは、ぱぺまぺの中ではプログラミングに限らず継続学習のために使っています。

209日目は

【Rails入門】エラーと仲良くなれるかもしれない開発手法【読み物】

どんもー、[@snskOgata](https://twitter.com/snskOgata)です。

今回はみんな大好き、エラーとの付き合い方を書いていこうかなと思います。
まあ、ちょっとした読み物として楽しんでもらえたらと思います。
 
 
対象読者は以下の2つに当てはまる人です。
**・エラーという存在が憎くて憎くてしょうがない
・Railsアプリを読み物を見ながら1, 2度作ってみたけど、実際に自分で何も見ずに作るとなったらどうやっていけばいいかわからない**
 
エラーが出るとどうしても怒られているような感覚になってしまいますが、
そうじゃなくて本当は、**エラーは正解への道筋を示してくれる相棒**のようなものだということを感じてくれると嬉しいです。

 
実際やっていくこととしては、
**エラーを吐かせながら、それに従ってアプリケーションを作っていく**ということをしていきます。
これによりひとつずつ着実に作業を進めることができます。
アプリの内容は、つぶやきを作成しその一覧を表示する簡単なアプリケーションです。
途中で大体もう流れがわかったら最後まで飛ばしてくれても

元記事を表示

Ruby on Rails APIモードのCRUD実装 【初学者のReact✗Railsアプリ開発 第5回】

# やったこと
* Ruby on RailsのAPIモードでCRUDを実装する(ただし、更新(U)はなし)

# 前回の記事
[Reactのreduxを用いたログイン処理周りの実装【初学者のReact✗Railsアプリ開発第4回】](https://qiita.com/dl10yr/items/e383df05d6b322785d3d)
#参考にさせていただいた記事
https://qiita.com/k-penguin-sato/items/adba7a1a1ecc3582a9c9

# 実装手順
###モデルとコントローラーの作成

“`
$ docker-compose run api rails g model post content:string
$ docker-compose run api rails g controller api/v1/posts
“`
生成されたマイグレーションファイルを編集します。

“`ruby:db/migrate/XXX_create_posts.rb
class CreatePosts < ActiveRecord::Migr

元記事を表示

【Ruby】ある整数の約数(要素の数、和)を求める

興味本位で書いてみた結果の、備忘録用です。
(メソッドの定義文については、幸運にもscivola様からアドバイスを頂きました、1行でのリファクタリングが可能です。是非ご参照ください。)

“`ruby:divisor.rb
def divisor(num)
result = []
i = 1
while i <= num do remainder = num % i if remainder == 0 result << i end i += 1 end return result end puts "約数を算出したい整数を入力してください" num = gets.to_i r = divisor(num) puts r puts "約数の数は#{r.length}です" puts "約数の合計は#{r.sum}です" ```

元記事を表示

Railsチュートリアルメモ – 第7章

[メモの目次記事はこちら](https://qiita.com/yokohama4580/items/dedfd5510080273dc2a0)

[Railsチュートリアル第7章へのリンク](https://railstutorial.jp/chapters/sign_up?version=5.1#cha-sign_up)

# 第7章 ユーザー登録
## 7.1 ユーザーを表示する
### ポイント
#### デバッグ
– `<%= debug(params) if Rails.env.development? %>`で画面にデバッグ情報を表示できる。
– `if Rails.env.development?`で開発環境のみに表示するよう制限している
– コントローラー内にdebuggerを記載して画面を表示すると、rails serverを起動しているコンソールがコマンド待受け状態になり、debuggerが呼び出された状態のままでrails consoleの操作を実行できる

#### Sassのミックスイン
@mixinで定義した内容を@includeで呼び出せる

元記事を表示

【初心者向け】超簡単ドリンク注文アプリケーション

#メソッドを使用して、ドリンク注文アプリケーションを作ってみる

条件
 ・実行時、どのようなドリンクがあるかを表示させる
 ・ドリンクには番号をつける
 ・選ばれた番号と同じドリンク名を表示させる

#擬似コードを書く

“`rb

def otya
 お茶が選ばれたときのメソッド
end

def coffee
コーヒーが選ばれた時のメソッド
end

def beer
ビールが選べれた時のメソッド
end

def saida
サイダーが選べれた時のメソッド
end

puts “何を飲みたいですか?”
お茶、コーヒー、ビール、サイダーと、それぞれのドリンクメニューを表示させる

1の時お茶
2の時コーヒー
3の時ビール
4の時サイダー
それ以外は
“無効な入力値です”と表示させる
end

“`

・それぞれのドリンクが選ばれた際のメソッドを用意しておく(今回はただ、文字を表示させるだけ)
・ドリンクメニューはeach.with_indexを使用し、メニューの左に1から番号をつける
・case when

元記事を表示

RailsのActiveStorageで画像が表示されずTypeError(no implicit conversion of nil into String)がでるようになった

# 状況
ローカルで開発していたアプリをDockerで構築し直していたらActiveStorageを使用して表示していた画像が表示されなくなった
ログを見ると以下のようにTypeError (no implicit conversion of nil into String)が発生してる

“`console
Started GET “/rails/active_storage
~ (省略)~
Processing by ActiveStorage::DiskController#show as PNG
Parameters: {“content_type”=>”image/png”, “disposition”=>”inline;
~(省略)~
Completed 500 Internal Server Error in 1ms (ActiveRecord: 0.0ms)

TypeError (no implicit conversion of nil into String):

rack (2.1.0) lib/rack/files.rb:25:in `expand_path

元記事を表示

Laragonで簡単に開発環境を構築する

皆さん、学習するとき、開発をするとき、ローカルで確認を行うときの環境構築はどうされていますか?
恐らくMacを所有している方が多くDockerを使われている方が多いと思います。

自分が現在、所有しているはHPのSPECTRE X360 13、Windows 10 Homeです。Windows 10 Homeなのです。
ラップトップと言っても非力というほどではありませんがVagrantを立ち上げている間、かなりファンが回り気になります。
それに決して速いとは言えません。さらに現時点ではまだWSL2とDocker for WSLは正式リリースされていません。

ではどうするか?
![コメント 2020-01-01 215211.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/456877/4657d482-bca0-0310-bbc8-b27e50ce2a75.png)
https://laragon.org/

Laragonです。
Windows向けのAMP環境構築ソフトで
**PHP、Node.js、

元記事を表示

Railsチュートリアルメモ – 第6章

[メモの目次記事はこちら](https://qiita.com/yokohama4580/items/dedfd5510080273dc2a0)

[Railsチュートリアル第6章へのリンク](https://railstutorial.jp/chapters/modeling_users?version=5.1#cha-modeling_users)

## 6.1 Userモデル
Active Recordの使用方法についての章。Active RecordはたぶんRailsの中で最も核となるライブラリ。

### ポイント
– 以下コマンドでモデルを生成し、DBに反映できる
– `rails generate model User name:string email:string`
– `rails db:migrate`
– Active Recordを使うことで、RailsからDBの詳細を隠蔽し、切り離すことができる。
– SQLについて学ばずにDBに対してCRUD操作を行える。

## 6.2 ユーザーを検証する
バリデーションの実装方法についての章。
###

元記事を表示

ヒアドキュメント【Ruby】

今回はRuby技術者認定試験で意外と狙われるヒアドキュメントについて書きます。

#### そもそもヒアドキュメントとは?

ヒアドキュメントは改行コードを含めて複数行の文字列を書くことができます。

ヒアドキュメントを使わない場合。

“`ruby
puts “ヒアドキュメントを使わない場合はこのようにクオーテーションで囲い、\n改行したい箇所に\\nを書くことで改行できる。\nちなみにバックスラッシュを二つ使う\\ことで改行(\\n)をエスケープできる”
“`
【実行結果】

“`
ヒアドキュメントを使わない場合はこのようにクオーテーションで囲い、
改行したい箇所に\nを書くことで改行できる。
ちなみにバックスラッシュを二つ使う\\ことで改行(\n)をエスケープできる
=> nil
“`

ただしヒアドキュメントを使うと

“`here.rb
doq = <

元記事を表示

resourcesを多段階ネストさせた時のform_forメソッド

##概要

resourcesを多段階ネストさせた時のform_forメソッドの使用方法に関する記事があまりなかったので、備忘録として纏めます。

スポット(Post)ごとに写真(Image)が投稿でき、写真ごとにコメント(Comment)が投稿できる旅行カタログアプリケーションを作成しております。

ビューはHamlで書いております。

作成途中のため、細かいところはご容赦くださいませ。

##ルーティング

“` routes.rb
resources :posts, only: [:index, :new, :create, :edit, :update] do
resources :images, only: [:index, :new, :create, :show] do
resources :comments, only: [:index, :create]
end
end
“`

##コントローラ

1つ目のネストのimageは下記の通り。

“` images_controller.rb
class ImagesControl

元記事を表示

RSpecで言語非依存の壊れにくいバリデーションテストを作る

# はじめに
RSpecでバリデーションのテストを書くとき、下記のように書くことが多いと思います。

“`spec/models/user_spec.rb
it “is invalid without a name” do
user = User.new(name: nil)
user.valid?
expect(user.errors[:name]).to include(“can’t be blank”)
end
“`

かの[EverydayRails](https://leanpub.com/everydayrailsrspec-jp/read#leanpub-auto-section-18)にも同様のサンプルが掲載されています。

しかし、I18nを導入してエラーメッセージなどを日本語化したときにこのテストは通過しなくなってしまいます。
そこで、次の様に修正します。

“`spec/models/user_spec.rb
it “is invalid without a name” do
user = User.new(nam

元記事を表示

Rails超基本コマンドチートシート(モデル/ビュー/コントローラーの追加)

Ruby/Rails エンジニアとして働き始め2ヶ月ほど立ちますが、まだ Rails のコマンドを業務では使ったことがありませんのでほとんど忘れてしまっています。就職前に学習したので調べれば思い出せるとはいえ、この程度のコマンドならば、業務で必要になった時にわざわざ1つずつ調べるのは時間がかかりすぎます。
そこで、必要な時にサクッと思い出せるよう、チートシートとしてにまとめます。

## 前提
各コマンドの意味や内容は割愛しますので、詳細は、 Rails ガイド(https://railsguides.jp/) などをお読みください。

## モデル関連

### モデル生成
モデルとマイグレーション生成する

“`
$ rails generate model Name column_name:column_type
“`

“`
$ rails generate model User name:string number:integer
“`

### マイグレーション実行

マイグレーションを実行する

“`
$ rails db:migrate
“`

##

元記事を表示

#Rspec + #Ruby でhelper メソッドを定義して共通化する

Globalなメソッドではなくちゃんと describe / context の中に作用を閉じ込めてくれるみたいだ

“`rb
# https://relishapp.com/rspec/rspec-core/v/3-8/docs/helper-methods/arbitrary-helper-methods
#
# Arbitrary helper methods
#
# You can define methods in any example group using Ruby’s def keyword or
# define_method method. These helper methods are exposed to examples in the
# group in which they are defined and groups nested within that group, but not
# parent or sibling groups.

# PASS
RSpec.describe “flat define method” do
def he

元記事を表示

Rspec の expect と with で ネストの深いハッシュや引数をゆるくテストする / #Ruby #Rspec #Rails

# Complexed hash fuzzy match

“`rb
example ‘complexed match’ do
expect(SomeClass).to receive(:call).with(
‘X’,
hash_including(
y1: ‘Y1’,
y2: (be_a String),
y4: hash_including(
y4_1: array_including(1, 3),
y4_3: contain_exactly(9, 7, 8),
)
),
any_args
)
subject
end

“`

# Example

“`rb
# Doc
# https://relishapp.com/rspec/rspec-mocks/v/3-2/docs/setting-constraints/matching-arguments

class SomeClass
de

元記事を表示

OTHERカテゴリの最新記事