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

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

なぜModel::ActiveRecord_RelationオブジェクトはModelに定義されたクラスメソッドを呼び出せるのか調べてみた

こんにちは。株式会社iCAREでサーバーサイドエンジニアをしている越川と申します。
この記事は、[iCARE Dev Advent Calendar 第2レーン](https://qiita.com/advent-calendar/2021/icaredev) の18日目です。

今回は、なぜModel::ActiveRecord_RelationオブジェクトはModelに定義されたクラスメソッドを呼び出せるのか調べてみました。

環境
Ruby 2.6.9
Rails 6.1.4

# 前準備

pry-railsとpry-byebugをinstallしておきます。

“`ruby
# Gemfile

group :development, :test do
gem ‘pry-rails’
gem ‘pry-byebug’
end
“`

“`terminal
$ bundle install
“`

次に、ApplicationRecordを継承した適当なクラスにscopeとクラスメソッドを定義しておきます。

“`ruby
class User

元記事を表示

【Rails】deviseで使用できるヘルパーメソッド一覧

## はじめに
 本記事は、プログラミングの学習を始めて1ヶ月の初学者が、学習を進めていて疑問に思った点について調べた結果を備忘録も兼ねてまとめたものです。
 そのため、記事の内容に誤りが含まれている可能性があります。ご容赦ください。
 間違いを見つけた方は、お手数ですが、ご指摘いただけますと幸いです。

## deviseで使用できるヘルパーメソッド一覧

“`

before_action :authenticate_user!   # コントローラーにの先頭に記述して、ログイン済ユーザーのみにアクセスを許可する。onlyで特定のアクションのみに設定したり、exceptで特定のアクションを除外することができる。

user_signed_in? # ユーザーがログイン済みか否かを判定する

current_user # サインインしているユーザーを取得する

user_session # ユーザーのセッション情報にアクセスする

“`

上記の`user`の箇所については、他のモデル名を使用している場合には、そのモデル名に書き換える必要があります。

### bef

元記事を表示

reCAPTCHA v3 に対して Autify でテスト自動化してみた

この記事は [Autify アドベントカレンダー2021](https://qiita.com/advent-calendar/2021/autify) の17日目のエントリです。

こんにちは! Autify カスタマーサポートエンジニアの hiroxyy です。
Qiita 初投稿となる本エントリでは、 reCAPTCHA v3 が導入されているサイトに対して Autify でテストを実行したらどうなるのか、その結果をまとめました。

# reCAPTCHA v3 とは
Google が提供している、人間と bot を識別するための API です。
以下のような特徴があります。

– サイトに訪問したユーザーにチェックボックスのチェックや文字識別のアクションを求めないため、ユーザビリティを低下させない
– API が返却するスコア(0.0 ~ 1.0)に応じてどう処理するかを、 **サイト側で実装する必要がある**
– サイトへのアクセスが増えるほど、API は学習し返却するスコアもそれに基づき変わる

また以下の公式の FAQ には、過去のバージョンである reCAPTCHA v

元記事を表示

refinarycms-blogの使い方

# 概要
refinarycms-blogの使い方について説明します
この内容について書かれている記事が少なかったので助けになれば幸いです
# 前提
既にrefinarycmsを導入したサイトにblog機能を追加する形で実装していきます
その実装方法については[こちらの記事](https://qiita.com/nanaho_mu/items/11c3c76b50217d4ad1be)で紹介しています
# 実装

## install
作成したrefinerycmsを導入したサイトのgemfileを開いて、一番下の行に下のコードを追加します。

“` :Gemfile
gem ‘refinerycms-blog’, git: ‘https://github.com/refinery/refinerycms-blog’, branch: ‘master’
“`

その後ターミナルで`bundle install`をしてください

※うまくいかない場合は`bundle update`をするとうまくいくことがあります

次にターミナルで以下のコマンドを実行して、blogのbackend

元記事を表示

refinarycmsの使い方

# 概要
・refinarycmsについての記事が少ない
・versionによってうまく動かない方法が多い
 などの理由で使い方を習得するのに苦労したので作成方法をまとめます

#準備
RefineryはImageMagickに依存するので、まずそれからインストールします。
OSXの場合一番簡単なのはHomebrewを利用する方法です。必要な作業は以下のコマンドを実行するだけです。

“` :terminal
$ brew install imagemagick
“`
# 実装
## install
Refinery gemをインストールします。

“` :terminal
$ gem install refinerycms
“`
## create application
新規のRefineryアプリケーションを作成するために、refinerycmsコマンドをアプリケーション名を指定して実行します。

“` :terminal
$ refinerycms refinary_sample
“`
※refinary_sampleはアプリ名なので自由に変えてください

#

元記事を表示

[devise][sorcery]ActionCable内でcurrent_userを使えるようにする方法

簡単に認証機能を実装できる`devise`, `sorcery`それぞれの`current_user`メソッドをActionCableにて使えるようにする方法を記載します。

## 前提

1:1のチャット機能を想定しております。

ActionCableの導入や説明などは割愛させて頂きます。

それぞれ`app/channels/application_cable/connection.rb`に記述していきます。

## devise

“`rb
module ApplicationCable
class Connection < ActionCable::Connection::Base identified_by :current_user def connect reject_unauthorized_connection unless find_verified_user end private def find_verified_user self.current_user = env['w

元記事を表示

error /node_modules/node-sass: Command failedの解決策

タイトルの通り、/node_modules/node-sass: Command failedのエラーが発生し、うまくWebpackが動作せず`Webpacker::Manifest::MissingEntryError`が発生しました。

その解決方法を残しておきます。

## 環境

“`
ruby 2.7.2
rails 6.0.3.4
node –version v16.0.0
“`

## エラー内容

`bundle rails webpacker:intall`コマンドを実行するとこのようなエラーが出ました。

“`
error /Users/xxx/xxx/xxx/node_modules/@rails/webpacker/node_modules/node-sass: Command failed.
Exit code: 1
Command: node scripts/build.js
Arguments:
Directory: /Users/xxx/xxx/xxx/node_modules/@rails/webpacker/node_modules/nod

元記事を表示

[Ruby on Rails]MVC仕組みについて「ひと言」「簡単に要約」(初心者)

###はじめに
初学者でたくさんのことを学ぶ中で忘れていたり、言語化してアウトプットするのが苦手なため書かせていただいております。

#まずMVCの各役割を説明

###Mについて

**要約**

“`
Modelは、データベース管理に関する役割
データベース内の該当するテーブルに対して、データの保存や保存されているデータの取得。
“`

###Vについて

**要約**

“`
Viewは、ブラウザに表示される見た目の役割
クライアントサイドに画面上に表示される見た目の事
“`

###Cについて

**要約**

“`
Controllerは、モデルやビューに処理を指示する橋渡しとなる役割
クライアントサイドからのリクエスト内容に基づきレスポンスを用意する。
“`

#MVCのメリット
###3点あります

“`
1,それぞれの役割が明確 (どこに何を書けばいいのかはっきりしている)
2,保守性が高い (処理の流れを把握しやすくエラーなどが起きた時に原因を特定しやすい)
3,チーム開発がしやすい (MVCによって分けるなど、効率的な開発ができる)
“`
#MVCの

元記事を表示

作品:フェイスブックの複製(Facebook Replica)

#概要

Odin Projectレッスンに従って作ったSNS。

レッスンURL: https://www.theodinproject.com/paths/full-stack-ruby-on-rails/courses/ruby-on-rails/lessons/rails-final-project

Github: https://github.com/RistoLibera/Facebook_Replica

![1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/613718/6c8a0623-6e73-d559-7b8d-8efb7992305a.png)

作品URL: https://a-facebook-replica.herokuapp.com/

#使用技術
・HTML、CSS、Bulma
・Javascript
・Ruby、Ruby on Rails
・Heroku
・Git
・GitHub
・Oracle VM VirtualBox

#機能一覧
##ユーザー登録機能

Cr

元記事を表示

Rails 7.0 のリリースノートまとめ

## はじめに
2021年9月15日、Rails 7 のアルファ版がリリースされました。
通常、Rails のアルファ版リリースは行わないのですが、フロントエンドに大きな変更が加わることによって、慎重に検証する必要があると判断したみたいです。

ちょうど社内で Rails 7 についてアウトプットする場があり、良い機会なので情報をまとめてみたいと思います。

## 1. フロント面のリニューアル
まず Webpacker が廃止され、フロント面がリニューアルされます。
ES6 / ESM のブラウザサポートの進歩、HTTP/2 の普及、importmap の新標準に対応するためです。
具体的には、Turbllinks と Rails UJS が Stimulus と Turbo の Hotwire コンビに置き換わります。
node_modules、bundler の設定に依存せず、フロントの開発にありがちな問題も発生しません。

また、Rails と JavaScript + CSS bundler の統合も劇的に改善されたそうです。
Rails の新しい JavaScript と

元記事を表示

最近追加されたrubocop規則を確認してみる?‍♀️?

最近追加されたrubocop規則を確認してみる?‍♀️?

## みんな大好きrubocop
みなさんrubocop?‍♀️?は好きですか?
新しい書き方や効率的な書き方が発見できるし
チームでコーディングスタイルを統一でき、レビューがストレスにならないので僕は良いgemだなと思っています

そんなrubocopですが日々アップデートされ新しい規則が増えています
[リリースノートはこちら](https://github.com/rubocop/rubocop/releases)

最近新しいプロジェクトで最新版のrubocopを入れて実行してみたのですが
Waringがたくさん表示されてびっくりしました

本日は新しいルールで怒られてしまった物を紹介しようと思います

## versionを0.92から1.23にして怒られていたもの

### Style::HashConversion (from 1.12.0)

“` ruby
# bad
Hash[ary]
# good
ary.to_h

# bad
Hash[key1, value1, key2, value2]
# g

元記事を表示

Rails 掲示板の検索機能 ransack 解説

Rails 掲示板の検索機能の実装 手順 (自分用)

#ransackを導入

“`:Gemfile
gem ‘ransack’
“`
・Gemfileにransackを追加しインストール

“`:ターミナル
$ bundle install
“`
#コントローラーの設定

“`rb:app/controllers/boards_controller.rb
class BoardsController < ApplicationController def index @q = Board.ransack(params[:q]) @boards = @q.result(distinct: true).includes(:user).order(created_at: :desc).page(params[:page]) end def new end def bookmarks @q = current_user.bookmark_boards.ransack(params[:q]) @bookmark_boards

元記事を表示

【備忘録】モーダルで非同期投稿のできる簡単な日記アプリの作成(新規投稿、削除、編集)

![gif.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/341484/7d3500e3-7ce0-e3ca-e436-bd5003d49eb5.gif)
実装環境
Rails 5.2.6
ruby 2.6.3p62 (2019-04-16 revision 67580) [x86_64-linux]

#1.アプリの作成

任意の名前のアプリを作成

“`ruby:ターミナル
rails new sample(アプリ名)
“`

#2.Modelの作成

“`ruby:ターミナル
rails g Sample(モデル名) title:string content:text
“`

上記コマンドを実施後に次のファイルができていることを確認

“`ruby:YYYYMMDDXXXXXX_create_アプリ名
class CreateRecipes < ActiveRecord::Migration[5.2] def change create_t

元記事を表示

docker-composeを既存のアプリへ導入【Rails×PostgreSQL】

既に作っていたrailsアプリにdockerを導入してみました。
なかなか難しくてかなり時間かかってしまいました。以下に記録として残しておきます。

# 早速やってみよう

“`:Dockerfile
FROM ruby:2.6.3
RUN apt-get update -qq && apt-get install -y nodejs postgresql-client

WORKDIR /port
COPY Gemfile /port/Gemfile
COPY Gemfile.lock /port/Gemfile.lock
RUN gem install bundler
RUN bundle install
COPY . /port

COPY entrypoint.sh /usr/bin/
RUN chmod +x /usr/bin/entrypoint.sh
ENTRYPOINT [“entrypoint.sh”]
EXPOSE 3000

CMD [“rails”, “server”, “-b”, “0.0.0.0”]
“`

基本的に公式の[クイックスタート](https

元記事を表示

【Rails×AWS】capistranoでデプロイ時のNoMethodError: Cannot load database configuration

初めてcapistranoでEC2にデプロイするときにハマったエラーがあったので解決方法ともに共有しようと思います。
EC2環境構築についてはこちらの記事を参考に行いました↓
https://qiita.com/gyu_outputs/items/b123ef229842d857ff39

#エラー内容

“`
$ bundle exec cap production deploy
.
.
.
.
deploy:migrating
01 $HOME/.rbenv/bin/rbenv exec bundle exec rake db:migrate
01 rake aborted!
01 NoMethodError: Cannot load database configuration:
01 undefined method `[]’ for nil:NilClass

“`

#原因/解決方法

最初はデータベース関連のエラーかと思いましたが色々調べてみるとdatabase.ymlの環境変数が読み込めないときに表示されるエラーということがわかりました。

元記事を表示

[Rails]Cookieとセッションの違い

#はじめに
現在プログラミングスクールに通っています。
就活を始めるにあたって質問されそうなことを言語化しておきたく自分なりにまとめました。

“`
① 簡単な説明
② 1行に要約する
③ 3行に要約する
“`

#Cookieとは

WebサーバーがクライアントPC(クライアントサイド)に預けておく小さなファイルのことです。
クライアントPCが、あるWebサーバーに初めて接続した際に、Webサーバー(サーバーサイド)がクライアントPCの中に、そのWebサーバー専用のCookieファイルを作成します。

クライアントPCがWebサーバーに接続したときには、WebブラウザがそのCookieをWebサーバーに送信します。このような仕組みによって、Webサーバーは、個々のクライアントコンピュータが前回使用していた情報を読み取ることができるようになります。

###Cookieには、Webサーバーによってどのような情報でも格納できる
**例**
・ユーザー名などの接続情報
・ショッピングサイトなどで購入する商品を一時的に保管する“買い物かご”の情報
・氏名や住所、電話番号などの一度登録し

元記事を表示

病院なび AMP化への道

事の発端はGoogleが「2021年6月からCWV(コアウェブバイタル)の評価をランキングシステムに導入する」とアナウンスしたことでした。そのアナウンスにより「病院なび[^1]」でもCWVの向上が優先課題として上がり、その解決策として、病院なびのAMP化を実施致しました。

この記事では、なぜAMPにしたのか、AMPへの切り替えを、どのように進めたのかを記します。
(病院なびではRailsを使っているので、RailsでのAMP化方法となります)

[^1]: 「病院なび」は、全国23万件以上の医療機関・薬局・薬店を検索できる医療機関検索サイトです。https://byoinnavi.jp

# なぜAMP?
まず、AMP(Accelerated Mobile Pages)」とは、Googleが推進しているコンテンツを高速に表示されるための手法で、CWVに優れています。が、その分、制限も多いです。

> AMP はウェブサイトを高速かつユーザーファーストにし、収益化するシンプルかつ堅牢なフォーマットです。AMP は一般的なプラットフォームへの配布を実現し、運用コストと開発コストを削

元記事を表示

Rails 掲示板の画像アップロード機能 carrierwave 解説

Rails 掲示板の画像アップロード機能の実装 手順 (自分用)

#アップロード用のライブラリ(carrierwave)をインストール

“`:Gemfile
gem ‘carrierwave’
“`

・carrierwaveをgemに追加して、bundle install

“`:ターミナル
$ bundle install
“`

#アップローダーを生成

“`:ターミナル
$ bundle exec rails g uploader アップローダー名
“`

“`:ターミナル
$ bundle exec rails g uploader BoardImage
“`
コマンドを実行すると、app/uploaders/board_image_uploader.rbファイルが作成される。

###生成されたアップローダー

“`rb:
class BoardImageUploader < CarrierWave::Uploader::Base storage :file #アップロードファイルの保存場所を指定 def store_dir #アップロードフ

元記事を表示

【SLOT解析アプリ】RubyでスクレイピングしてGoogleスプレッドシート反映させてみた。

鹿児島でプログラミングスクール講師をやっています。荻原です。
# 作ったアプリ

*待っていれば以下の画像が動きます。▼
slot.gif

スクレイピングしているサイトは、自分のサーバーに構築したWPサイトです。

パチスロ

# 概要
GCP Google Sheets API
・rubyとGoogleスプレッドシート連携
Ruby
・パチスロ合算値のスクレイピング
・Googleスプレッドシートへの書き込み

# 参考記事
スプレッドシートとRuby連携
https://zenn.dev/cumet04/scraps/c471e4aacaa448
https://github.com/cumet04/spreadsheet.rb

【ru

元記事を表示

[Rails6] Capistrano+docker-composeを使用してデプロイ を自動化する。

docker-composeを使用してnginxとRailsコンテナを用意して、AWSにデプロイをしています。現在はSSH接続して、いちいち起動しています。
なので、Capistranoを使用して、自動デプロイを行えるようにしていきたいと思います。

##docker-compose.production.yml
“`
version: ‘3.7’
services:
web:
build:
context: .
dockerfile: Dockerfile.production
volumes:
– .:/date_course # カレントディレクトリを/date_courseにバインドマウントしている
– public-data:/date_course/public
– tmp-data:/date_course/tmp
– log-data:/date_course/log
ports:
– “3000:3000”
command: bash -c “bu

元記事を表示

OTHERカテゴリの最新記事