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

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

Docker初心者がよく使うDockerコマンド集

#はじめに
Dockerを使い始めると、今までローカルで使えていたコマンドが使えなくなったり、新しいコマンドが増えたりして困惑すると思います。
そこで、この記事ではDocker上でローカルのコマンドを使うための方法や、Docker上で使えるようになるコマンドについて、まとめていきます。

#対象者
・Dockerやdocker-composeを使い始めた人
・Dockerで使えるコマンドが、いまいちよく分からない人

#環境
MacOS Catalina 10.15.7
Docker 19.03.13
Rails 5.2.4.4

#コマンド集
Railsの場合、“bundle exec“で使っていたコマンドは、そのままでは使えなくなります。
すべて“docker-compose run web“を先頭に付けるようにしましょう。

###<例>
“bundle exec rspec“
 ↓
“docker-compose run web bundle exec rspec“

###新しくimageをつくりたい
“docker-compose build“

“`

元記事を表示

Rails Tutorial 拡張機能のメッセージ機能を作ってみた(その5):削除機能

Rails Tutorialの第14章にある、メッセージ機能を作る件の続きです。

前回までで受信したDMが表示される機能ができました。
今回はDMを削除する機能を作ります。

###DMを削除する機能の設計

DMを削除する機能を作ります。13.3.4を読みます。
micropostは自分が投稿したもののみ削除できました。DMでは、自分が受信したDMのみ削除できるようにします。削除はモデルを作った際に決めたとおり、deletedフラグをTRUEにします。

###destroyアクション作成
destroyアクションを作ります。
「リスト 13.52: Micropostsコントローラのdestroyアクション 」を読みます。
削除対象のDMは、現在のユーザーが受信者になっているかをチェックします。
consoleで試してみます。

“`
>> user1 = User.third
=> #> user1.received_dms
=> #

元記事を表示

aws cloud9 ruby on rails migration 後にしたこと

まずは “`bundle install“`

