Rails関連のことを調べてみた2019年12月17日

Rails関連のことを調べてみた2019年12月17日
目次

Rails 多次元配列とかを出力したい

PHPだったら `var_dump` や `var_export` などで配列やobjectの内容を出力してくれるが、Railsだとちょっとわかりにくかったのでメモ。

“`ruby
data = [
{‘id’ => 1, ‘name’ => ‘tom’},
{‘id’ => 2, ‘name’ => ‘ken’},
{‘id’ => 3, ‘name’ => ‘guhi’}
]

data2 = [[
{‘id’ => 1, ‘name’ => ‘tom’},
{‘id’ => 2, ‘name’ => ‘ken’},
{‘id’ => 3, ‘name’ => ‘guhi’}
]]

# putsするとdataもdata2も同じ出力結果になる。ループするときに困った。
puts data
puts data2

# 解決策 to_sをつけてputs
puts data.to_s
puts data2.to_s
“`

これで期待した通り、多次元になっている様子を見れた。
`to_s` は配列でもハッシュでも数字でもなんでも文字列化するよっていうこと。

元記事を表示

[Docker]bundler: failed to load command: rails (/usr/local/bundle/bin/rails) とBundler::GemNotFoundの対処について

Dockerでrailsのアプリケーションを作っている際に出会ったエラーで、
いろんなことを試してもなかなか解決できなかったのでメモです。

## 出会ったエラー

“`
bundler: failed to load command: rails (/usr/local/bundle/bin/rails)
Bundler::GemNotFound
“`
今までは普通に起動できていたのですが、railsアプリ内にdbのvolumeフォルダが間違えてできてしまっていたため、削除した際に起きたエラーです。

## 試したこと
– 前のコミットに戻る
– PC再起動
– コンテナ全て削除
– イメージ削除
– volume削除
– webコンテナ内で、
`bundle install`
`gem install bundler`などなど…

いろいろと試しましたが、エラーが消えず悩みました。

## 解決した方法

Dockerfileの一番上に書いてある

“`
FROM ruby:2.4.1
“`
を、

“`
FROM ruby:2.6
“`

に変更するとうまくいき

元記事を表示

railsのActiveRecordで最新のレコード1件取得する

#はじめに
Ruby on Rails 2 Advent Calendar 2019の17日目の記事になります!
railsで最新レコード1件を取得する方法についての紹介です。(小ネタです。)

##最新のレコード1件取得する
ユーザーテーブルで直近で更新されたレコード1件を取得したい・・・
そんな場合は以下のコードになります。

“`
#モデル名はUser
@user = User.order(updated_at: :desc).limit(1)

#例えば最新登録ユーザーを5名取得したいなどの場合は以下でデータを取得できます。
@user = User.order(created_at: :desc).limit(5)
“`

#まとめ
この記事で誤っている箇所や追記したほうが良い点がありましたらコメント欄などでご指摘いただけますとありがたいです!
普段はSQLを使っているのでActiveRecordになれたいところです。

元記事を表示

#Rails + #rspec で let と let! (ビックリありなし) の違いを誤解していた。遅延評価ってなによ?

“`rb
let!(:user) { create :user, name: ‘アリス’ }
let!(:user) { create :user, name: ‘ボブ’ }
let!(:user) { create :user, name: ‘キャロル’ }
“`

こんな風に同じletの名前で複数回実行したら、そのたびletが実行されるものかと思っていたら、違うようだ。
let! で書いても、最後に書いたものだけが実行されるように見える。

