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

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

macOSのrailsで”An error occurred while installing mysql2 (0.5.3), and Bundler cannot continue.”の対処方法

#環境
macOS Big Sur(11.2)
ruby
rails6.1.4
mysql2

###gemでmysql2インストール時に絶対errorに俺はなる
以前はQiitaに対処方法のエントリがあったのだけど、なんか無くなっちゃったので。

“`sh:
Gem::Ext::BuildError: ERROR: Failed to build gem native
extension.
…..
An error occurred while installing mysql2 (0.5.3),
and Bundler cannot continue.
Make sure that `gem install mysql2 -v ‘0.5.3’ –source
‘https://rubygems.org/’` succeeds before bundling.
“`

#解決法

ターミナルで下記を打ち込む。

“`sh:
$ bundle config –local build.mysql2 “–with-ldflags=-L/usr/local/opt/opens

元記事を表示

[Rails]バッチ処理を実装出来るエンジニアに俺はなる!

# はじめに
実務でバッチ処理を実装することがあるかと思いますが、右も左も分からず悔しかったので学習したものを備忘録としてまとめようと思います!自分と同じくまだ理解してない人はぜひ参考にしてください!

# バッチ処理とは
バッチ処理とは、アプリケーションに関するデータの参照と更新をソースコードに書かれた仕様に従って実現します。
大量のデータを更新する処理や時間を必要とする処理も取り扱うことができます。

例:情報の一括更新、バックアップの作成…etc

# バッチ処理実装方法
自分の調べた感じで言うと、主に2つの実装方法があるらしいので、どちらがよく使われてることもないと思うので、どちらも紹介したいと思います!

## Rails Taskを用いた実装
1.`lib/tasks`配下にrakeファイルを作成します。
※あるまとまりごとにディレクトリを作成することが多いようです

“`bash
$ touch lib/tasks/samples/sample1.rake
“`

2.作成したrakeファイルに処理を実装していく。

“`lib/tasks/samples/sa

元記事を表示

【Ruby on Rails】非同期通信でブックマーク機能の実装方法(お気に入り、いいね)

#対象者

* ブックマーク機能を実装したい方
* お気に入り、いいね機能を実装したい方

#目的

* ブックマークして記事の保存や後で見るための機能を実装をする

#実際の手順と実例
###1.前提

* 投稿機能実装済
* device機能実装済
* ArticleとUserモデルがある

###2.モデルの作成

ターミナルでモデルを作成します。

“`ターミナル
$ rails g model Bookmark user:references article:references
“`

実行後はマイグレーションファイルを編集します。

“`db/migrate/000000000000_create_bookmarks.rb
class CreateBookmarks < ActiveRecord::Migration[5.2] def change create_table :bookmarks do |t| t.references :user, foreign_key: true, null: false t.refere

元記事を表示

1周目 railsチュートリアル第6章

