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

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

【開発ログ①】怒涛のポエム回

# はじめまして
この記事を読んでくださりありがとうございます。
はじめまして、いりふねと申します。

私は、2020年4月6日から「[TECH CAMP](https://tech-camp.in/)」という
プログラミングスクールに通う75期生です!
スクールに通い(現在はオンライン学習中)、
早1ヶ月が過ぎて、応用カリキュラムも終わりました。

この1ヶ月間でずいぶんとできることが増えました。

「だれでも簡単ホームページ」みたいなタイトルの本で
挫折していた私ですから、スクールには本当に感謝です。

# 人生初、個人アプリの開発
さてさて、そして、ついに個人開発です。

「ここからはメンターに質問できません」と言われた時の
緊張感は凄まじかったですが、ワクワクしますよね。
自分で決めた道にチャレンジしてるなって感じがします。

それで、これまで「Qiita」を使って来なかったので、
せっかく何かを始めるのであれば、
アウトプットの場をということで、開発ログを始めました。

# 軽く自己紹介
自己紹介します。32歳の蠍座です。はい、以上!
というわけにもいかないので、以下経歴です

元記事を表示

【Haml】 rubyがあっても、音速でhtmlを作れる

## 目的
hamlが苦手で、全く書き方が分かっていなかったので自分のためにまとめる

## Hamlとは
HamlとはHTML abstraction markup languageの略で、より簡単にHTMLを生成できるように作られたテンプレートエンジンです。

### 記述例

“`html.erb

<%= post.title %>

<%= post.subtitle %>

<%= post.content %>

“`

“`html.haml
%section.container
%h1= post.title
%h2= post.subtitle
.content
= post.content
“`

### 特徴

– 閉じタグ不要
– rubyのend不要
– インデントで階層構造を表す

つまりerbよりシンプルに、簡単に、短く記述できる。
アップ

元記事を表示

Windowsでdockerを使ったrailsの環境構築で役立った記事リスト

基本的には個人的なメモとして紹介する。
他にも同じ状態になった人も参考になると思う。

以前、railsの学習をrailsチュートリアルで行ったがtestのあたりで、エラーの連続、さらにはwindows特有のエラーが多発、最後にはgemのコンフリクトを起こして挫折してしまった。
それから1年ほどたち、[フルスタックエンジニアが教える 即戦力Railsエンジニア養成講座](https://www.udemy.com/course/rails-kj/)が割引してたので購入して進めてみた。

この講座はDocker内で環境構築(rails + MySQL5.7)をするので、同じ内容で進められるというものだった。進めてみるとWindows特有のエラーで止まった。
これは[このサイト](https://crieit.net/posts/Windows-Docker-Rails-sprockets)で解決方法が紹介されていたのですんなりクリア。

そして、次第にrailsチュートリアルのようにherokuにアップしたい欲が出てきた。
そこでherokuを調べてみると、MySQLは有料版でしか使えな

元記事を表示

RSpecを用いたRails ApiのTest

**環境**
ruby:2.6.5
rails:6.0.2
macOS:Mojave(10.14.6)

**事前準備**
‘rspec-rails’,’factory_bot_rails’のgemを入れておく

“`ruby:Gemfile
group :development, :test do
#– 省略 —
gem ‘rspec-rails’, ‘~> 3.6’
gem ‘factory_bot_rails’
end
“`

#RSpecを用いたApiのテスト
apiディレクトリ内にコントローラを入れている記事を見つけられなかったので
投稿します。今回はgetのテストに絞っています。

*subjectsはnameカラムだけ持つテーブルです。*

**controller**

“` ruby:app/controllers/api/subjects_controller.rb
module Api
class SubjectsController < ApplicationController def index

元記事を表示

文系学部卒・プログラミング完全未経験者がRailsチュートリアルを完走した話

先日、無事にRailsチュートリアルを完走しました。

巷で「挫折率が高い」と言われている通り、正直なところ自分も途中で何度か心が折れかけました・・
なんとか挫折せずに完走できたので、チュートリアルに取り組むにあたって自分なりに気をつけたこと等、備忘的に書き連ねていきます。

#事前準備
文系学部卒、かつプログラミングと一切無縁の仕事をしているため、プログラミングの周辺知識がゼロの状態で学習を開始しました。
(HTMLという四文字の単語が存在することを初めて知ったレベルでした。「サーバー」に関しては「地下で機械音を発しながらよくわからない処理をしている黒くて大きな機械」という認識でした)

「こんな状態でいきなりチュートリアルに挑戦しても秒殺されるだけだな・・」と思い、最初の基礎固めとして、以下2つに取り組みました。

①「Progate」
有名オンライン学習サービス「Progate」で、HTML、CSS、Ruby、Railsをそれぞれ2周しました。
無料会員のままだと受講可能レッスンが少ないので、自分は課金して有料会員になりました。
1,000円/月で各言語の基礎を叩き込めるなら、安

元記事を表示

Railsで検索機能を作る

##経緯
twitter,facebookなどのSNSの検索機能が便利で助けられているので、作成してみたい。
###アウトプットのイメージ
作りたいのは、検索ワードを打つと、ヒットした文章を拾ってくれる機能です。
![tweet.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/496707/72639392-75a1-1865-a77f-2be31584b66b.png)
###工程
この機能をRailsで作成するのに必要な工程は、
1.検索ワードをinputするformを作成
2.テーブルから検索ワードがヒットしたレコードを取得
3.一覧画面にHTMLの形で情報を渡す
の流れになると思います。
####1.検索ワードをinputするformを作成
投稿機能のひな形を作った後とします。
検索ワードは保存する必要がありません。
そのような場合、form作成にはform_withの:scopeオプションを活用すると良いそうです。

“`Ruby:application.html.erb
<%= form_w

元記事を表示

dockerでrails+mysql環境を作ってみよう!

#dockerでrails+mysql環境を作ってみよう!

*dockerとrubyはインストール済という前提です。

##GemfileとGemfile.lockを用意します。

今回はrailsバージョン6.0.0以上をインストールします。

“`Gemfile:Gemfile
source ‘https://rubygems.org’
gem ‘rails’, ‘6.0.0’
“`

Gemfile.lockの中身は空です。

##Dockerfileを作成します。

“`dockerfile:Dockerfile
FROM ruby:2.6

RUN curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | apt-key add – \
&& echo “deb https://dl.yarnpkg.com/debian/ stable main” | tee /etc/apt/sources.list.d/yarn.list

RUN apt-get update -qq && apt-get insta

元記事を表示

ransackable_scopeに自由を!

Railsで検索画面作るなら、Ransack ですよね。
めっちゃ便利。
あなたなしには生きていけない:relaxed:
もうあなたなしに、地道にcontrollerとmodelいじってた頃のことなんて、思い出せない…

検索機能を追加したい。
特に込み入った条件の… というとき、皆さんどうされます?

私は、ransackable_scopeを使います。

1. ActiveRecord で scope 作り
1. それをransackからの使用を許可します `#ransackable_scopes`

詳細は、↓に譲ります(ry
[Ransack で ActiveRecord の Scope を利用して検索を行う方法](https://qiita.com/ruzia/items/f6003547ca18377a1508)
[公式](https://github.com/activerecord-hackery/ransack#using-scopesclass-methods)

この2番、面倒くさくないですか?

ransackでは、どのassociation, scop

元記事を表示

【Sass】【Rails】 画像&背景画像を入れる

## 目的
railsアプリ を作っている時に背景や画像を入れるやり方がわからなかったので

##前提
載せたい画像をapp/assets/imagesに配置する
app/assets/images/materialに画像の素材を格納

##画像
“`
= image_tag “material/app-store.svg”, class:”image”
“`

##背景画像

“`
background-image: url(material/pict/bg-mainVisual-pict_pc.jpg) ;
“`

ポイントは載せたい画像をapp/assets/imagesに配置することです。
images以降の相対パスを記述すればいけます。

スクリーンショット 2020-05-08 0.05.03.png【Ruby/Rails】getsってなんの略?to_iってなんて読む?

## はじめに
英語が大の苦手である私がプログラミング学習で苦戦したのが、タグやプロパティ、メソッドなどの読み方です?(現在進行形)

プログラミング学習始められた方の参考に少しでもなれれば嬉しいです??
今回はRuby、Railsのメソッドやその他読みにくいと思ったものの読み方などをまとめていきます!

※読み方は発音などにより違うことも大いにありますので、100%正解ではないです?‍♀️
※見やすさのためRubyとRails分けてますがどっちでもつかうものもあります!

## :baby: Ruby

### puts
プッツ
puts string(文字を表示する)の略

### gets
ゲッツ
get string(文字を取得する)の略

### chomp
チョンプ
chomp = 噛み切るの意味

### def
デフ
define(定義する)の略

### elsif
エルシフ
else if(そうでなければ)の略

### else
エルス
else = さもなくば

### length
レングス
length = 長さ

### to_s
トゥーエス
to Str

元記事を表示

ransack で一番スマートに AND/OR検索

initializer で頑張ると、いろいろと検索条件が追加できる。
 というのを、今日気づく。ひたすらソース読解。

どうしてもcontrollerは汚したくない。
全画面的に使う条件なので猶更。
かといって、JSで頑張るのはもう嫌…。
というわけで、ransack自体をチューニング。

結果はこちら。
大成功 :rainbow:

“`
/config/initializers/ransack.rb
Ransack.configure do |config|
# tokenize検索 (AND/OR)
config.add_predicate ‘contains_all’,
arel_predicate: ‘matches_all’,
formatter: ->(v){ v.split(/[\p{blank}\p{cntrl}\p{punct}\s、・]+/).compact.map {|s| “%#{Ransack::Constants.escape_wildcards(s)}%” } },
type: :strin

元記事を表示

Seed Fu の API を使用する際の Tips

Seed Fu の rake タスクではなく、API を使用する際のアレコレです。

# Seed Fu の インストールや基本的な使用方法

[公式ドキュメント](https://github.com/mbleigh/seed-fu)を参照。

# Tip1: `rake db:seed` された場合にも Seed Fu を実行させる。

`db/seeds.rb` に Seed Fu を使うように書いておくと、 間違って `rake db:seed` された場合にも Seed Fu が実行されるため便利だと思います。
その場合、以下の2点に気をつける必要があります。

## 1. fixture_path を設定

README には Fixtureファイルを探すパスのデフォルトは `db/fixtures` と `db/fixtures/#{Rails.env}` と記載されていますが、
これはrakeタスクを実行した場合のデフォルトです。
`SeedFu.seed` APIを使用する場合のデフォルトは `db/fixtures` です。
そのため、Rails.envに応じたF

元記事を表示

Rspec導入方法

Railsでモデルに設定されたバリデーションの動作などをRspecを用いてテストすることが出来るので、その導入方法をまとめました。

##### インストール

web_console:
テスト環境で動かすと不具合が起きる可能性ありのため、development環境のみ

“`ruby:Gemfile

group :development do
# Access an interactive console on exception pages or by calling ‘console’ anywhere in the code.
gem ‘web-console’, ‘>= 3.3.0’ #追記

group :development, :test do
# Call ‘byebug’ anywhere in the code to stop execution and get a debugger console
gem ‘byebug’, platforms: [:mri, :mingw, :x64_mingw]
gem ‘rspec-r

元記事を表示

Rails6 + PostgresのDocker開発環境を構築

いろんな記事をみてコピペしてみたのですが、どれもうまくいきませんでした。
私がうまくいった方法を記録しておきます。

## ファイルの準備
“`zsh
$ touch Dockerfile docker-compose.yml Gemfile Gemfile.lock
“`
“`Dockerfile
FROM ruby:2.7

RUN curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | apt-key add – \
&& echo “deb https://dl.yarnpkg.com/debian/ stable main” | tee /etc/apt/sources.list.d/yarn.list

RUN apt-get update -qq && apt-get install -y nodejs postgresql-client yarn

RUN mkdir /app_name
ENV APP_ROOT /app_name
WORKDIR $APP_ROOT

ADD ./Gemfile $APP_RO

元記事を表示

Github Actions で Rails の CI をやりたい

# なにこれ?
Github Actions で Ruby on Rails の CI をやりたい、という話をする。ただ、ちょっとマニアックな路線でいこうと思う。

# コード
今回のコードは [Github のレポジトリ](https://github.com/seahal/qiita) にもあります。

### アジェンダ
Github Actions は `.github/workflows/` にあるコードを読んで実行してくれるみたいなので、プロジェクトのルートディレクトリ傘下に前記の階層を作り、その後 `rails_test.yaml` でも作成して CI のコードを書けば、docker-compose up したらローカル環境と同じ条件で rails test がうごく、この記事を書き始めるまでは、そう思っていたのです。

### 何が悪かったのか
コンテナのホスト側とコンテナ側の user id の不一致のせいで、`mkdir` とかが実行されず、テストが実行できなかった。

### 解決した方法
`docker-compose` で起動したときに uid と gid を

元記事を表示

【rails】コメント機能を実装する

###はじめに
僕の質問サイトに回答機能とは別にコメント機能を追加したのでメモとして残しておきます。
初心者なので間違っていたらコメントで指摘していただけると幸いです。

##前提
rails6
ruby2.7.0

questionモデル(投稿モデル)
Userモデル(deviseのもの)
はつくられている前提です。

###コメントモデルを作る

“`shell:
$ rails g model comment comment:text comment_id:integer commenter_id:integer
$ rails db:migrate
“`
カラム名通りcommentはコメントそのもの、comment_idはどの投稿に対してのコメントか、commenter_idは誰がコメントをしたかを保存します。

“`ruby:user.rb
has_many :comments, foreign_key: :commenter_id
“`

“`ruby:questions.rb
has_many :comments
“`

“`ruby:comment.rb

元記事を表示

Rails テストについて 5 (コントローラー編)

#はじめに
テストに拒否反応があるので、まずは整理したいと思います。
整理していくにつれ、拒否反応がなくなってきたかも・・・

少しづつ記事を書いていきます。
[Rails テストについて 1](https://qiita.com/raigakun/items/b88af7e80e64abfedcca)
[Rails テストについて 2](https://qiita.com/raigakun/items/d0d253f6338ce9d89fe5)
[Rails テストについて 3]
(https://qiita.com/raigakun/items/4439cf6615c155b7b489)
[Rails テストについて 4]
(https://qiita.com/raigakun/items/e3e4a979541c321f3ec7)
もうすでにご存知の方、省略の仕方等ご存知でしたら、ご助言願います。

## コントローラーテストで確認したいこと
– アクション内で定義するインスタンス変数の値が期待したものになるかを確認する
– アクションが呼ばれたあと、期待したビューが表

元記事を表示

【Rails 入門】Stripe API

# はじめに
### [stripe](https://stripe.com/jp) とは

**決済代行サービス**です(類似サービスとしては`PayPal`があります)。

具体的に説明すると、stripeのAPIを使う(stripeのサービスプラットフォームを使う)ことで、自身のサービスの決済処理を担ってくれます!

つまり、

– ユーザーにお金を請求してその支払を受け取りたい!
– 「買切り」や「定額プラン」を設定して請求したい!

といったことが可能になります。

私がstripeの特に良いと思ったところは、**ユーザーがstripeのアカウントがなくても支払ができる**ということです。

アカウント作成の手間を省けるのは、UXとして大事な要素だと思います!

また、[ドキュメント](https://stripe.com/docs/api)が読みやすいですね。
英語なので読めない人にとっては辛いかもしれないですが、よくまとまっていると思います(そういった方々のために少しでも記事が参考になれば幸いです)。

そこで今回は、**Railsで処理を行う`Stripe API`(バ

元記事を表示

PumaやSidekiqでメモリが肥大する問題の対処法

RailsアプリケーションでPumaを使ったり、非同期処理のためにSidekiqを使うことはよくあると思います。
アプリケーションを長期運用しているとPumaやSidekiqのメモリ使用量が肥大しOOM Killerにプロセスを殺されたり。なんてことがよく起きます。

# 原因
メモリ使用量が肥大化する原因の一つとして、Rubyのメモリ管理とmallocの仕様(スレッド単位メモリアリーナ)によりメモリの断片化が発生していることが挙げられます。

メモリの断片化であって、メモリリークしているわけではありません。

## 解決策1. Puma Worker Killerを使う
Puma Worker KillerというGemがあります。
PumaのWorkerプロセスが設定したメモリを超えた時に自動でそのプロセスを殺して安全に再起動することでメモリの肥大を防ぎます。
**根本的な解決ではありませんが、環境をいじれない人にとってや有効かもしれません。**
ただPumaのみの解決であってSidekiqの解決にはなりません。

https://github.com/schneems/puma_w

元記事を表示

【Rails】画像の複数登録+プレビュー表示

メルカリのクローンサイト作成にあたり、商品出品ページを実装しました。
今回は、画像登録に関する備忘録です。

# ゴール
![Alt text](https://gyazo.com/898339aeaf5b35bc135f8494dce8f0cc/raw)

**・** 画像をDBに登録する前にプレビュー表示
**・** 画像は最大10枚まで登録可能
**・** 1〜5枚目までは上段、6〜10枚目までは下段に表示させる
**・** 画像は最低1枚以上登録しないと商品出品できない
**・** プレビュー画像を1枚ずつ削除
**・** DBに保存済み画像があればページアップロード時に表示させる

# 実装の考え方
– 画像を1枚アップロードするごとに、新たにinputタグとimgタグを生成
– プレビューとinputタグに同じ番号を振って管理する。
– プレビュー画像と削除ボタンをセットで実装し、削除ボタンをクリックしたら、その番号を持つinputタグを削除する
– DBに保存済み画像にも、削除ボタン、番号を振ったプレビューの表示を行う。

※imgタグの管理番号の整理方法 :

|属性

元記事を表示

OTHERカテゴリの最新記事