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

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

Rails2.7 Rails6 Docker React環境でシンプルCRUD実装

streampackのminsuです。
[以前の記事](https://qiita.com/minsu/items/0ccbafff460e72b13d44)で Docker + Rails + React の環境構築を行いindexページの表示まで行ったのでCRUD機能を追加します。
ですが期間も空いているため、折角なので以前の環境である

– Rails 5.1.4
– Ruby 2.4.1
– mysql 5.7

ではなく、新しい環境で作り直します。

最新版確認
https://rubygems.org/gems/rails
https://www.ruby-lang.org/ja/downloads/

### 作成環境
– Rails 6.0.2
– Ruby 2.7
– mysql 5.7

## ファイルの用意
`Gemfile` `Gemfile.lock` `Dockerfile` `docker-compose.yml` を作成します。

“`:Gemfile
source “https://rubygems.org”
gem “rails”, “6.0.2”

元記事を表示

headerとflashの間にできた謎の余白を消す(Devise, Bootstrap)

#はじめに
先日投稿した[こちら](https://qiita.com/Roy1473/items/b7e6eede261c63ea9216)で
Bootstrap + jQueryを使ってFlashなどの
``をクリックした時にFlashを閉じる機能を実装しました。
ただ、ブラウザ場で確認すると、
Flashが消える前、後、双方で

との間に余白がないようにぴったり合わしているにも関わらず
`

`と`flash`の間に余白が発生していました。

この余白を無くすことができたので紹介します。

#開発環境
– bootstrap-sass (3.3.7)
– devise (4.7.1)
– jquery-rails (4.3.1)
– rails (5.2.4.1)

#前置き (layoutのデザイン)

“`html:header.html

元記事を表示

ユーザーの状態によって表示を変更する方法 Rails

#初めに

Rubyのライブラリの1つである、便利機能のdeviseを使いました

—————————————–

##devise

ログイン機能の実装を簡単にしてくれるgemです

#本題

今回は、ログインしているかしていないかで見せ方を変更したかったので、、、

“`
– if user_signed_in?
.purchase
= link_to ‘購入ページ’,’#’
– else
%p.setumei 親譲りの無鉄砲で小供の時から損ばかりしている。小学校に居る時分学校の二階から飛び降りて一週間ほど腰を抜かした事がある。なぜそんな無闇をしたと聞く人があるかも知れぬ。別段深い理由でもない。新築の二階から首を出していたら、同級生の一人が冗談に、いくら威張っても、そこから飛び降りる事は出来まい。弱虫やーい。と囃したからである。小使に負ぶさって帰って来た時、おやじが大きな眼をして二階ぐらいから飛び降りて腰
“`

と記述しました。

#ログインしている

PHP サイト でも Capistrano (Ruby Gem)

## 環境

* Ruby 2.6.5

## 設定手順

### Capistrano 設定ファイルの用意

“`sh
bundle add capistrano
bundle exec cap install
“`

これで必要なファイルが作成されます。

あとは `deploy.rb`, `config/deploy/*` を変更して設定完了です。

ファイルを置けば使えるPHPサイトなら、認証設定程度を記述すればOKです。

### 設定ファイル例

“`ruby:staging.rb/production.rb
# server configuration
role :web, %w{ec2-user@123.123.123.123}
# file location
set :deploy_to, “/var/www/xxx”
“`

“`ruby:deploy.rb
# application name
set :application, “xxxxxx”
# repository
set :repo_url, “sample@sample.git.jp:/sa

元記事を表示

Rails slimの書き方分からなくなった時

#slimの書き方分からなくなった時

slimって便利なんですけど、、
たまにちょっと入り組んでる参考サイトのコードをどうやってslimで書いたらいいか迷うことあるんですよね。

そんな時に便利なサイトがあったのでメモ。

http://erb2slim.com/

コチラで対象コードをコピペしてConversion Typeをslimにしてコンバートすると
1発で解決しました。
変換されたコード見て「あーそっかそう書くのね!」って感じのアハ体験ができました。

元記事を表示

Ruby on Railsで新規アプリケーションを立ち上げる自称最速手順(github連携)

#目的
新規のアプリケーションを作成する際、
毎回「あれ?次どうするんだっけ?」ってなって調べている時間がムダなので、
最低限のものを最速で作る手順を残しておきます。
細かいことにこだわらず、とにかくサッと作成したいときに参考にしてください。
githubにも連携します。

#前提
マークアップはhaml,scssを使用
リセットcssはyui3を使用
ローカルでビューファイルを開くところまでを記載

#1.Railsのバージョン確認

“`terminal:ターミナル
% cd ~
% rbenv rehash
“`
バージョンの変更が必要な場合は以下のコマンドを実行
(–version=以降は適宜指定してください。)

“`terminal:ターミナル
% gem install rails –version=”5.0.7.2″
“`

#2.アプリケーションの作成

“`terminal:ターミナル
% cd
% cd projects
% rails _5.0.7.2_ new <アプリケーション名> -d mysql
% cd <アプリケーション名>
% rai

元記事を表示

【Rails】パスワードの2回入力は不要。1回にしてマスキング解除機能を実装【jQuery】

# 環境
Ruby on Rails 5.2.4(gem ‘devise’は不使用)
⇒ gem ‘font-awesome-sass’を使用
jquery-rails 4.3.5
haml 5.1.2

# 前提
Webアプリケーションのユーザ新規登録画面で、確認の為にパスワードを2回入力させる事ってよくあると思うんですよ。
Railsの機能的にもpasswordとpassword_confirmationが合致しないとユーザ登録できない仕様になっていますし。

これに関してはpassword用の入力フォームを1つ用意し、
userをsaveさせる前にpasswordの値をpassword_confirmationにも代入する事で、確認用のpassword_confirmationフォームを省くことが可能です。

“`rb:users_controller.rb
# 色々省略
def create
@user = User.create(user_params)
@user.password_confirmation = user_params[:passwor

元記事を表示

7つのアクションのみのインクリメンタルサーチ

##インクリメンタルサーチと7つのアクションのみのインクリメンタルサーチとの相違点
主に編集するファイル場所の違いと、それによるリクエストパスの違いになります。
1.検索に使用するコントローラーとビューの「名前」「場所」が異なる
2.構造が異なるため、ルーティングも異なる
3.ルーティングが異なるため、検索のリクエストパスが異なる
などの違いがあります。
##コントローラーとビューの「名前」「場所」が異なる
7つのアクションのみで検索機能を実装した場合、searches_controller.rbの作成にnamespaceを利用します。
そのため、コントローラーが格納されているディレクトリの構造が変わります。
app/controllers/tweets/searches_controller.rb
加えて、作成したsearches_controller.rbのindexアクションに対応するビューは、
app/views/tweets/searches/にindex.html.erbとして格納されます。
これらの「namespaceを利用したことによる構造と名前の違い」があります。
#

元記事を表示

direnv(linux)

##はじめまして
みなさんはじめまして。本日やっと問題解決し、雄叫びをあげましたkyonです。
備忘録として初投稿いたします。
どうぞよろしくお願いいたします。

##環境
CentOS Linux release 8.1.1911 (Core)
mysql Ver 8.0.17 for Linux on x86_64 (Source distribution)
Visual Studio Code バージョン: 1.43.1

##ー
タイトルにもありますとおりlinuxでdirenvを使いたく、以下URLを参考とさせていただき、
参考URL [Linuxでdirenvを使う](https://qiita.com/tkmiya34/items/875742eb56ebe54d8828)
.envrcファイルを作成し、Railsプロジェクトの /binディレクトリにパスを通すところまですんなりとできましたが、その後ずっとコイツと戦っておりました。

“`
Access denied for user ‘ENV[‘MYSQL_DATABASE’]’@’localhost’ (usin

元記事を表示

【Rails】いいね機能の実装

現在絶賛作成中のポートフォリオでいいね機能を実装する際、色々躓いてしまったので反省もかねてメモしとこうと思います。

#環境
– Rails 5.2.2
– mysql 8.0.17
– macOS

#実現したいこと
Twitterのようないいね機能の実装。

##そのために必要な処理
いいねボタンを押下した場合、

– 「いいねしたユーザーのid:user_id」と「いいねされた投稿のid:post_id」が「中間テーブル:likesテーブル」に保存される。
– いいねボタンが「いいね追加」と「いいね削除」で切り替わる。

##必要手順
1. 中間テーブルの作成
2. テーブルの紐付け
3. ルーティングの設定
4. コントローラー側の処理
5. ビューでの表示処理

大体こんな感じです。

では順番に見ていきましょう。

#中間テーブルの作成
まずは、「いいねしたユーザー」と「いいねされた投稿」を保存するテーブルの作成からです。

“`
$ rails g model Like user:references post:references
“`

referencesを指定

元記事を表示

bundle install あれこれ、、、、(☝︎ ՞ਊ ՞)☝︎

railsで便利な機能を加えるために使われるコマンド

“`
bundle install
“`
は、今まで何気なく使っていましたが、今回の、デプロイ作業の際に発生したエラーにより深く知る事ができました。。。

##簡単にbundle installのあれこれについて簡潔に解説します

##bundler

依存関係を持っている複数のものを一括でインストールしてくれるというものだ

##gemfile

bundle installをする際の設計図的な機能を持つファイル

##Gemfile.lock

gemfile.lockは実際にインストールした結果図

##bundle install

gemfile・Gemfile.lock の内容を踏まえて必要な情報をインストールするコマンド

##bundle update

gemfileの内容を踏まえて、情報をアップデートするコマンド
また、その更新された情報ををGemfile.lockに記述します

元記事を表示

Unknown action [初心者備忘録]

#Unknown action
railsでアプリを作成していたところ、初めて見るエラーが発生しました。
結果からいうとコードの誤記という恥ずかしいイージーミスでしたので、反省と忘れないために書きたいと思います。

##エラー発生
Users::RegistrationsControllerのnew_credit_cardアクションを実行したところ以下のエラーが発生しました。

““
Unknown action
““

““
The action ‘new_creditcard’ could not be found for Users::RegistrationsController
““

なるほど、アクションがないのか。
ということで、RegistrationsControllerを確認します。

##解決
以下がコントローラーで当該のアクションを呼び出してる箇所とroutes.rbです。

““uses/registrations_controller.rb
render :new_credit_card
““
““config/routes.rb

元記事を表示

【Rails】バリデーションによるエラーメッセージ表示の手順

##はじめに
Railsで、バリデーションによるエラーメッセージの表示をしようとしたら
エラーが出てしまい、調べてみたらとても初歩的なミスを犯していたので
忘れないよう、エラーメッセージ表示の手順を、自分用のメモみたいな感じでまとめました!

##手順
「新規投稿」を例にとることにします。

まず、新規投稿が行われる手順から
順を追って、バリデーションによるエラーメッセージの表示方法について説明していきます。

1.まずは、modelフォルダの中のpost.rbファイルの中で、バリデーションを設定します。
これによってバリデーションに弾かれたデータには自動でエラーメッセージが取得されます。

“`ruby:models/post.rb
class Post < ApplicationRecord validates :content, presence: true, length: {maximum: 140} end ```
2.「new.html.erb」で投稿ボタンを押すと、form_tagで指定したUR

元記事を表示

クイズアプリにおけるデータベース設計のアンチパターン

## 想定する読者

– ポートフォリオとしてクイズ系アプリを作成している方

## アンチパターン例 3つ

例えば4択クイズを作りたいというとき、以下のようなDB設計を思いつくかもしれません。
※筆者が思いつきました。
これらは明確なアンチパターンです。
何故アンチパターンかというと、仕様変更に弱いからです。

#### part1 マジックナンバーカラム

| id | question | choice1 | choice2 | choice3 | choice4 | answer_number |
| —- | —- | —- | —- | —- | —- | —- |
| 1 | 次のうち偶数なのは? | 3 | 7 | 8 | 1 | 3 |
| 2 | 「令和」はどう読む? | れいわ | へいせい | しょうわ | たいせい | 1 |

仕様変更さん「○×クイズもできるようにしたい〜〜選択肢を2つに減らすだけだし簡単ですよね?選択肢も4つだけじゃなくて、5つとか

元記事を表示

[ancestry]編集画面でカテゴリー表示、選択

フリマアプリの作成で編集画面に遷移した時、出品時に設定したカテゴリーを親(parent)、子(child)、孫(grandchild)まで表示させたい

**※出品機能が完了した程で進めます**

#完成イメージ
[![Image from Gyazo](https://i.gyazo.com/a1e8d9dd4c2dd270174a38fa497588eb.gif)](https://gyazo.com/a1e8d9dd4c2dd270174a38fa497588eb)

#コントローラー
“`items_controller.rb
before_action :set_item

~~省略~~

def edit

grandchild_category = @item.category
child_category = grandchild_category.parent

@category_parent_array = []
Category.where(ancestry: nil).each do |parent|
@

元記事を表示

docker-composeでrailsをdocker化したらBundlerバージョンで怒られる

最近は railsもdocker化するのが多くみられるのですが、ハマりポイントも多いみたいですね。
特にdocker-composeを使ったときには、キャッシュがかかってうまく修正反映できないことがあります。

# エラーで怒られた。
例えば、既存のbundlerバージョンが合わなくて、bundler version 2.x

“`
You must use Bundler 2 or greater with this lockfile.
“`
というエラー。

dockerでrubyのイメージを使うときには、bundlerも一緒に入ってるわけですが、
その時に作った時のGemfileに書かれているBundlerバージョンと合わないことがあります。

#解決法
その時には、Gemfile.lockを削除してからgemライブラリ達をビルドし直す必要があります。

“`
$ rm Gemfile.lock
$ sudo docker-compose build
$ sudo docker-compose up
“`

この時に気を付けなければいけないのは、docker-compo

元記事を表示

_destroyキーの使い方 ~~親(item)の子(image)を削除する~

一次ソースは[こちら](https://api.rubyonrails.org/classes/ActiveRecord/NestedAttributes/ClassMethods.html)です。
#問題
出品した商品(item)の画像を削除したいが、削除ボタンを押し更新ボタンを押しても削除できない

“`edit.html.haml
.main-items
= form_with model: @item, local: true do |f|
.wrapper.image-wrapper
#image-box.image-wrapper__image-box
= f.fields_for :images do |i|
– if @item.persisted?
= i.check_box :_destroy, data:{ index: i.index}, class: ‘hidden-destroy’
.image-wrapper__ima

元記事を表示

【Rails】データベース関連の知識、操作方法

#はじめに
Railsでアプリを開発するにあたって、データベース関連の設計、操作で色々苦労したので、自分の覚えの為にもまとめてみました。

#環境
– Ruby 2.5.1
– Rails 5.0.7

#そもそもデータベースとは
一定の形式で、「複数で共有、利用すること」と「検索、加工すること」を目的に整理されたデータの集まりの事を指す。プログラミングに限定された用語ではなく、日常生活で使う辞書等もデータベースみたいですね!

#データベース種類
– 階層型
– ネットワーク型
– リレーショナル型(RDBと呼ばれ最も主流)
– Oracle Database
– MySQL
– PostgreSQL
– Microsoft SQL Server など
– NoSQL

MySQLを使って開発する事が多かったので、ここからMySQL(リレーショナル型)に絞って話を進めていきます。

#リレーショナルデータベース(RDB)、SQLとは
RDBは現在主流のデータベースで、エクセルみたいな表で構成されたデータベース。行と列を持ち、表形式でデータの関係性を示す。SQLを用いたデータの

元記事を表示

[Rails]Swiperで画像スライド作成

#完成イメージ

[![Image from Gyazo](https://i.gyazo.com/04986da8400fb051cdd18f5c1da0e82c.gif)](https://gyazo.com/04986da8400fb051cdd18f5c1da0e82c)

#Swiperとは
>スライダー(カルーセル)が作れるJavaScriptライブラリです。
しかもPCでもスマホでも使えて、レスポンシブ対応可能!
引用元 https://garigaricode.com/swiper/

#使用準備
今回はCDNから読み込む方法で行きます。

“`application.html.haml
!!!
%html
%head
%meta{:content => “text/html; charset=UTF-8”, “http-equiv” => “Content-Type”}/
%title FrimaApp
%script{src: “https://js.pay.jp/”, type: “text/javascript”}
= c

元記事を表示

#Rails の Controller でネストした params を permit / require するのはメソッドチェーンじゃいかんともしがたいからメソッドを何度も実行するしかないのか? ( ActionController::Parameters )

– require / permit / permit! の引数の受け取り方も、返り値も使い方もなんだか不揃いで、なんとも使いがたい
– メソッドチェーンも使いづらくパラメータがネストされている時に permit / require しづらい
– permit! は引数を受け取れず、破壊的に params を変えてしまう
– require と permit を別々に実行して、頑張って組み立て直す必要があるかもしれない
– 具体ケースとしては JSON リクエストを受け取った結果を Controller の params で扱っているのだが、Rails のもともとのフレームワークのレールからは外れる部分が多いのか、苦労がある。

“`rb
# ネストした params
params = ActionController::Parameters.new(
name: ‘Alice’,
age: 22,
contact: ActionController::Parameters.new(
tel: 07011112222,
email: ‘user@examp

元記事を表示

OTHERカテゴリの最新記事