#目次
[1.前回](#1-前回)
[2.概要](#2-概要)
[3.内容](#2-内容)
[4.用語のまとめ](#3-用語のまとめ)
[5.感想](#4-感想)
[6.おわりに](#5-おわりに)

#1. 前回

https://qiita.com/ak-matsu/items/ba79cfc46793e5432561

#2. 概要
ユーザーのモデルを作成する。
ユーザー用のデータモデルの作成と、データを保存する手段の確保を行う。

#3. 内容

### Userモデル
完成図
![6章の完成図.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/459220/a5d72bf1-9633-3a43-73f4-7a71dbc87c14.jpeg)

MVCのM=モデルデータモデルを扱うデフォルトのデータ構造
データの永続化=データベースを使う
RailsのライブラリではActiveRecordという。
ActiveRacordはデータオブジェクトの作成、保存、検索のメソッドを持っている。
Railsはデ

元記事を表示

Ruby on rails / フォロー機能

# はじめに
フォロー機能の理解にかなり時間を要したため、備忘録として記録を残しておこうと思います。
また、どなたかのお役に立てたら幸いです。

今回は、Userモデルは作成済みの段階からスタートします。
# 目次
0. アソシエーションの理解
1. モデル作成
2. コントローラー作成
3. ビュー作成
4. ルーティング作成

# やってみよう

### 0.アソシエーションの理解
今回は多対多のアソシエーションとなり、
Relationshipsテーブルが中間テーブルです。

![スクリーンショット 2021-08-30 19.21.53.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1902432/5dbd3979-543b-d4c0-4c59-6896e0a6657c.png)

結ぶのはどちらもUsersテーブルで、
modelの定義が難しく、苦戦しました。

### 1.モデル

まずは、Relationshipモデルを作成します。

“`ruby
rails g model Re

元記事を表示

Vue.jsを用いてBGMサウンドを流したい

今コーヒーに関するアプリを作ってるので、アプリに自動でcafe musicが流れたら面白いなぁと思ったので、
vue-jsでそれらの機能を実装してみたい。

https://www.it-mure.jp.net/ja/javascript/vuejs%E3%81%A7%E3%82%B5%E3%82%A6%E3%83%B3%E3%83%89%E3%82%92%E5%86%8D%E7%94%9F%E3%81%99%E3%82%8B/831052767/

Vue.jsで音楽プレイヤーを実装する「vue-aplayer」

これら玉稿を参考にしていきたいと思います。

必要であればyoutube APIをvueで叩いていくのもなくはない。
追記[.mp3といった音源ファイルが必要らしい。]

# いざ実装。

https://github.com/SevenOutman/vue-aplayer/blob/develop/docs/README.md

と思ったら、
Failed to compile.

./node_modules/vue-aplayer/dist/vue-aplayer.mi

元記事を表示

[jQuery]position fixedしたものをフェードインさせた(Rails)

# はじめに
本日、私自身railsにてjQueryを初めて学習したため、アウトプットいたします。

# jQueryの導入方法
以下参照です。
[Rails6でのjQuery導入方法](https://qiita.com/tatsuhiko-nakayama/items/b2f0c77e794ca8c9bd74)
爆速で使用できるので、こちらにも記載しておきます。

`①ターミナルにて`

“`
% yarn add jquery
“`

`②Webpackの設定`

“`config/webpack/environment.js
const { environment } = require(‘@rails/webpacker’)

const webpack = require(‘webpack’)
environment.plugins.prepend(‘Provide’,
new webpack.ProvidePlugin({
$: ‘jquery/src/jquery’,
jQuery: ‘jquery/src/jquery’

元記事を表示

【Rails】 投稿とユーザーの紐付け(メモ)

# 目標

* 投稿とユーザーの紐付け

# 環境

* Rails: 6.1.3
* ruby: 3.0.0
* mac: OS

# 前提
* 投稿機能実装済み

# 実装
### 1.`post`テーブルに`user_id`カラムを追加

“`ruby:ターミナル
$rails g migration AddUserIdToPosts user:references
“`

“`ruby
class AddUserIdToPosts < ActiveRecord::Migration[6.1] def change add_reference :posts, :user, null: false, foreign_key: true end end ``` ```ruby:ターミナル $rails db:migrtate ``` ### 2.モデルに`has_many`と`belongs_to`を記述 ユーザーは投稿が複数持てるので `has_many` ```ruby:app/models/user.rb class User < Applic

元記事を表示

【Rails】取得したenumの値とモデルのenumを比較する方法

取得したenumの値とモデルのenumを比較することができず、詰まったので、同じ轍は踏まないように情報共有したいと思います。

## 準備
User.rbでenumを設定

“`ruby
enum sex: {
# 無回答
no_answer: 0,
# 男性
male: 1,
# 女性
female: 2,
}
“`

rails console

“`ruby
# enumを確認
User.sexes
=> {“no_answer”=>0, “male”=>1, “female”=>2}
User.sexes[:male]
=>1

# インスタンスを取得
user = User.find(4)

# インスタンスのenumを確認
user.sex
=>”male”
“`

## 詰まったこと
enumの比較ができない・・・
### 実現したいこと
「インスタンスのsexがmaleであるとき」の条件式が作りたい。
### 試したこと
“`ruby
user.sex == User.sexes[:male]
=> false
“`
・・・できな

元記事を表示

EC2 + RDS + Capistrano + unicorn + nginxでrailsアプリを自動デプロイ メモ

#事前準備
Githubアカウント、AWSアカウントを作成済

#概要
capistanoで以下の行程を自動化する

1.**EC2インスタンスにSSH接続をする**
2.**EC2インスタンスにGithub からpullする**
3.**アセットのコンパイルをする**
4.**Unicornの再起動をする**

すなわち一度デプロイした後に変更を行い、その変更を反映させる手順は下記になる。

1.**アプリを編集する**
2.**git commitをする**
3.**ブランチを切っている場合はmergeする**
4.**GitHubのmasterブランチへpushする**
5.**ローカルのターミナルで自動デプロイコマンドを打つ(caspitranoのコマンド)**

通常AWSにアプリをデプロイする場合サーバー側にログインしgitで変更したコードをクローンしサーバーを起動しなおすといったことが必要なので、Capistranoを使用すると大幅にデプロイの手間を削減することが可能。

本記事では一度、caspitranoを用いずにデプロイした後、caspitranoを用いて自動デプロ

元記事を表示

【Rails】初学者の私が復習に使う記事まとめ(Qiita以外)

#目的
Qiitaで参考サイト管理を完結させるため。
自己満でブックマークの代わりとして使います。

#参考リンク
###機能

▷【Rails】 ransackを使って検索機能がついたアプリを作ろう!
https://pikawaka.com/rails/ransack

元記事を表示

RailsでDBをSQLiteからPostgreSQLに変更する方法

Rails6では、DBの変更がコマンド1つ実行するだけで可能


※備忘録として記録します。

[参考のサイト](https://k-koh.hatenablog.com/entry/2020/08/14/144129)で、紹介されていたので実行してみました。

“`
# DBをPostgreSQLへ変更するコマンド
$rails db:system:change –to=postgresql
“`

このコマンド実行後、database.ymlやGemfileを確認したところ、DBがPostgreSQLへ変更されていました。
MySQLへ変更も可能です。

ActiveRecordが接続しているDBの確認は、`rails c` でコンソール実行後、irbやpryで`ActiveRecord::Base.connection_config`を実行すると確認できます。[[参考サイト]](https://qiita.com/ke-bo/items/9cbbe6a63a80711607e9)

参考サイト
—-
https://k-koh.hatenabl

元記事を表示

ログイン後の遷移先を変更する方法

# 内容
deviceを用いてログイン機能を実装し、特に何も設定していないと root_path で指定したページに遷移すると思います。
そこで、ログインやゲストログイン後の遷移先を自由に指定する方法を紹介します。

# ログイン後の遷移先の指定
“`application_controller.rb
class ApplicationController < ActionController::Base before_action :authenticate_user! #以下のメソッドを記入 def after_sign_in_path_for(resource) prefix_path #遷移させたいページのpathを記述 end end ``` /users/application.rb に after_sign_in_path_forメソッドを用いて、ログイン、サインイン後に遷移させたいページのprefix_pathを指定することで変更できます。 # ゲストログイン後の遷移先の指定 ```sessions_controller.rb c

元記事を表示

重複したコードを綺麗にリファクタリングしてみた

#今回の内容
作成していたポートフォリオがやっと形になり、メンターの方にコードレビューをしてもらったときの気付きを備忘録も兼ねて紹介しています。

#該当箇所の画面
![527e45fe1a0464890f4c66be9f41d89c.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1131643/7bb4c58b-5b58-1428-aa08-8ee84825702e.gif)

#環境
`macOS Big Sur 11.2.3`
`ruby: 2.7.2`
`rails: 6.1.3`
`テンプレートエンジン: slim`
`レイアウト: bootstrap4`

#前提

– bootstarpの導入は省いています

#リファクタリング前のコード
`bootstap4`の`class`を使用してページ毎にボタンの色を変更しています。

`btn-primary`: 青色
`btn-light`: 灰色

“`app/views/users/travel_records.html.slim

元記事を表示

複数環境に対応したRailsアプリケーションの設定方法

Railsには `RAILS_ENV`と呼ばれる環境を切り替えるための環境変数が用意されています. 最初はこれだけでも十分ですが開発が進むと環境毎に切り替えるプロジェクトがよくあるので備忘録として自分がよくやる対応をまとめてみました.

## config_for
`config/database.yml`の様に環境毎で切り替える設定は[config_for]というメソッドがあるのでこれを使うとスッキリ書けます.

Rails6 であれば、 `shared` でマージされるのでデフォルト値が手軽に設定できます.
Rails5を使ってるのであれば、YAMLの[Anchors and Aliases]を使ってマージすると便利です.

“`yaml
# config/foo.yml

shared:
key3: ‘shared value’

base: &base
env: <%= Rails.env %>
key1: “<%= ENV['MY_APP_KEY1'] || 'default' %>”
key2: ‘hello %{user_cd}’

produ

元記事を表示

Rails6.2版 Relation配列指定でORクエリーを作る拡張

# 目的

Railsデフォルトのorだと、何らかの動的な仕様の都合でRelation条件配列として保持している場合、ORを適用するのが大変

“`ruby
first_condition = or_conditions.shift
or_conditions.inject(first_scope) do |merged_scope, scope|
merged_scope.or(scope)
end
“`

# 理想

このような形でサクッとORクエリーを作りたい

“`ruby
User.where.or(*or_conditions)
“`

# 実装

[Rails5版 OR クエリ構築するマン](https://qiita.com/ighrs/items/86ba018d74514e1196a3) のRails6.2版(merge! → and!)

Rails6.2からmergeが厳密になり、統合方法の指定が必要になり汎用拡張には使えなくなった、そのため条件の追加である and! を使ってRelationにOR条件を追加する

“`ruby
# initial

元記事を表示

belongs_toをbelong_toと書いていたこと

# belongs_toをbelong_toと書いて、作業が止まってしまった。
かなり初歩的なミスですが、学習中にbelongs_toをbelong_toと書いて、この間違いを探し出せず作業が止まってしまいました。

“`ruby:ruby
belong_to #belongsの s が抜けており、このままだとエラーが出ます。
“`

“`ruby:ruby
belongs_to #なので、このように忘れずにbelongsと書きます。
“`
# さいごに
このミスは、「記述ミスが一つでもあると動かなくなる。」ということが改めて分かったことでもあります。この記事は自身のミスに常に目を光らせておくという戒めとして書きました。今後は自分のミスにいち早く気づけるようにしていきたいです。

元記事を表示

【Ruby on Rails】時間表示に関する記事いつも検索するからまとめてみた

#対象者

* 時間の表示に関して調べている方

#目的

* 時間表示の方法を1つの記事にまとめて整頓する

#実際の手順と実例
###1.タイムゾーン

タイムゾーンを日本時間にする方法を下記の記事を参考にさせて頂きました。

https://qiita.com/katsutakashima/items/1453ed0c97a818ddd731

““config/application.rb
module App
class Application < Rails::Application # Settings in config/environments/* take precedence over those specified here. # Application configuration should go into files in config/initializers # -- all .rb files in that directory are automatically loaded. config.time_zo

元記事を表示

ログイン前にトップページを表示させる方法

# 内容
アプリを作成するにあたり、ログインする前でもトップページが表示されるように設定しました。
# 解決法

deviceを使用してログイン機能をつけた場合、

“`application_controller.rb
before_action :authenticate_user!
“`

を記述することで全てのコントローラーでアクションが動く前にログインしているかしていないかを判断され、ログインしていなければログインページにリダイレクトされるようになります。

“`routes.rb
root “tops#index”
“`
この状態では、root_pathにトップページを指定してもログインページに飛ばされてしまいます。

どうにかしてtopsコントローラーでは before_action :authenticate_user! を無効化したいですね。
そんな時は、skip_before_action を使います。

“`tops_controller.rb
class TopsController < ApplicationController skip_bef

元記事を表示

resourceとresourcesの違いについて

# はじめに
本記事では、resourceとresourcesの違いについて記述します。

# resources
`resources`とは、
7つのアクションへのルーティングを自動生成するメソッドです。

resourcesの引数に、:itemsなどという+シンボルで指定すると/usersのパスに対応するルーティングが生成されます。

“`
% rails routes

GET /items(.:format) items#index
POST /items(.:format) items#create
GET /items/new(.:format) items#new
GET /items/:id/edit(.:format) items#edit
GET /items/:id(.:format) items#show
PATCH

元記事を表示

OTHERカテゴリの最新記事