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

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

【feature】Rspecで作成したテストデータに引数を渡す方法 let! (){create()}

基本的なRspecの書き方についてはこちらに全て記載してあるので書きません。
https://qiita.com/jnchito/items/607f956263c38a5fec24

###順序
・テストデータhoge_product、hoge_caetgoryを作成する
・hoge.categoryを持っているページにアクセスする
・カテゴリと紐づいた商品が表示されるテストを行う

##コードに落とし込む

“`test_spec.rb
require ‘rails_helper’

RSpec.feature “Categories”, type: :feature do

let!(:hoge_caetgory) { create(:caetgory) }
let!(:hoge_product) { create(:product ,caetgory: [caetgory]) } #caetgoryと言う引数(属性)を持ったproductを作成し、代入

before do
visit hoge_category_path(category)
end

元記事を表示

【Vim】コメントを入力した時、カーソルが勝手に文頭に移動してしまう

#問題
コメントを入力しようとしたら、勝手にカーソルが移動してインデントが消えてしまう問題です。

自分の場合はRubyファイルでしたが、

“`ruby:controller/items_controller.rb
if @row.save
redirect_to title_path(title_id), notice: “ITEM SAVED”
else
redirect_to title_path(title_id), notice: “SAVE FAILED”
end
“`

こういう場合、if文内にそれぞれ`# 保存成功`と`# 保存失敗`を入れたくても、#を入力した瞬間にカーソルが移動してしまい、

“`ruby:controller/items_controller.rb
if @row.save
# 保存成功
redirect_to title_path(title_id), notice: “ITEM SAVED”
else
redirect_to title_path(

元記事を表示

駆け出す前に一歩立ち止まって、ユーザー登録機能におけるDB設計を考えよう!

#記事内容
メルカリクローンサイトのユーザー登録機能を実装しました。
前回の記事でDB設計について記述しましたが、ユーザー機能の実装中にDB設計との変更点がありましたので、変更内容と変更理由を記載します。
駆け出しエンジニアは「とりあえず進みながら修正していこう!」とういうマインド」で開発がスタートすると思います。自分たちのチームもそうでした。
読んでくれた方がBD設計で手戻りがないようになればと思います。DB設計の修正が結構やっかいだったので…
[前回の記事はこちら](https://qiita.com/oitakazuki/items/19e5ba2396624bae1057)

この記事DB設計をした時点で考えていたこと。
`ユーザー・アイテムモデルに大量のカラムができるから、括れるものは別テーブルを作成し1体1の関係でリレーションする。(テーブルにカラムが多すぎると不便になりそう・・・)`

#DB設計変更箇所
今回変更した箇所は以下の通りです。
変更しなければ実装できないというわけではないと思いますが、実装難易度(検索してヒットするか)、分かりやすさを考慮しました。

`

元記事を表示

【自分用】チョコプラのコント”カレー屋”の「入っちゃってる」かどうかを確かめるプログラムと、それを作って学んだこと

### 元ネタ

### コード
“`Ruby
puts “長田「小辛は唐辛子マークでいうと何個分なの?」”
puts “松尾「”
mild_hot_min = gets
puts “から”
mild_hot_max = gets
puts “になります。」”
mild_hot_level = [*(mild_hot_min.to_i..mild_hot_max.to_i)]

puts “長田「じゃあ中辛は?」”
puts “松尾「”
normal_min = gets
puts “から”
normal_max = gets
puts “になります。」”
normal_hot_level = (normal_min.to_i..normal_max.to_i).to_a

haicchateru_yatsu = mild_hot_level & normal_hot_level
if ha

元記事を表示

Rails 6 Grapeを利用したAPI作成、Swaggerでの確認

# RoRでのAPI作成メモ 
ruby 2.7.0 & Rails 6
Rails 5.x 系の資源を利用する例です。
https://qiita.com/katafuchix/items/8a96e2fa9ddc8bc83545

## プロジェクト作成
“`
$ mkdir api_sample
$ cd api_sample
$ bundle init
“`
Gemfile編集

“`ruby
# frozen_string_literal: true

