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

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

【個人開発】Rails|Nuxt.js|Docker|AWS を使用しアプリケーションを制作しました

## はじめに
こんにちは!
本記事を閲覧いただき、ありがとうございます!
個人開発で **「ビールでつながるコミュニティアプリケーション(BEERNECT)」** を制作しましたので紹介します!

本記事では、**アプリの制作過程や機能等**を紹介していきます。
![トップページ.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1135542/8d852009-5e1c-a581-c32d-0a60a52f0094.png)

## 目次
1. アプリケーションについて
2. アプリケーションに使用した技術
3. 主な機能
4. 制作を終えて
5. 今後について
6. 関連リンク
7. 最後に

## アプリケーションについて
#### アプリケーション概要
制作したアプリケーションがこちらです。
・[アプリケーションURL](https://beernect.com)
・[GitHubリポジトリ](https://github.com/boy-com777/BEERNECT)

当アプリケーショ

元記事を表示

throughを使ってアソシエーションをスッキリさせる!!

## はじめに
フォロー機能を実装したらthroughこの文言が出てきたので色々調べてみた。
今回は前に実装していた、いいねした投稿一覧をthroughを使ってスッキリさせていこうと思う。
割と丁寧に解説したと思うので、少しでも参考になれば幸いです。

### 使用する環境
– MacOS(Intel)
– Rails 6.0.3
– Ruby 2.6.3
– yarn 1.22.17
– Homebrew 3.5.0

## まず結論から

まずUserモデルの編集
Before
“`user.rb
has_many :posts, dependent: :destroy
has_many :favorites, dependent: :destroy
“`

After
“`user.rb
has_many :posts, dependent: :destroy
has_many :favorites, dependent: :destroy
has_many :likes, through: :favorites, source: :post # 追加
“`

Befo

元記事を表示

複数枚画像のスライド機能実装(carrierwaveとswiper使用)

## スライド機能実装する時に参考になるサイトはこちらです。
#### ❶carrierwaveとswiperに関してはこちらから参照下さい。
##### とてもわかりやすくまとまってます!

https://o6ga2wa8.hateblo.jp/entry/2021/09/20/135233

#### ❷完成イメージはこちらのサイトで確認できます。
##### アレンジを加えれるので、オススメです!

【実装例あり】スライダーSwiper.jsの基本的な使い方、機能解説

###### ❶の記事を見ながら『carrierwaveとswiper』を適用させた状態でざっくりと自分で適用できた記述を紹介します。

##### 1.dbにカラム追記
“`php:postに
create_table “posts”, force: :cascade do |t|
t.integer “user_id”, null: false
t.string “title”, null: false
~~~{省略}~~~
t.json “image

元記事を表示

PyCallを使ってRubyからPythonを実行する

# 実現したいこと
RubyでPythonのライブラリを使いたい

# 手順
## 1. pyenvを使ってる場合
“`shell
env PYTHON_CONFIGURE_OPTS=’–enable-shared’ pyenv install 3.9.12
“`

https://pip.pypa.io/en/stable/cli/pip_install/#install-find-links

## 2. 必要なライブラリがあればインストール
“`shell
pip install package
“`
または
“`shell
pip install requirements.txt
“`

## 3. Pycallを追加
“`ruby
gem ‘pycall’
“`
“`shell
bundle install
“`

または
“`shell
gem install pycall
“`

https://github.com/mrkn/pycall.rb/#installation

## 4. PyCallをロード
“`ruby
require ‘p

元記事を表示

ruby on rails を AWS Cloud9で実施 6 QandAサイト作成 新たなテーブル作成

https://qiita.com/TaichiEndoh/items/35294ff656499d9bbf8d

https://qiita.com/TaichiEndoh/items/9c19319df04a279403a3

https://qiita.com/TaichiEndoh/items/057d35eff8cadbd434ba

https://qiita.com/TaichiEndoh/items/522e956d569e5bbd7b8d

https://qiita.com/TaichiEndoh/items/809d7e94195265c0a201

# 前回の続きでQandAサイト作成 今回は新たなテーブルを作成するところから始めます
### 今回は前回の投稿テーブルに紐づくテーブルを作成します!

環境 AWS Cloud9
environment type EC2
instance type t2.micro
platform ubuntu server 18.04 LTS

## モデル作成

Rails が提供するModelは、
原則としてデータベース

元記事を表示

【動画付き】外部APIに依存するRailsアプリケーションの設計とテストの書き方

## この記事は何?
DBにデータが保存されているのではなく、外部APIから取得したデータをあたかもDBから取得したデータのように扱うRailsアプリケーションを作る場合の、設計やテストの書き方を紹介する記事です。

詳しい内容は動画で解説しているので以下の動画をチェックしてください。

また、この記事で使ったサンプルコードはこちらにあります。

https://github.com/JunichiIto/api-agent-sandbox

この記事では上の動画の簡単な概要を記述します。

#

元記事を表示

Ruby on RailsとFirebaseを連携させる際にdotenvを用いて秘密鍵の情報を隠す方法

## 環境
* Rails 7.0.3
* Ruby 3.0.1

## 参考元

今回の記事を作成するにあったって以下のサイトを参考にしました。
[主にこちらを参考にしました。](https://zenn.dev/mochiblock/articles/96b6762011b6f9)
[ファイルを使わない方法(Google Cloudのドキュメント)](https://googleapis-dev.translate.goog/ruby/google-cloud-firestore/latest/Google/Cloud/Firestore.html?_x_tr_sl=en&_x_tr_tl=ja&_x_tr_hl=ja&_x_tr_pto=wapp#new-class_method)
[dotenv内に改行コードを挿入する方法](https://tech.quartetcom.co.jp/2018/09/06/symfony-dotenv-values-including-newlines/)(秘密鍵に改行コードが含まれているので)

## 本題
__「〇〇の部分まで参考記事を見て

元記事を表示

いいね数が多い順番に並び替え

# 概要

投稿をいいねの順番に並び替えることができます。

### controller
“`favorites.controller.rb
def index
to = Time.current.at_end_of_day
from = (to – 6.day).at_beginning_of_day
@books = Book.includes(:favorited_users).
sort_by {|x|
x.favorited_users.includes(:favorites).where(created_at: from…to).size
}.reverse
@book = Book.new
end
“`

* いいね数が多い順に表示させるためにコントローラー内で条件を定義する
* sort_byメソッドを使っていいね数を少ない順に取り出している。最後にreverseをつけて昇順から降順に切り替えている

“`
sort_by {|x|
x.favorited_users.incl

元記事を表示

カート機能についての理解

![](https://i.imgur.com/FcmBsxS.png)

**1. カートに商品を入れる**

**1.1 カートテーブルの成り立ち**

* ユーザーが商品を購入する行為を行う場所
* どのユーザーがどの商品を購入するのか、ユーザーと商品の間で関係性を持たせることが必要
* しかし、ユーザーと商品テーブルを直接結ぶことはできない
* なぜならユーザーはどの商品にも関係性がないため

![](https://i.imgur.com/HFE22wG.png)

* しかし、ユーザーと商品を関連づけなければ商品を買うことはできない
* ユーザーと商品の関係を取り持つテーブルが必要になる

![](https://i.imgur.com/MEX7Yoh.png)

**1.2 カートとは?**

* カートは複数種類の商品をいっぱい入れておけるものではない
* カートid1つに対して、商品idやユーザーidはそれぞれ一つずつ対応している

![](https://i.imgur.com/6m4CGEJ.png)

**2. 注文情報を入力する**

元記事を表示

rails sをしたら、PGSQL.5432エラーが出力された件

環境:
・Ubuntu 20.04 LTS
・psql (PostgreSQL) 14.4
・Rails 7.0.3.1

Railsサーバーを起動しようと、rails sをしたところ、
下記のエラーメッセージが出力されて起動に失敗した。
“`
connection to server on socket “/var/run/postgresql/.s.PGSQL.5432” failed: FATAL: role “hogehoge” does not exist
“`

本エラーの原因については、
“hogehoge”のRoleが存在しなかったため発生したエラーであり、
“hogehoge”のRoleを作成することでエラーは解決した。

## PostgreSQLに接続してRoleの一覧を確認してみる

“`
failed: FATAL: role “hogehoge” does not exist
“`
エラーメッセージには”hogehoge”というロールが存在しないと書いてあるので、
PostgreSQLに接続して、Roleの一覧を確認してみる。

“`
psql

元記事を表示

非同期通信(Ajax)を実装する方法

# 非同期通信について

**ポイント4点**
この4つだけ押さえていれば簡単に実装ができる
1. 非同期する機能箇所の部分テンプレートを作る
2. link_toをlocal: falseにしてjs形式で送信
3. jsファイルを用意する
4. controllerのredirect_toを消す

![](https://i.imgur.com/SCFILCj.png)

**1.部分テンプレートファイルを用意する**

* 部分テンプレートにすることで、view全体ではなく、指定した部分のみをリロードなしで返してくれる
“`_form.html.erb
<% if book.favorited_by?(current_user) %>

<%= link_to book_favorites_path(book), method: :delete do %>
?<%= book.favorites.count %>いいね
<% end %>

<% else %>

<%= link_to book_favorit

元記事を表示

Full_Calendar実装

### 実現できること
FullCalendarにてカレンダーを実装し、非同期にて予定を作成、変更、削除ができます。

### 前提条件
環境
ruby : 2.6.3
rails : 6.1.6
fullcalendar : 5.1.1
webpacker : 4.0.7

### 導入
“`
yarn add @fullcalendar/core @fullcalendar/interaction @fullcalendar/daygrid @fullcalendar/timegrid @fullcalendar/google-calendar
“`

### モデルを作成
“`
rails g model Event title:string, start:datetime, end:datetime
“`

### controllerを作成
“`
rails g controller events index
“`

### routing
“`
resources :events
“`

### controller
“`events_controller

元記事を表示

MariaDB 導入方法

# MariaDB導入

### インストール
Amazon Linux 2を利用している場合、MariaDBは 「yumコマンド」からインストールできます
“`:EC2ターミナル
[ec2-user@ip-172-31-25-189 ~]$ sudo yum -y install mariadb-server mysql-devel
“`

### データベースの起動
データベースを起動するには`systemctl`コマンドを利用します
“`:EC2ターミナル
[ec2-user@ip-172-31-25-189 ~]$ sudo systemctl start mariadb
“`
`systemctl`コマンド:
Amazon LinuxやCentOSに含まれているもので、インストールしたソフトウェアの起動を一括して行えるツールです。

データベースが起動したことを確認します
“`:EC2ターミナル
[ec2-user@ip-172-31-25-189 ~]$ sudo systemctl status mariadb

● mariadb.service – Mar

元記事を表示

DockerでRails環境を構築する(Compose V2対応)

## なんでわざわざ書いたか

DockerでRails環境を構築する記事のほとんどが(更新日が新しかったとしても)Compose V2に対応していないものとなっており、見た人がそれを再生産しまくっているせいで誰もCompose V2に対応した書き方をしてくれないため。

一応今は動くけど、非推奨になってるものもあるので早めに新しい書き方に移行しようという話です。

## 既存のRailsアプリをDocker化する時

“`dockerfile:Dockerfile
# Rubyは使っているバージョンに合わせる
FROM ruby:3.1.2
RUN apt-get update && apt-get install -y nodejs npm && npm i -g yarn # Rails6用(Rails7では不要)

WORKDIR /app

COPY Gemfile Gemfile.lock ./
RUN bundle
COPY . .

ENTRYPOINT [“bash”, “/app/entrypoint.sh”]

CMD [“rails”, “s”, “-b”,

元記事を表示

【Rails】Guardの導入

## 導入方法
GemfileにGemfileの :test グループと :development グループguard-rspec を追加。

“`php:Gemfile
group :development, :test do
gem ‘guard-rspec’, require: false
end
“`

`bundle install`を実行する

“`
$ bundle install
“`

`Guardfile`を追加する。

“`
$ bundle exec guard init rspec
“`

“`
$ bundle exec guard
“`

元記事を表示

本番環境でサーバーを立ち上げてもエラー画面しか出なかったのを解消した

## この画面が表示された
デプロイはできたようだが、サーバーを立ち上げてみると以下のような画面しか映し出されずうんともすんとも言わなかった。
![スクリーンショット 2022-08-11 11.44.34.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2759696/d096725e-f156-ae8c-d6b9-130074f2fc42.png)

## 原因
①/config/enironments/production.rbの設定ができていなかった。
②Bootstrapのバージョンが高すぎた。
 →こちらの解決方法は以下の記事で確認できます。
https://qiita.com/kkarimata/items/796a4b3fe5710ed1a699

## エラーログを表示させてみる
“`
[ec2-user@ip-xxx-xx-xx-xxx “アプリ名”]$ sudo tail -f log/production.log
“`
そうすると、コンパイルに失敗している時に出る以下のような

元記事を表示

本番環境でBootstrapが反映されない時に解決した方法

## デプロイはできたが…
本番環境にデプロイすることはできたが、Bootstrapだけが反映されてない、、という不具合をなんとか解消できた話です。

## 原因
恐らく、Bootstrapの最新版を使っていたための不具合でした。

## なぜ最新版だと不具合が生じるの??
色々なものが日々アップデートされていますが、それらは全ての環境下で挙動を確認されているか、というとそうではないからです。
そのため、最新版を使っていればいい、というものではなく常にその時の安定版というものがありますので安定版を使うようにしましょう。

## 公式ドキュメントには…

公式ドキュメントには、Bootstrap5.2.0(最新)が安定版となりました!というブログが掲載されています。
これで動くはずだ!と思ってしまいますが、先輩エンジニアさんの方々の意見をしっかり聞くようにしましょう?

https://blog.getbootstrap.com/

![スクリーンショット 2022-08-11 11.10.16.png](https://qiita-image-store.s3.ap-northeast

元記事を表示

モデルのカラムを日本語化するときに書く activerecord attributesについて(自分用)

https://techracho.bpsinc.jp/kotetsu75/2019_09_26/80592

元記事を表示

Rails クラスメソッドとscopeっていったい何が違うのよ!

# はじめに
駆け出しエンジニアの私にとって実務のコードはメソッドだらけでなかなか読み進めることが難しいです。
メソッドに出くわしたら、検索して書かれている場所を特定してアルゴリズムを理解して、また次の行へ・・・
そんな中次のようなメソッドがあり、コードの内で検索をかけるのですが、なぜかメソッドが見つからないことがありました。
~~~ ruby
モデル名.hoge
~~~
メソッドといえば
~~~ ruby
def hoge

end
~~~
この形が一般的です。
ですが、探してもどこにも見つかりません。
ただmodelにこんな記述がありました。
~~~ ruby
scope :hoge, -> { where.not(category_id: 3)}
~~~

どういうことだ・・・。このhogeは実はメソッドではいのか・・・?
scopeってなんだ・・・と思い、調べてみることにしました。
その内容を備忘録として残したいと思います。
もしも、おかしな点や間違いがありましたら、教えていただけると幸いです!

# 環境(自分のPC)
Ruby 2.7.1
Rails 6.0.5

#

元記事を表示

【Rails】Devise ゲストユーザーログイン機能

ポートフォリオにゲストユーザーログイン機能を下記の記事で無事に実装できました。
本当に詳しく書かれていて本当に助かります。。。
この記事では、復習を兼ねて少し解説していきます。

https://qiita.com/take18k_tech/items/35f9b5883f5be4c6e104

ルーティング

“`ruby:config/routes.rb
devise_scope :user do
post ‘users/guest_sign_in’, to: ‘users/sessions#guest_sign_in’
end
“`
:::note
**devise_for**と**device_scope**の違いは?
:::
**devise_forについて**
>Includes devise_for method for routes. This method is responsible to generate all needed routes for devise, based on what modules you have defined in

元記事を表示

OTHERカテゴリの最新記事