# mysql が動かない。
– “`sudo apt-get install libmysqlclient-dev “` して mysql を入れる
– bundle installを再実行.. ok
– c9 の 設定のままだと、 root@local.host につながらない、とかなった。
– db に root接続して、user を作り (user をつくるところは、https://www.lucidar.me/en/aws-cloud9/install-mysql-and-phpmyadmin-on-aws-cloud9/ を参考にした)
– その情報をもとに database.yml を設定変更

“`
username: <%=ENV['C9_USER']%>
# password: <%=ENV['C9_USER']%>
“`
もともとこんな感じになってたので、設定変更。
これで、 rails db:create, db:migrate … ok

# rails server を動かす IP とか若干

元記事を表示

【Rails】備忘録:戻るボタンを実装する方法:複数ページの場合

## railsで「前のページに戻る」ボタンを実装する方法

戻るボタンの一番ベターな方法が、以下の処理です。

“`
= link_to ‘戻る’, :back
“`
ボタンで実装する際は、erbの場合例えば

“`erb
<%= link_to :back do %>

<% end %>
“`

hamlで書くと

“`haml
= link_to :back do
%button 戻る
“`
とするといいようです。

しかし、これでは3ページ以上ある場合、そのうちの最後から2ページしか遷移しなくなります。
(無限ループ状態・・・)

## railsで「複数のページ(元辿ってきたページ)に戻る」ボタンを実装する方法

そのため、無限ループ状態にならないように

“`
= link_to ‘戻る’, ‘javascript:history.back()’
“`
という処理を書いていきます。

:historyとあるようにこれは”元辿ってきた過去の”ページから戻るイメージです。

では同じようにerbで実装する際は

元記事を表示

学び直し Part2

mada

元記事を表示

Rubyのコードを書く上で知っていると便利なこと

Rubyのコードを書く上で便利なことを参考書で学びましたので
勉強の記録用として記事にしてみました。
#%記法
##%w

“`ruby
> ary1 = [‘apple’, ‘banana’, ‘orange’]
> puts ary1
=> [“apple”, “banana”, “orange”]

> ary2 = %w(apple banana orange)
> p ary2
=> [“apple”, “banana”, “orange”]
“`
すべての要素が文字列である配列は、通常の配列記法の他に、「%w」というキーワード使って書くことができます。

##%i

“`ruby
> ary1 = [:apple, :banana, :orange]
> puts ary1
=> [:apple, :banana, :orange]

> ary2 = %i(apple banana orange)
> p ary2
=> [:apple, :banana, :orange]
“`
すべての要素がシンボルである配列は、

元記事を表示

【Rails】Gemを初公開しました

# Gemを初公開しました

[ask_year_month](https://rubygems.org/gems/ask_year_month)という、

**レシーバが何月なのか、**

スマートにチェックするメソッドを生やしただけのGemを公開しました。

例えば、

“`rb
Time.current.month == 12
#=> true
“`

よりも、

“`rb
Time.current.december?
#=> true
“`

のが見やすいよなーという所から。

ご興味がある方は良かったら使ってみてください。

## RubyGems
https://rubygems.org/gems/ask_year_month

## GitHub
https://github.com/mah666hhh/ask_year_month

## 参考記事

[RailsプラグインGemの作成方法、RSpecテストまで含めたrails pluginの作り方](https://easyramble.com/create-rails-p

元記事を表示

Rails コードを書く場所

##目的
最近、業務でなんとなくメソッドを使用していたが
自作する機会も増えてきた
しかし、メソッドを記述する場所を迷ってしまうため
アウトプットして、記憶に定着させる

##しかるべきところにコードを書く
おなじみ、書籍 現場Rails 10-7 より抜粋
>Railsが標準的に用意しているコントローラー、モデル、ビュー、ヘルパー、
ルーティングといった代表的な場所について、(比較的)適切な場所を選ぶことが重要だと
いうことを指しています

##コントローラー
コントローラーの役割は、クライアント(ユーザー)から受け取ったリクエストを
適切にレスポンスを返すための窓口を担う

一般的に、
リクエストをもとにモデルのビジネスロジックを呼び出して
その結果をビューに引き渡す

ユーザーのニーズを反映していけばいくほど、入力される情報が
複雑になっていく

モデルから値をとりだしたり、事前処理を行う必要がでてくる

画面とロジックが入り混じり、複雑で肥大
いわゆる`fat controller`になりやすい

・ビジネスロジックを書いてはいけない

##モデル
・取得したオブジェクトに対し

元記事を表示

DockerでRails6(MySQL, Webpacker)を動かす。

Docker練習第二弾。Rails5は結構やっていたのでRails6を動かしてみようと思います。

## 環境
– Docker 19.03.13
– docker-compose 1.27.4
– Windows10 Pro

## ディレクトリ構成

“`
rails_test/
┝ Dockerfile
┝ docker-compose.yml
┝ Gemfile
┝ Gemfile.lock
┝ environments/
└ db.env
“`

## Dockerfile

“`Dockerfile:Dockerfile
FROM ruby:2.6

RUN apt-get update -qq && \
apt-get install -y build-essential \
nodejs

RUN curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | apt-key add – && \

元記事を表示

ActiveStorageのバリデーション

## はじめに
[Rails5.2から導入された](https://railsguides.jp/5_2_release_notes.html#active-storage)[Active Storage](https://railsguides.jp/active_storage_overview.html)は設定が簡単でとても導入しやすく、シンプルな機能を備えていて、少し使ってみた感じだとよい機能だと思っています。
ただ、実運用で使おうとすると、バリデーションの機能がなくて、惜しい感じです…。

そこで、自分が最低限欲しいと感じた、いくつかのバリデーションを作ったので紹介します。

[サンプルアプリケーションのコードはこちらです。](https://github.com/ken1flan/active_storage_validation_sample)
Rails5.2で書いていますが、ほぼ同じものを6.0に持ってきても動きます。

## 必須
入力フォームで、ファイルの添付を必須強制したいときはごく普通にあると思います。
ただ、普通のpresenceのバリデーションは使えなかっ

元記事を表示

PDF出力してみたいんじゃ! 【Thinreports + Rails】

どうも。とある六本木一丁目にある会社のエンジニアです。
というわけで [SmartHR Advent Calendar 2020](https://qiita.com/advent-calendar/2020/smarthr) の5日目だぜ。

## 目的
弊社プロダクトのPDF出力に [Thinreports](http://www.thinreports.org/) を使用しているのでお友達になりたかった。

## 使うもの
Thinreports + Rails でやっていきます

## ゴール
タイトルと本文がある書類をPDFで出力できるようにする!
簡単!

## やっていこう
とりあえず rails new

“`
rails new thinreports_demo –skip-test
“`

gem 追加

“`ruby
gem ‘thinreports’
“`

“`
bundle install
“`

### サンプルPDF出力する準備
ThinreportsでのPDF出力には `tlf` というフォーマットのデータが必要なので後々用意する必要があ

元記事を表示

DockerでRailsの環境構築をする

初心者がDockerでRailsの環境構築をしたのでメモとして残します。

#Dockerのインストール
Dockerの公式ホームページからget startedをクリックしてDocker Desktopをクリックしダウンロードします。

Dockerの公式ホームページ https://www.docker.com/

ダウンロード後インストールが完了したらターミナルで
docker run hello-worldと打ちます。
以下のように表示されたらインストール成功です。

“`ターミナル:ターミナル
Hello from Docker!
This message shows that your installation appears to be working correctly.

To generate this message, Docker took the following steps:
1. The Docker client contacted the Docker daemon.
2. The Docker daemon pulled the “hello

元記事を表示

[Rails]Stripe Checkoutを利用して定期決済機能を実装する

# はじめに
この記事では、Stripeを用いた定期決済機能を実装します。
決済には、Ruby on RailsとCheckout Sessionを利用します。

# Stripeとは

決済サービスです。

WebサイトやWebアプリケーション、ネイティブアプリに決済システムを導入できます。似たようなサービスには、PayPal, Pay.JP, Omiseなどがあります。

Stripeは機能がとにかく豊富で、多彩な決済システムを構築できるのが特徴です。

# 用語整理

**Checkout**
Stripeの決済ページには、Checkout と Elements の2つのタイプが用意されています。

Checkout:Stipeが用意した決済専用ページ。
Elements:決済フォームとシステムだけ用意され、決済ページはカスタマイズできる。

サクッと決済ページを作成したいときはCheckoutを利用するといいですね。定期決済、都度決済どちらにも対応しています。

**Session ID**
今回はセッションを用いた決済システムを構築します。こちらの決済システムでは、レスポンス

元記事を表示

RailsアプリのCI/CDを”GitHub Actions”で作ってみた

## 記事のきっかけ
初学者ながら自身のRailsアプリにCI/CDを入れるぞ❗️と考えました。
最近話題になっているGitHub Actionsってなんだろう❓
GitHubでCI/CDも管理できるらしい。凄い❗️
その気持ちから、他のCI/CDサービスと自分なりに比較選択をし、
GitHub Actionsを選択。実装に突き進みました。
本記事はその時のコード記録と実施内容の忘備録を兼ねて記事にしました。

## アプリ開発環境
– Rails v6.0.3.4
– Ruby v2.6.6
– PostgreSQL v12.4
– Docker-compose v1.26.2
– Docker v19.03.12

## GitHub Actionsとは
言わずも知れた開発管理必須ツールであるGitHub。
そのGitHubが提供するCI/CDサービス。
GitHubと高度に連携されており、設定によりGitHub上のコードを
自動でビルド・テスト・デプロイが可能。

## なぜGitHub Actionsなのか?
私なりにCIを選ぶにあたって他のサービスと検討しました。
他のサービ

元記事を表示

Mysql2::Error: Field ‘****’ doesn’t have a default valueに二回もハマった話

Mysql2::Error: Field ‘tag_name’ doesn’t have a default value
とは、NOT NULL制約をかけているにも関わらず値が入っていないよーといった感じのエラーです

“`ruby
class CreateTags < ActiveRecord::Migration[6.0] def change create_table :tags do |t| t.string :name,null:false t.timestamps end end end ``` とかでカラムに,null: falseで必ず値が入るように設定していたと思います なので、rails側でも ```ruby validates :name,presence: true ``` と、バリデーションをかけていたと思います。 というわけで、まず考えられる原因が #### マイグレーションファイルでnull: falseとNOT NULL制約を設けていたにも関わらず、Rails

元記事を表示

railsのdeviseではhas_secure_passwordはいらない

deviseを使用しており、password_digestを使おうとuserモデルにhas_secure_passwordを追加したら、「undefined method `password_digest=’ for #<> Did you mean? password_digest」というエラーが出た。

##結論
deviseはhas_secure_password の代わりにencrypt_passwordを使用している。
よって、userモデルにhas_secure_passwordを追加する必要はない。

マイグレーションファイルを見てみると、

“`
t.string :encrypted_password, null: false, default: “”
“`

と確かに書いてあった。

参考:https://qiita.com/kents1002/items/4079e3d05d322febe00e

元記事を表示

【Rails】ActionMailer のテストで Mail::Matchers を使う

## はじめに

[CBcloud Advent Calendar 2020](https://qiita.com/advent-calendar/2020/cbcloud) の2日目の記事です。

本記事では、メール送信の単体テストの際、ActionMailer が依存している [Mail](https://github.com/mikel/mail) に含まれている `Mail::Matchers` を RSpec のマッチャとして利用する方法を紹介します。

また、比較対象として、以下の2つも同時に記載します。

1. Rails Guides に記載されているテスト方法
2. RSpec のドキュメントに記載されているテスト方法

最後に、`Mail::Matchers` を使った例の紹介と、実際に動くサンプルコードを添付します。

## 動作確認環境

* ruby 2.7.2p137 (2020-10-01 revision 5445e04352) [x86_64-darwin19]
* actionmailer (6.0.3.4)
* rspec (3.10.0)

##

元記事を表示

Sprockets::DoubleLinkError

初心者です。備忘録のため。残します。
超基本的な内容です。
## エラー内容

“`ruby
Sprockets::DoubleLinkError
“`

Rails にて erb ファイルを作成して、表示しようとしたら上記発生。ターミナル確認すると以下記述あり。

“`ruby
ActionView::Template::Error (Multiple files with the same output path cannot be linked (“style.css”)
In “/Users/○○/git/photo_submission/app/assets/config/manifest.js” these files were linked:
– /Users/○○/git/photo_submission/app/assets/stylesheets/style.css
– /Users/○○/git/photo_submission/app/assets/stylesheets/style.scss
):
“`

## 原因

調べてみたら、Rails

元記事を表示

RSpec FactoryBotのアソシエーション

#はじめに
**FactoryBot**のアソシエーションについてメモしていきます

#アソシエーションの仕方
例えば、`userモデル`と紐付いてる`postモデル`のテストデータが欲しい場合

“`
FactoryBot.define do
factory :post do
content {“Ruby楽しい”}
association :user, factory: :user #アソシエーション
end
end
“`
この場合は`user`の**FactoryBot**も作成してる必要がある。

またこのように省略することも出来る。

“`
FactoryBot.define do
factory :post do
content {“Ruby楽しい”}
user #省略
end
end
“`

#最後に
まだまだ勉強中なので訂正などありましたらご指摘いただけると幸いですm(__)m

元記事を表示

【AmazonLinux2】Railsアプリケーション新規作成 rake db:createまで

# 初めに
AmazonLinux2でRailsアプリケーションを新規作成した際に、いろいろとエラーにハマったため、黙示録として書いています。

#環境
OS:AmazonLinux2
Ruby:ruby 2.6.3p62 (2019-04-16 revision 67580) [x86_64-linux]
Rails:Rails 5.0.0
DB:Mariadb

# 手順
前提として今回は、AWS(cloud9)でAmazonLinux2での開発を想定してます。またAWSのenvironmentの作成はできているものとします。

######Ruby, Railsのバージョンの確認(AWSでは環境構築がされているため)

“`
$ ruby -v
ruby 2.6.3p62 (2019-04-16 revision 67580) [x86_64-linux]

$ rails -v
Rails 5.0.0
“`

######RubyのライブラリであるGemを管理するためのGem(bundler)をinstallする

“`
$ gem install bundler
Fe

元記事を表示

OTHERカテゴリの最新記事