source “https://rubygems.org”

git_source(:github) {|repo_name| “https://github.com/#{repo_name}” }

gem ‘rails’
“`

インストール
*MySQLを利用する例

“`
$ bundle install –path vendor/bundle
$ bundle exec rails new . –skip-action-mailer –skip-active-storage –skip-actio

元記事を表示

【随時更新】Railsでたまに見返したいメモ集

個人的に見返したい資料のメモ書きです。

##HTTPメソッド一覧
| HTTPメソッド | 使用するリクエスト |
|:———–|—————————:|
| GET | ページを表示する操作のみを行う時 |
| POST | データを登録する操作をする時 |
| PUT | データを変更する操作をする時 |
| DELETE | データを削除する操作を行う時 |
##アクション名一覧

| アクション名 | 対応するリクエスト |
|:————-|—————–:|
| index | 一覧表示ページを表示 |
| new | 新規投稿ページを表示 |
| create | データの投稿 |
| show | 個別詳細ページを表示 |
| update | データの編集 |
| dest

元記事を表示

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

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

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

## サマリ
– メールの送信とアカウント有効化機能の実装
– メタプログラミング
– SendGridを利用した本番環境でのメール送信

## ポイント
– `rails generate mailer`でメーラーの雛形を作成できる
– e.g. `rails generate mailer UserMailer account_activation password_reset`
– 生成されるHTML/textメーラーのレイアウトは`app/views/layouts`で定義されている
– コントローラー同様、メーラーの中で作成したインスタンス変数はテンプレートの中で使用することがで

元記事を表示

【Ruby】Unicorn で動かす一番小さいサンプルメモ

# メモ
– ほとんど参考サイトの写経
– ワーカープロセスを2つ動かす

## 事前準備
“`ruby:Gemfile
source ‘https://rubygems.org’

gem “unicorn”
gem “rack”
“`

Rackアプリケーションの要件は以下とのこと。

– callというメソッドを持っていること
– callメソッドの引数としてWebサーバからのリクエストを受けること
– callメソッドは,次の要素を含むレスポンスを返すること
– ステータスコード
– レスポンスヘッダ(Hash)
– レスポンスボディ(Array)

ちなみに以下変数 `env` の中身はリクエスト時に展開すると、以下のようにハッシュ構造でHTTPリクエストが渡される

“`ruby
{“REMOTE_ADDR”=>”121.87.8.214”,
“REQUEST_METHOD”=>”GET”,
“REQUEST_PATH”=>”/”,
“PATH_INFO”=>”/”,
“REQUEST_URI”=>”/”,
“SERVER_PROT

元記事を表示

[Rails] DBにデータが登録されない時の対処方法

##はじめに
Rails5.0での投稿機能実装ではまったのでメモ

##環境
macOS Catalina
Ruby 2.5.1
Rails 5.0.7.2
PostgreSQL

##困り
form_forでDBにデータを登録しようと思ったが、エラー出てないのにデータ保存されていなかった

##対処した方法
1. GUIアプリで確認
2. 保存されない原因を確認①(pry-rails)
3. ハッシュの二重構造を解消
4. 保存されない原因を確認②(メソッドの後ろに”!”)
5. バリデーションによるエラーを解消

###1. GUIアプリで確認
– PostgreSQLを使用しているので、Posticoをインストール
– GUIアプリでDBが見れるようになったら、もう一度投稿してみる
– GUIアプリ上ではデータが保存されていないはず

▼インストール方法とDBへの接続方法
PostgreSQL:[PostgreSQLのデータをGUIでいじる(macOS/Postico)](https://qiita.com/junara/items/8ee572151727288f6576)
M

元記事を表示

Rubyで手を動かしてやったことまとめ

書いた目的:いちいち探すのがめんどくさかったことをまとめてみた

詰まるたびに適宜更新する。

## 取得した文字列を1文字づつ分割して配列に入れたい

split関数で空文字を指定すると取得できる。
sample:

“`split_char.rb
str = “tukapai”
array = str.split(“”)
puts array
“`
output:

“`
ruby split_char.rb
[“t”, “u”, “k”, “a”, “p”, “a”, “i”]
“`

#development/Ruby

元記事を表示

Rails~~投稿とユーザーを紐付けする

#テーブルに新しくカラムを追加する
まずターミナルからマイグレーションファイルを作成。データベースへ反映させる。
##ターミナル
“`
rails g migration add_user_id_to_posts
※マイグレーションを変更
rails db:migrate
“`
##マイグレーションファイルの中身
“`
class AddUserIdToPosts
def change
add_column :posts, :user_id, :integer
end
end
“`
##バリデーションの設定
“`
class Post

元記事を表示

Alfred Workflowsで入力文字列からリストを作るRubyスクリプトの雛形

Alfred Workflowsは便利なんだけど、いざ自分で作ろうとしたとき「動的にリストを作って表示したい」と思った最初の一歩だけでもちょっとめんどくさかったので雛形を作りました。

Alfred Workflowsって何? という人はこちらの記事をどうぞ。
https://qiita.com/jackchuka/items/ccd3f66f6dd00481b98b#workflows

## 実現したいこと

ヘルパーライブラリとしてはPython製の https://www.deanishe.net/alfred-workflow/ とかが見つかります。が、そこまで大層なものは別に欲しくない。

とりあえず改造しやすい最小限のコードで、以下の画像のような感じの入力と出力が欲しい。
あとリスト項目を選択したら、なんかクリップボードに項目がコピーされると嬉しい。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/34405/00198fc7-717d-7f74-27e0-689677ec

元記事を表示

[Ruby on Rails]trueだとvalidation通るのにfalseだとvalidation通らない

フロントエンジニアです
apiのつなぎこみしていて、ハマったので書きます。

### 結論

boolean型の存在確認に`presence: true`を使うと、
trueだとvalidation通り、falseはvalidionが通らない。

### 具体例

こんな感じのTaskテーブルがあって、

“`
create_table “tasks”, force: :cascade do |t|
t.string “name”, null: false
t.boolean “is_finished”, null: false
t.datetime “created_at”, precision: 6, null: false
t.datetime “updated_at”, precision: 6, null: false
end
“`

こんな感じに`is_finished`カラムに`presence: true`をかけているとします。

“`
class Task < ApplicationRecord validates :is_finished,

元記事を表示

【Ruby】配列とは?

配列とは?

・配列とは複数の値をまとめて管理したいときに使用
・配列は「箱が順番に並んだグループ」

配列の作成方法

Rubyにおいて配列を作成する場合は括弧( [] )を使用。
また変数を、複数用意する際は、括弧の中に値をカンマ区切りで記述していく。

■使用例
array = [“犬”, “ネコ”, “ハリネズミ”]

元記事を表示

Railsでフォーム作成時にHTMLで書いたコードをform_tagに変換する方法

Ruby on Railsでヘルパーメソッドを使って、HTMLのフォームをform_tagに書き換える方法を説明します。

##ヘルパーメソッドとは
ある動作を処理する場合にメソッド化して扱えるようにRailsにあらかじめ組み込まれた機能のこと。使うことでビューをシンプルに美しく書くことができるといったメリットがあリます。

##form_tagメソッドとは
フォームを実装するためのヘルパーメソッドです。

今回は以下のコードを書き換えます。

“`erb:sample.html.erb



“`

これをform_tagに書き換えると

“`erb:sample.html.erb
<%= form_tag('/posts', method: :post) do %>

元記事を表示

postgreSQLのインストールとrails newをするまでの流れ

herokuでのディプロイのために、推奨とされるpostgre SQLについて調べましたが結構手間取ったので、まとめました。
(herokuは推奨がpostgre SQLで、これまで使用してきた、mysqlは別途設定が必要かつエラー出やすかったりするらしいので、rails new 時点から postgreSQL でアプリ作りました。)

※完璧ではないと思うので何かツッコミあればお願いします。

以下ターミナルでのコマンド
#postgreSQLのインストール

######postgreSQLの有無の確認

“`
~ % psql –version
“`

######postgreSQLのインストール
*下記コマンドはhomebrewインストールが前提

“`
% brew install postgresql
“`

######postgreSQLのバージョン確認

“`
% psql -V
psql (PostgreSQL) 11.5
“`

######postgreSQLのインストール場所の確認

“`
% which psql
/usr/local/bi

元記事を表示

マイクロポストにコメント機能をつける

#はじめに
ご訪問いただきありがとうございます。初めての投稿ですが学んだことを備忘録的にまとめようと思い記事にしてみました。レベル的にはrailsチュートリアルを終えたくらいのレベルです。もし間違えているところ等あればアドバイスいただけると幸いです。

###作るもの
今回は投稿されたマイクロポストに自由にコメントできるような機能を付けます。(題材は自分のポートフォリオサイトです。尚、すでにUserテーブルとMicropostテーブルは作成済みです。)

###対象読者
railsチュートリアルに機能を追加したい等自分と同じ位のレベルの人を対象としています。

#作成の流れ
まず初めにコメント機能を追加するまでの流れです。
1.Commentモデルの作成、変更
2.モデルの関連付け、バリデーションの設定
3.Commentsコントローラーの作成、ルーディングの設定
4.対応するビューの作成
5.コントローラのアクションの作成

#1.Commentsモデルの作成
まずデータベースとやりとりを行う、Commentモデルの作成を行います。
ちなみにテーブルの中身はこんな形です。

|カラム

元記事を表示

Mailer viewでヘルパーメソッドを使用する

#Mailer viewでヘルパーを使いたい

###郵便番号にハイフンをいれてくれるメソッド

“`application_helper.rb
def format_zipcode_include_hyphen(zipcode)
zipcode.include?(‘-‘) ? zipcode : zipcode.insert(3,’-‘)
end
“`

mailer viewでいきなり使用するとエラーになった。

###application_mailer.rb
“`application_mailer.rb
class ApplicationMailer < ActionMailer::Base add_template_helper(ApplicationHelper) end ``` と記述する ###view ```mailer.ftml.slim p 〒#{format_zipcode_include_hyphen(zipcode)} ``` でうまくいきました。

元記事を表示

盲点rubyのメソッドdeleteのそれぞれ

ルビーのシルバー勉強中に盲点だったところが見つかりました。

それは**deleteメソッド**

deleteメソッドの挙動について今回は記事をあげたいと思います。

まずdeleteメソッドはarray、string、hashそれぞれのクラスで使えるメソッドです。

# Array

まずはarrayクラスのdeleteメソッドの動き

deleteメソッドは引数で与えた値が一致したものも全て削除します。

“`ruby
array = [1,2,3,4,5,1,2,3,4,5]
p array.delete(3)
3
p array
[1,2,4,5,1,2,4,5]
“`
上記のようにdeleteメソッドを使ったタイミングで返ってくる値は削除する対象の値が返ってきます。

そして破壊メソッドなので3が削除されています。

私は、deleteメソッドは他stringやhashも動きそんなに変わらないだろうと思っていました。

そして、模擬問題をとているときに間違えてしまい、
あれ?となったのです。

それはstringのdeleteメソッドの問題でした。

#String

元記事を表示

『非同期でのメッセージ投稿』が理解できる最低限のRailsアプリを丁寧に作る(Ajax苦手の自分とお別れしよう)

# この記事の基本的な方針
Ajaxはなんだか難しい!は、勘違いです。一歩一歩きちんと進んでいけば、普通のことだと思えてくるでしょう。
ここではAjax非同期通信を理解するためだけの簡易なアプリを一つ丁寧に作成して、Ajax学習の基礎を完了することを目的としています。

この記事は、以下の「登録画面」「ログイン画面」「TOP画面」の3画面の簡単なアプリを元に拡張していきます
【TOP画面(ログイン前)】     【TOP画面(ログイン後)】
a0.png a9.png

  • OTHERカテゴリの最新記事