“`rb
require “rails_helper”

# There cases all pass
describe do
context do
let!(:user) { create :user, name: ‘アリス’ }

# it create a record before expect “user” in spec
it do
expect(User.count).to eq 1
expect(user.name).to eq ‘アリス’

元記事を表示

【Rails】Gemfile,Gemfile.lockの~>とか<とか>=の意味

`>=`くらいはわかるけど`~>`の意味がわからなかったのでメモ

# 1.0.0のみ記載がある場合
バージョン1.0.0に固定

# >= 1.0.0とある場合
1.0.0以上のバージョンが必須

# >= 1.0.0, < 2.0.0とある場合 1.0.0以上、2.0.0未満のバージョンが必須 # ~> 1.0.0
1.0.0以上で利用可能で、1.0.9などは問題なし。
1.1にバージョンが上がると利用不可。

#バージョン指定無し
最新版をインストール

元記事を表示

Railsチュートリアル 第12章 パスワードの再設定 – パスワードを再設定する

# ここまでに実装してきたものと、次に何を実装するか

* [PasswordResetsリソース](https://qiita.com/rapidliner00/items/471af882e1fd66ddc9c9)
* [PasswordResets#createで、メールアドレスが無効な場合の処理をテスト駆動で実装していく](https://qiita.com/rapidliner00/items/974187773b181bda8004)
* [PasswordResets#createで、メールアドレスが有効な場合の処理をテスト駆動で実装していく](https://qiita.com/rapidliner00/items/4f31103f4fb4ffdef81f)

ここまでの実装により、PasswordResetsコントローラーの`new`アクションおよび`create`アクションに対する実装が完成しました。次に必要となるのは、同じくPasswordResetsコントローラーの、`edit`アクションおよび`update`アクションに対する実装です。

#

元記事を表示

【Rails】Sprockets概要

#Sprockets概要
Asset Pipelineの基盤。
Assetファイルはjs、css、image等の直接railsに関わらないファイルを管理するために導入されているライブラリ。

##Sprocketsの役割

– Assetファイルへのパスの管理
– Assetファイルの圧縮
– Assetファイルの結合
– Assetファイル間の依存性の解決
– Assetファイルのコンパイル

##Assetの読み込み

Sprockets次のマニフェストファイルを読み込み、Assetを読み込む。
“app/assets/stylesheets/application.css”
“app/assets/javascripts/application.js”

マニフェスト定義は次のコードにあるようにコメントアウトして「ディレクティブ=引数」と書く。
.cssも.jsも同じようにコメントアウトの後に書くようにする。

“`app/assets/javascripts/application.js

//= require rails-ujs
//= require actives

元記事を表示

RailsAdminと遊ぼう~カスタマイズ戦記~

