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

Rails関連のことを調べてみた2021年01月03日
目次

Rails5でSprocketsを使いつつ、npmを利用する

## 何をしたか
今までに作ったRailsアプリは

– Sprockets + JSのライブラリはCDNでレイアウトファイルから読み込み
– Webpacker + JSのライブラリはnpmで読み込み

のパターンしか作ったことがなかったのですが、この度、

– Sprockets + JSのライブラリはnpmで読み込み

というアプリを作ることになり、やり方をメモしようと思います。
具体的には`https://swiperjs.com/`というライブラリの導入プロセスを紹介していきます。

## npm + Rails の初め方

npm自体は、`node.js`をダウンロードするとついてきます。Railsの環境構築時にnode.jsはインストールされているはずなので、

“`
$ npm -v
“`

でバージョンが表示されたらOKです。

## ライブラリのインストール

インストールしたいライブラリをnpmで導入します。

“`
$ npm install swiper
“`

npmバージョン4からは`–save`オプションをつけなくても`package.jso

元記事を表示

Dockerfileについて

Dockerfile

dockerfileはdockerの新しいイメージを作成する際に使用するもので
この設定ファイルにはrailsアプリケーション実行に必要なファイルやパッケージを
イメージに含めるための定義が書かれている。

“`Dockerfile.
1 FROM ruby:2.4.5
2 RUN apt-get update -qq && apt-get install -y build-essential nodejs
3 RUN mkdir /app
4 WORKDIR /app
5 COPY Gemfile /app/Gemfile
6 COPY Gemfile.lock /app/Gemfile.lock
7 RUN bundle install
8 COPY . /app
“`
1 :から前の部分をリポジトリとよぶ。:から後の部分をタグという。
 この場合rubyリポジトリの2.4.5タグを示している。

2 ruby 2.4.5のイメージからコンテナを起動してコンテナ内で実行するコマンドを定義している
ubuntuのパッケージ管理システ

元記事を表示

Ruby on Rails 基礎学習 ①

まず開発環境について

**dockerを使うメリット**
実際の現場では,Dockerを仮想環境として使っているのがほとんど。
dockerは起動スピードが早い。
AWSにはコンテナを実行するサービスがあるためサービスの公開が容易。

dockerを使用した開発環境

dockerをインストールすると軽量なリナックス(Moby Linux)がインストールされる。
dockerでrubyのコンテナを立ち上げるとMoby Linux上でRubyの実行環境コンテナが立ち上がる。
コンテナの基になるものをimageという。

元記事を表示

FactoryBotで外部キーを使用する場合のやり方 〜別解

#はじめに
 先日、外部キーの値をFactoryBotで使い場合の投稿をしました。その後も調べていると、別の方法もあったので、紹介します。なんなら、こっちの方が簡単です。
[FactoryBot、外部キーバリデーションで弾かれたときの解決方法](https://qiita.com/TerToEer_sho/items/a2973d05c1de6eba2b6a)

##前回の方法
“`ruby
FactoryBot.define do
factory :user do
Faker::Config.locale = :ja
room { FactoryBot.create(:room) } #ポイントはここ
email { Faker::Internet.free_email }
nickname { Faker::Name.last_name }
password = Faker::Internet.password(min_length: 6)
password { password }
password_confirmat

元記事を表示

textareaの最初に、空白スペースが出来てしまう問題の解決法

htmlでコードを書く際に、下記のように”改行”をしていたことが原因でした。

“`

“`

“`

“`

下のコードのように訂正したら、最初の空白は無事直りました。

元記事を表示

【PAY.JP】環境変数の設定について〜困ったときには削除の勇気〜

### 解決したいこと
クレジットカード決済の購入機能実装で、環境変数を設定するとtokenが発行されなくなってしまう。

### 発生している問題・エラー
“`
「 Token can’t be blank 」と表示される
“`

### 自分で試したこと

仮説1・そもそもトークンが生成されていない

トークンが生成されるまでの流れとしては、

**①ブラウザで入力したカード情報を取得する→
②取得したカード情報と公開鍵をもとにPAY.JP側(API)へアクセスする→
③PAY.JP側でトークンが発行される**

この中のどこかがうまくいっていないのではないか?

まずは①で、JavaScriptのファイルがきちんと読み込めているか確認。

“`javascript

const pay = () => {
console.log(“OK”) //⬅️検証ツールでブラウザに「OK」と表示されるか確認

//以下略

“`

確認できたので次はカード番号が取得できているか確認。

“`javascript

const pay = ()=> {

元記事を表示

【Rails】’ArgumentError (Missing host to link to! Please provide the :host parameter, set default_url_options[:host], or set :only_path to true):’が出たときに。model内でURL組み立てる場合の設定

## 使用環境
ruby 2.6.5
Rails 6.0.3.4
macOS Catalina 10.15.6

## エラー内容

“`
‘ArgumentError (Missing host to link to!
Please provide the :host parameter, set default_url_options[:host],
or set :only_path to true):’
“`
ええと、見たこともないエラーにぶち当たりました。はてはて・・・

## やっていたこと

そもそも何をしていてこうなったのかを簡単に説明しておきます。

Ajaxでタイムラインの記事にコメント投稿機能を実装時に、コメント投稿したユーザーのアバター画像を表示させる機能も同時につくっていて、user_serializerをあれこれと調べながらいじっていました。
(以下コード)

“`user_serializer.rb

class UserSerializer < ActiveModel::Serializer include Rails.applicati

元記事を表示

Mac M1 Big Sur にRuby / Railsをインストール 2021-01

M1のMac miniを買ったので、RubyとRailsのインストールを試しました。結論から言うと、2021年1月現在、Homebrewとrbenvを使えば問題なくインストールできますが、Rails(開発環境)の動作にちょっとへんなところがあります。

環境: Apple M1, macOS Big Sur, Ruby 2.7.2/3.0.0, Rails 6.1.0

## コマンドライン・デベロッパツールのインストール

次のコマンドを実行します。「”clang”コマンドを実行するには、コマンドライン・デベロッパツールが必要です。ツールを今すぐインストールしますか?」というダイアログが出るので「インストール」を押します。

“`
% clang
“`

次のコマンドを実行しても同じです。なお、Xcodeのインストールは必要ありません。

“`
% xcode-select –install
“`

## Homebrew、rbenvのインストール