この記事は[ウェブクルー Advent Calendar 2019](https://qiita.com/advent-calendar/2019/webcrew)の17日目の記事です。
昨日は@yagiyuuuuさんの[Nginx + uWSGI + Python(Django)の環境をdockerで作成する](https://qiita.com/yagiyuuuu/items/7d72db6c54754731855c)でした。

# この記事について
弊社は社内のデータ管理ツールに[RailsAdmin](https://github.com/sferik/rails_admin)を導入しています。
導入に関しては[こちら](https://qiita.com/da-shi/items/aa76afdea3c528a9b128)に過去のアドベントカレンダーで書かれた記事があります。
本記事は、RailsAdminを利用していく上でたまったり社内で共有されている知見や運用中に直面した問題のトラブルシューティングについて書こうと思います。

## テーブルの主キーをid以外にしたい

元記事を表示

書籍『Ruby on Rails4アプリケーションプログラミング』をRails5で強行した時にハマった箇所まとめ

タイトルの通り、著:山田祥寛「Ruby on Rails 4アプリケーションプログラミング」を、Rails5で強行して一通り行った際にハマった箇所を書き出しました。

## 平文のrender

平文を書き出す`render`は、Rails4だと`render text`ですが、Rails5では`render plain`に変更されています。

* `render text` -> `render plain`

## Destroyできない

[外部キー制約でハマったので(rails) – Qiita](https://qiita.com/kemako/items/e98174b9747e0b2c75a6)

“`ruby
# 変更前
has_many :reviews

# 変更後
has_many :reviews, dependent: :destroy
“`

### 8.3.2ビューヘルパーのテストができない

なぜか、testフォルダに、`<>_helper_test.rb`があるはずと書かれているが作成されていない。

“`bash
dynamac:railboo

元記事を表示

Rails6 ログアウト機能作成中にルーティングに問題ないのにエラーが出た話

# 目的

– ログアウト機能作成中にルーティングに問題は無いのにルーティングエラーが出た時の話をまとめる。

# 結論

– ログアウトボタンを押下した時の設定で`method`を`post`に指定していなかった。

# エラーまでの経緯

– ログアウト機能を作りたかった。
– Bootstrapを用いたheaderにログアウトボタンを作成し、押されるとルーティング経由でコントローラのアクション内で `session[:user_id]`に`nil`を入れてログアウト処理を行うものだった。
– 下記に各ファイルの一部の抜粋を記載する。
– headerのビュー

“`

“`
– ルーティング

“`
post “logout” => “users#logout”
“`

– コントローラのアクション

“`
def logout
session[:us

元記事を表示

[Rails] アクションでレイアウトを出し分ける

段階フォームにて、初期の画面とそれ以降の画面とでは共通レイアウトを出し分けたい。

“`ruby:register.rb
class Register
def screen_1
layout ‘register/login’
end

def screen_2
layout ‘register/profile’
end

def screen_3
layout ‘register/experience’
# もし条件式がfalseだったらscreen_2にレンダリングする時はrenderに複数渡せる
if false
render :screen_2, {:layout => ‘register/experience’}
end
end
“`

元記事を表示

【rails】他のモデルのDBにimageを保存する方法

##記事投稿の理由
保存時に他のモデルに対してデータを保存する方法がわからず苦労したので、備忘録として残します。
今回はcarrierwaveを使用します。

###環境
rails 5.0.7
carrierwave

carrierwaveの導入に関しては参考になる記事を記載しておきますので、こちらを参照ください。
https://qiita.com/STHEXA/items/05a492bd9cf4cf31ba98

###方法

今回はproductのコントローラーとモデル。
imageのモデルを使用いたします。

###実装
バリデーションをかけると保存できなくなるようなので、presence:trueは記載しないで下さい。

“`models/image.rb
class Image < ApplicationRecord belongs_to :product # モデルを保存できなくなるのでpresence: trueは記載しない end ``` ```models/product.rb class Product < ApplicationRecord

元記事を表示

Pay.jp導入手順~ユーザー登録と同時にカード情報を登録する方法::Ralis~

## はじめに
### 目的
Payjpを導入し、ユーザー登録と同時にカード情報を登録する
### 前提
– Railsでの実装
– deviseの導入が済んでいる
– hamlでの記載(gem ‘haml-rails’)をする

注:フリマアプリのコピーサイト作成の為、ビュー(詳細)は省略します
  また、登録画面はウィザードを使用しています
## 全体の流れ
– Payjpのアカウント作成
– gem ‘payjp’導入
– gem ‘dotenv’導入*しなくてもいい
– payjp読み込みの記述
– viewの設定
– JavaScriptの作成
– modelの作成
– コントローラーの設定
– ルーティング設定
– 登録の確認
– 次回 => 購入手順

## 1.Payjpのアカウント作成
Payjpの公式HPへとび、アカウントを作成する
https://pay.jp/
作成後、サイドバーのAPI内にあるキーを見つける

スクリーンショット 2019-12-16 23.23.58.png RailsのAPIでリクエストに冪等性を持たせられるように実装してみた

この記事は[ギルドワークスのアドベントカレンダー](https://adventar.org/calendars/4265)の17日目です。

業務で冪等なAPIの実装を行う場面があったので、そのとき調べたものをまとめてみます。

## 冪等とは(冪等性と安全性)
[Webを支える技術(7章:HTTPメソッド)より](https://www.amazon.co.jp/dp/4774142042/ref=cm_sw_em_r_mt_dp_U_Dgd9DbWPZG8JK)

冪等:ある操作を何回行っても結果が同じになること
安全性:操作対象のリソース状態に変更を加えないこと

| |安全性あり |安全性なし |
|:—:|:—:|:—:|
|冪等 |GET、HEAD |PUT、DELETE |
|冪等ではない | |POST,PATCH |

## 冪等なAPI
[Stripeのブログ記事](https://stripe.com/jp/blog/idempotency)を読んで、冪等なAPIの設計について調べてみました。

### すべてのAPIのリクエスト

元記事を表示

フリーランスSNSをツクール2.0

#はじめまして
はじめましてって書いていいのか分からないですが、初投稿になります。
多分、6年くらい前(railsを触りはじめた頃)に技術系ブログに大変お世話になって、自分も何か書きたいと思っていたんですが、qiitaは、敷居が高い(ガチエンジニアしか書けない)って思い込み?があって、はてブロに書いていました。
そんな自分が、qiitaに書く事がくるとは感無量です。(と言っても書く事がない。。

少し自己紹介させてもらうと、Sierとメーカー系の子会社に約10年くらいいて、その後ベンチャーをウロウロしていました。学んだ(気付いた)のは、自分はまともなコードが書けないという事です。

##自分の技術論?
正直、プログラミングは努力ではできるようにならないです。
正確にいうと、努力で仕事をこなせる程度には書けるようになりますが、センスがある人とない人の差はどれだけ積み上げようと埋まらないです。「エンジニア未経験から年収1000万」ってフレーズよくみますけど、ほぼ未経験から1年くらい年収700万くらいになった人なら知っていますし、あながち嘘じゃないと思います。

急成長する人は、成長する能力

元記事を表示

Capistrano自動デプロイ中の「ArgumentError: Missing required arguments: aws_access_key_id, aws_secret_access_key」エラー

こんにちはこんばんは!
駆け出しエンジニアバンドマンのミナミ(@minami_genkiboy)です。

今日もハマりにハマったエラーを共有します。

# 作業環境
・ruby on rails 5.2.4
・AWS EC2
・nginx
・unicorn
・MySQL

# 経緯
現在取り組んでいるのはメル○カリのコピーアプリ作成。

capistranoで自動デプロイを行うため、ローカル環境で以下のコマンドを実行しました。

“`
$ bundle exec cap production deploy
“`

ターミナルとにらめっこしながらデプロイの進行状況を固唾を飲んで待つこの時間。

極度の緊張により寿命が縮んでいくのが分かります。

イヤ〜な予感にさいなまれ、満を持して、ほらきた!

真っ赤な字で

**DEPLOY FAILED!**

何度見ても慣れないものです。

内容はこちら↓

“`
02:27 unicorn:start

01 master failed to start, ch

元記事を表示

ラインみたいなwebアップリケーションを作ろう!! 3~4日目

#はじめに
この記事は、2019/11/1からプログラミング学習を始めた学生がプロのプログラマーになるまでのアウトプットする為の書き込みの場である。

#ユーザー登録手順

1、deviseのインストール
2、userモデルを作成する
3、deviseのビューファイルの追加
4、サインアップ機能の追加
5、ユーザー情報編集機能の追加
6、サインアウト/サインイン機能の追加
7、フラッシュメッセージの表示k脳の実装

##1、deviseのインストール
Gemfileの最後の行に追加

“`Gemfile

gem ‘devise’
“`

bundle install
Rails g devise:install

##2、userモデルを作成する
**①モデルの作成**

Deviseのモデル作成は通常のモデルさ悪性方法と違います

**通常**

Rails g model

**devise場合**

Rails g devise user

**補足**

deviseで使用するモデルは、rails g devise <モデル名>コマンドで作成できます

**②作成

元記事を表示

一部のviewでしか、表示させたくないものがあるときの対処法 if

## URLごとに表示を変えたいとき

request.path.include?()を使うと良い。()の中の文字がURLに入っているかいないかを判断する。

“`erb

<%if request.path.include?("mypage")%>
 

<%end%>
“`

参考 https://qiita.com/Yohei_Shiina/items/ed39dfd74895d54f3cf2

元記事を表示

学びメモ(12月)

学んだことを残していきたいと思います。参考にさせていただいた記事を書いた方々には心から感謝します。

#[【SQL】実行の順序](https://qiita.com/yurina0402/items/78ae1f536b6755d6221a)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/141176/d08a0657-fe0e-eb67-c765-93b6e1e6d842.png)

#オブジェクト指向について
[オブジェクト指向のイロハ](https://qiita.com/nrslib/items/73bf176147192c402049)

#gitのcherry-pickについて
[git cherry-pickを完全マスター!特定コミットのみを取り込む方法](https://www.sejuku.net/blog/71544)

#[git pullの取り消し](http://www-creators.com/archives/5314)
#[]()

#[Rubyで配列内の

元記事を表示

Rails API Client比較

Ruby on RailsにてAPI Clientとして使用できるgemについてどんなものがあるのか簡単に概要をまとめてみました。

## ActiveResource
Railsの標準機能としてRails2にて登場しましたが、Rails4以降は標準機能から分離されています。
REST APIを使用するRailsアプリケーションにおいて、ActiveRecordのような振る舞いで実装が可能です。
もともと標準機能として存在していただけに、使い方に関する文献は多いです。
https://github.com/rails/activeresource

## Her
ORM機能とHTTP Client機能が分離されているのが特徴です。
Her::Modelを使用するモデルにincludeすることで、ActiveRecordのように操作することができます。
https://github.com/remiprev/her

## ActiveRestClient
Herよりも後に登場したgemです。これもActiveRecordのようにモデルを操作することができます。
wikiにはActive

元記事を表示

OTHERカテゴリの最新記事