[Homebrewのサイト](https://brew.sh/) からコマンドをコピペしてHomebrewをインストールしま

元記事を表示

form objectでupdate機能を実装した話

## 何をしたか
インスタグラムを模したアプリを作っています。
下記のように、ユーザーに紐づく投稿があり、それがさらに複数のimageを持っている構造になっています。

[![Image from Gyazo](https://i.gyazo.com/3ff5532b162755ce3983340414e8fc9a.png)](https://gyazo.com/3ff5532b162755ce3983340414e8fc9a)

こちらの構造で、`form object`を使って投稿の新規作成フォームを作ったのはよかったのですが、

▼こちらの記事で実装しています
[form objectを使ってネストしたフォームにcarrierwaveで画像を保存した話。](https://qiita.com/tanutanu/items/81c96d4fe9befef19fd0)

そこからさらに、`update`のフォームを作成するのにかなり苦労をしてしまったので、書いたコードをまとめておこうと思います。

なお、実行環境は下記の通りです。

– `Rails 5.2.3`
– `Ruby 2

元記事を表示

`bind’: Address already in use – bind(2) for 127.0.0.1:3000 (Errno::EADDRINUSE)エラーの対処法

# 事象
何かしら処理をしている最中にサーバーを止めてしまった時、再度サーバーを立ち上げようとすると次のエラーが発生した。

“`
`bind’: Address already in use – bind(2) for 127.0.0.1:3000 (Errno::EADDRINUSE)
“`

# 原因と対処法
既に3000番ポートが使われているというエラー。
解決方法は2つ

1. 別ポートを使用する
2. 使用されているプロセスを切る

## 1. 別ポートを使用する
3000番ボートが使用されているのなら別のポートを使用してサーバーを立ち上げればいい、という話。
※だが、根本的な解決にはなっていないので、2の方法をするのがいい

“`
# 3000番以外のポートで立ち上げる
rails s -p 8000
“`

## 2.使用されているプロセスを切る

現在動いているrubyのプロセスを確認する

“`
$ ps -ax | grep ruby
“`

動いているプロセスがあれば次のように表示される。

“`
6462 ttys011 0:12.64 /

元記事を表示

credentials.yml.encとmaster.key<備忘録>

# 概念
### credentials.yml.encとmaster.key
Rails5.2から登場したアプリの秘密情報を管理するための仕組み

#### master.key
credentials.yml.encに書かれた暗号化された秘密情報を、複合化するための秘密鍵が書かれたファイル

#### credentials.yml.enc
`credentials.yml`を暗号化したファイル

#### credentials.yml
秘密情報が書かれたファイル

# 使用方法
### 秘密情報を編集する時
直接`credentials.yml.enc`を編集するのではなく、以下のコマンドで編集する

“`
EDITOR=’vim’ rails credentials:edit
“`
#### なぜ直接`credentials.yml.enc`を編集しないのか?
`credentials.yml.enc`は暗号化されたファイルでありそれを編集する事はできないから。(.encは暗号化されたファイルという意味)

### 秘密情報を呼び出す時
Rails consoleを起動し

元記事を表示

ActiveRecordのwith_lockとキャッシュの関係

# 背景
こんなコードを書いた時にふとこのコードってどうなっているんだ?
となったので実際のRailsのコードを読んでみました。

やりたいことは1つのHogeに対して外部APIを必ず1回しか呼ばないようにして、その結果をFugaに保存する。

“`rb
class Hoge < ActiveRecord::Base has_oen :fuga def piyo return fuga if fuga.present? # <- ロック取りたくないから事前に関連があるか確認 with_lock do reload # <- fugaのキャッシュを消したい ※1 return fuga if fuga.present? result = call_api create_fuga(**result) end end private def call_api # call api end end class Fuga < ActiveRecord::Base belongs

元記事を表示

[Rails] ActiveRecord

# ActiveRecord
ActiveRecordとは
Railsが採用している ORM (Object RDB Mapper) です。

ModelとDBの間でRuby → SQL に翻訳をしてくれています。

基本的にDBにはDB言語としてSQLが使われており、
SQLでないとDBの操作ができませんが、
RailsにはModelにActiveRecordが適用されているおかげで、Rubyを用いてDBからデータを探したり、持ってきたりすることができます。
(厳密にはModelにApplicationRecordを介してActiveRecordが適用されているため)


Modelを見ると下記のようになっていると思います。これは
ApplicationRecordにActiveRecordを継承し、
user.rbなど、その他のModelにApplicationRecordを継承しているということです。

ちなみにself.abstract_class = trueの詳しい意味は分かりませんが、
必要性・意義については下記の通りです。

ActiveRecord::Base

元記事を表示

SQL文の基本知識

##SQLとは

**クエリ(データベースに送る命令)を書くための言語**

`Ruby on Rails`でモデルを介してDBからデータを取得した際などに、SQL文がターミナル上に出力される
![スクリーンショット 2021-01-02 11.11.01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/936377/7ed4ff2c-c5da-ed38-0aa3-618bf36c3d12.png)

## 基本形
* (どのテーブルのどのカラムのデータを呼び出すかを指定)

“`sql:sample.sql
SELECT “カラム名”
FROM “テーブル名”;
/* 実際のカラム指定はクォーテーション無し */
“`

* 具体例

“` sql:sample.sql
/* 基本形 */
SELECT name
FROM users;

/* 複数指定 */
SELECT name, email
FROM users;

/* 全てのカラムを指定 */
SELECT *
FROM users

元記事を表示

未ログイン時は表示できないようにする

before_action: :move_to_index, eXcept: :index

private
def move_to_index
redirect_to action: :index unless user_signed_in?
end

元記事を表示

【Ruby on Rails】ActiveStorageで保存した画像のURLを取得したい

#課題
ActiveStorageで保存した画像のURLを簡単に取れると思ったら案外手古摺ったのでメモ。

“`erb:image_tagを使ったerb
<%= image_tag recipe.image.variant(resize: '200x200').processed %>
“`

“`html:実際のHTML

元記事を表示

【注意点まとめ】Ruby 時間(Time型/Date型/DateTime型)をカラムに設定する

# Time型・Date型・DateTime型
### Time型
– UNIXタイムで日時を扱うクラス

“`
irb(main):001:0> Time.now
=> 2021-01-02 01:41:25.0792755 +0000
“`

### Date型
– 日付を扱うクラス

“`
irb(main):004:0> Date.today
=> Sat, 02 Jan 2021
“`

### DateTime型
– 日付と時刻を扱うクラス
– Dateのサブクラスなので、Dateのメソッドが使える

“`
irb(main):003:0> DateTime.now
=> Sat, 02 Jan 2021 01:41:40 +0000
“`

# validation
– いつも通りのやり方(integer型やstring型と同じやり方)が通用しない。
– エラー文を追加するメソッドを独自に定義し、validationとする必要がある。

“`ruby

validate :day_after_today

def day_after_today
e

元記事を表示

ログイン機能において、他者の投稿の編集や削除をできないようにする処理(Rails・初心者向け)

webアプリケーションで他人と投稿を編集したり消すことができたらまずいですよね。
そこで、ログイン機能において他者の投稿の編集や削除ができないようにするための処理を実装していきます。
この記事では簡単な掲示板サイトを想定して説明しております。
Messageモデルやmessagesコントローラーがあるとして、考えてみましょう。

`$ rails g helper sessions`でhelperを用意して、`current_user`と`logged_in?`を実装します。ここは、今回メインで解説する箇所ではないので、簡単な説明で留めておきます。

“`Ruby:app/helpers/sessions_helper.rb
module SessionsHelper
def current_user
@current_user ||= User.find_by(id: session[:user_id])
end

def logged_in?
!!current_user
end
end
“`
`def current_user`は、現在ログイン

元記事を表示

rails db:seedでデータベースに反映されない時の対処法

seedを用いてデータベースにダミーデータを入れる時に使えるseeds.rbの記述方法について書きました。

seeds.rbにデータを記述する時に

“`ruby:seeds.rb
User.create!(name: …)
“`
と上記のようにcreateの後に!をつけることでデータをデータベースに登録失敗した際にエラーを表示してくれるようになります。

元記事を表示

記事の並べ方(昇順・降順)について

#自己紹介
こんにちは!
今回初めて投稿をします。
同じことで何度も悩んでしまわない為の、自分用のメモとして、またアウトプットする事によって記憶の定着に繋がればと思い始めました。

それでも、もしかするとどなたかに拝見していただける機会があるかもしれませんので、少しだけ自己紹介をさせていただきます。
2020年10月中旬より本格的にプログラミングの勉強をスタートさせ、現在はプログラミングスクールも活用し、未経験の中途という形でエンジニア転職を目指している者です。

さて今回の本題に!

#投稿された記事をIDの若い順に並べてください。
この言葉にまず「若い順」ってどういう意味だろうと疑問に感じました。
結果から言うと、答えはそのままの意味で1.2.3.4….となるような数字の小さい順という事でした。
この若い順が一般的な昇順(asc)、その反対が降順(desc)になります。

今回のIDの話で例えると、
・昇順:IDが小さい順。古い記事が上にくる。
・降順:IDが大きい順。新しい記事が先頭にくる。

今回は、コントローラに記述する方法を使用したので残しておく事にします。

1.

元記事を表示

OTHERカテゴリの最新記事