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

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

【Rails6】詳細検索機能をgemなしで実装する

# 【Rails6】 詳細検索機能をgemなしで実装する
2022年1月からプログラミングの勉強をしております。詳細検索を実装した際に大変苦労したので皆さんの参考になるような記事を書きたいと思い筆を取りました。ransackgemなしでの詳細検索の実装になります。SQLの勉強にもなりますので、詳細検索を実装する際はぜひgemなしで実装してみてください。
# 開発環境
Rails: 6.1.4
Ruby: 2.6.3

# 目標
テーブルに登録されているすべてのカラムでAND検索を可能にする。(タグ検索も)
# 前提
検索対象projectテーブルは実装済み。タグは作成済み。
タグ作成で参考にさせていただいた記事
https://qiita.com/Kairi_Yasunnde/items/935dcdb8ec88b9ed9d91
# controllerの作成
`$ rails g controller searches search`
“`Ruby:controllers/searches_controller.rb
class SearchesController < Appli

元記事を表示

Amazon Web Services 基礎からのネットワーク&サーバー構築 改訂3版 のコマンドまとめ

# 目的
Amazon Web Services 基礎からのネットワーク&サーバー構築 改訂3版で学習したコマンドを随時まとめていきます。

最終的には、Ruby on Rails を AWSで動かします。

## コマンドまとめ

### ネットワーク関連のコマンド
「ping」「traceroute」「telnet」「nslookup」「dig」

## 個人的に使用したツール
* AWS構成図作成
https://www.diagrams.net/

元記事を表示

【Rails】RSpecの導入

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

## RSpecの導入
### RSpecをインストールする
Gemfileの group :test do に以下の2つを追記します。

“`:Gemfile
group :test do
gem ‘rspec-rails’, ‘~> 3.8’
gem ‘factory_bot_rails’, ‘~> 5.0’
end
“`

`factory_bot_rails`をインストールすることでテストデータの用意が簡単になります。

Gemfileの編集が完了したら、`bundle install`してください。
“`:ターミナル
$ bundle install
“`

インストールできているか確認します。

“`:ターミナル
$ bundle exec rspec –version

元記事を表示

タグ付け機能

# タグ付け機能の実装
## 概要
– ポートフォリオ作成として、学習マッチングサイトを作成。サイト内で講座を作る際にタグ付けを実装したい。
– ユーザーが自由にタグ付けできるようにしたい。
## 環境
– Rails 5.2.6
– ruby 2.6.3
## アソシエーション
![6ab4f133dfb54bd244def97a350b6d3e.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1923339/09bc2f44-8b8e-c54d-a0e1-acdbf83bc5d8.png)
講座(Lessonsテーブル)は複数のタグを持ち、タグ(Tagsテーブル)は複数の講座を持つため、講座:タグ=多:多となるため、中間テーブルとして、TagListsテーブルを作成した。
## テーブル定義
[![Image from Gyazo](https://i.gyazo.com/f0670c7ffdc63ac92e8c8b122e24a1a0.png)](https://gyazo.com/f0670c7f

元記事を表示

Railsでアプリ作成時に、使用可能なバージョンを確認する方法

# 結論

ターミナルで以下を入力

“`
% gem list rails
“`
これで使用可能なバージョンが表示されます

“`
*** LOCAL GEMS ***

rails (5.0.1, 4.2.6, 4.2.5, 4.1.6)
“`

## ちなみに
バージョンを指定してアプリを立ち上げる場合
“`
rails _5.0.1._ new アプリ名
“`
これで指定のバージョンでアプリを作成できます。

以上です

元記事を表示

rails_tutorial chapter11 <忘備録>

11章では、メールを使ったアカウントの有効化を実装します。
cookiesの実装と流れは似ているので、そんなに難しくはありません。
強いて言えば、mailerとsendメソッドを初めて使ったので少し戸惑いました。

ただ、mailerはcontrollerだと思えば、MVCの考え方に乗っ取っているので、分かりやすいです。

今回の流れは、以下の通りです。

:::note
(1)有効化トークンやダイジェストを関連付けておいた状態で
(2)有効化トークンを含めたリンクをユーザーにメールで送信し
(3)ユーザーがそのリンクをクリックすると有効化できるようにする
:::

ポイントとしては、

:::note
・ユーザーの初期状態は「有効化されていない」(unactivated)にしておく。
・ユーザー登録が行われたときに、有効化トークンと、それに対応する有効化ダイジェストを生成する。
・有効化ダイジェストはデータベースに保存しておき、有効化トークンはメールアドレスと一緒に、ユーザーに送信する有効化用メールのリンクに仕込んでおく。
※editアクションの代わりに、showアクションでもよいが

元記事を表示

【Stimulus】targetがある時だけ関数を実行する方法

# はじめに

Rails7 で Javascript を利用するときは Stimulus を使うのがデフォルトになっています。

特定のページで関数を実行する方法を書き残しておきます。

## 環境

– Rails 7.0.22
– Ruby 3.1.1
– Rspec 3.10.0
– stimulus-rails 1.0.4

## やりたい事

特定のページの時だけクラスを削除する関数を実行する

# 本文

Stimulus のライフサイクルコールバックと呼ばれる特別なメソッドを使用すると目的を達成することができます。

`TargetConnected()`を利用する

“`javascript:class_controller.js
import { Controller } from “@hotwired/stimulus”;

// Connects to data-controller=”class”
export default class extends Controller {
static target = [“class”];

classTa

元記事を表示

Docker使用時にbyebugのブレークポイントをスルーしてしまう問題の解決方法

# 環境
OS:macOS Big Sur
Docker:version 20.10.12
Ruby:2.7.3
Rails:6.1.3.2

# 発生した問題
①Docker使用中にbyebugで設定したブレークポイントをスルーしてしまう
下記のように=>マークは付くがブレークポイントで止まらず、コマンド入力できない
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2428148/440339a3-d4db-3a68-2d83-1d2670f4d674.png)

②Dockerのコンテナからデタッチできない

# 原因
①、②のどちらもdockerの設定で標準入出力をコンテナに結びつけていなかったことが原因

# 解決方法
下記のようにdocker-compose.ymlファイルにstdin_open: true, tty: trueを追加し、Dockerをビルドし直して解決。
![image.png](https://qiita-image-store.s3.ap-northeast

元記事を表示

【Rails】ENV[]とENV.fetch() {}の違い【Ruby】

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

## `ENV[]`と`ENV.fetch() {}`の違い
`ENV[]`と`ENV.fetch() {}`の違いは指定した環境変数が存在しない場合に`nil`を返すかデフォルト値を返すかの違いです。

例えば、以下の場合には、`RAILS_MAX_THREADS`、`DB_USER_NAME`、`DB_USER_PASSWORD`が存在しない場合にはnilとなります。
“`detabase.yml

default: &default
adapter: mysql2
encoding: utf8mb4
pool: <%= ENV.["RAILS_MAX_THREADS"] %>
username: <%= ENV.["DB_USER_NAME"] %>
password: <%=

元記事を表示

【EC2/Amazon Linux2】RailsアプリケーションのログをCloudWatchLogsに転送

# はじめに
Railsアプリケーションではデフォルトでlogsフォルダにログ情報を出力してくれます。
本番環境で運用している場合、EC2インスタンスを複数台用意して冗長構成としている場合が多いと思います。
その際、ログを確認するために各サーバーにSSH接続を行うのはとても面倒なため、1箇所に集約して確認することができるととても便利です。

本記事では、CloudWatchLogsを使って複数台の場合でも一括で確認する方法、またloglotateを使用した古いログの削除する設定を記載しています。

# CloudWatchLogsの設定

### IAMポリシーの作成

1 [IAM]-[ポリシー]-[ポリシーを作成] を選択
2 [JSONタブを選択] 以下テキストをペーストし、[次のステップ:タグへ]

“`json
{
“Version”: “2012-10-17”,
“Statement”: [
{
“Effect”: “Allow”,
“Action”: [
“logs:CreateLogGroup”,

元記事を表示

Rubyスクリプトをどうコンパイルするのか?

前回の記事では、字句解析、そして構文解析までをご紹介しました。
今回の記事は前回の内容がモリモリに必要になるので、読んでいない方がいらっしゃいましたら以下の記事をご覧ください。

https://qiita.com/wangqijiangjun/items/fa153176f7b410cb4a5f

前回の記事で以下のような画像を提示しました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2485775/7e628acd-0c13-02c6-d318-5b5d0e01ec00.png)
この続きが以下の画像になります
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2485775/b16d0910-8ad2-b743-81ec-c778ea715bd4.png)

今回は、構文解析の次である「コンパイル」~「YARV」までを見ていこうとおもいます。
こちらも中々の重厚感があるのでめげずに頑

元記事を表示

Ruby on Rails 超簡単レベル上げ機能

5投稿ごとに1レベ上がる。
次のレベル上がるまであと何投稿かを表示する。
“`ruby:users_controller
def show
@user = User.find(params[:id])
@count = @user.tweets.count
@level = @count / 5
@next_level = 5 – (@count % 5)
end
“`

“`erb:users/show.html.erb

投稿数<%= @count %>

<%= @level %>Lv

あと<%= @next_level %>投稿でレベルup

“`

![スクリーンショット 2022-03-27 19.44.47.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1081227/fec181f8-a831-7145-e8f0-441637226993.png)

元記事を表示

DockerでRuby on Railsの環境を構築する際のDockerfileのコマンド及びコード理解

## なぜ記事を書こうと思ったか
Rails用のDockerfileを作成する際にコマンド及びコードの理解を備忘録として残すため。

## Dockerfileとコマンド説明
Dockerfile
“`
FROM ruby:[バージョン]
RUN set -x && curl -sL https://deb.nodesource.com/setup_14.x | bash –

RUN set -x && curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | apt-key add – && \
echo ‘deb http://dl.yarnpkg.com/debian/ stable main’ > /etc/apt/sources.list.d/yarn.list

RUN set -x && apt-get update -qq && apt-get install -yq nodejs yarn vim default-mysql-client

RUN mkdir /app
WORKDIR /app
COPY

元記事を表示

【個人開発】温泉宿の情報交換ができる掲示板とSNSが組み合わさったサービス「みんなの温泉宿」を開発しました。

# はじめに
こんにちは。ひろかずと申します。独学でプログラミングを学んだ後、タイトルにあるようなサービス「[みんなの温泉宿](https://minnano-onsenyado.herokuapp.com)」を作ってみました。
作ろうと思った理由は主に以下の2点です。
##### ①自分自身が温泉宿に泊まってのんびりすることが好きで、情報交換ができる場を作りたかった。(掲示板)
##### ②温泉宿が好きな人同士で繋がれる場を作りたかった。(SNS)
これら①②を合体させて、掲示板+SNSの機能を持ったサービスとなりました。
![無題9.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2493043/5aa13fc4-854a-f352-e75c-ee0b2dc4e1f3.png)

# 工夫した点
##### ①会員登録無しでも使用可能
まずは誰でも気軽にお試し感覚で使ってもらいたいと思い、登録無しでも口コミ投稿・掲示板書き込み機能を使えるようにしました。その場合、その方の名前は「名無しさん」となり

元記事を表示

CarrierwaveとMiniMagickで画像アップロードの実現

## はじめに
自作PF作成中に結構時間を要してしまったので今後のためにまとめる

## 環境と前提
M1 Mac
Rails 6.1.4.7
Ruby 3.1.0
MacにImageMagicが入っていることが前提

## Image Magicが入っていることを確認
下記のコマンドを使用してimagemagickが入っていれば問題ないです
何も表示されなければ入っていません
“`shell:terminal
$ brew list | grep imagemagic
“`
入っていなければこちらのコマンドで入れてください
“`sehll:terminal
$ brew install imagemagick
“`

## Carrierwave

“`rb
gem ‘carrierwave’, ‘~> 2.0’
gem ‘mini_magick’

bundle install
“`
“`rb:terminal
# アップローダークラスを作成
# app/uploaders/image_uploader.rbを生成
rails g uploade

元記事を表示

[Devise]を導入してプロフィールページも作成する

## はじめに
Devise導入時に毎回Qiitaのいくつかの記事を参照していたので自分なりにまとめてみた。
環境 M1 Mac Rails 6.1.4.7 Ruby 3.1.0

## Deviceのインストール

“`rb:Gemfile
gem ‘devise’
“`

“`rb:terminal
bundle install
“`

“`rb:terminal
# 設定ファイルを生成する
rails g devise:install
“`

## Userモデルの作成
“`rb:terminal
rails g devise user
“`

## テーブルを作成
“`rb:terminal
rails db:migrate
“`

## nameとimageカラムをusersに追加

“`rb:terminal
# add_カラム名_to_テーブル名 カラム名:データ型
rails g migration add_name_to_users name:string
“`

“`rb:xxx_add_name_to_users.rb
# null:fa

元記事を表示

いいねボタンのAjaxが機能しません。リロードをしなければ反応しません。

# エラー
いいねボタンを押しても反応しません。

### destroy
エラーメッセージがなかったのでログを載せました。
“`
Started DELETE “/favorites/4950” for 14.12.68.160 at 2022-03-27 02:18:28 +0000
Cannot render console from 14.12.68.160! Allowed networks: 127.0.0.0/127.255.255.255, ::1
Processing by FavoritesController#destroy as JS
Parameters: {“authenticity_token”=>”*******==”, “id”=>”4950”}
User Load (0.2ms) SELECT “users”.* FROM “users” WHERE “users”.”id” = ? LIMIT ? [[“id”, 1], [“LIMIT”, 1]]
↳ app/helpers/sessions_helper.rb:17:in `c

元記事を表示

Rubyスクリプトの字句解析

Rubyを触っていく中で、「Rubyはどんな過程を経てコードが理解されて処理されるんだろう」と思って書籍を読んでそのアウトプットをしていこうとおもいます。

## 処理の流れ
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2485775/7e628acd-0c13-02c6-d318-5b5d0e01ec00.png)

全体的な処理の流れはこのような感じです。まずは全体の流れを抑えることが大事になりそうです。
この記事では、字句解析と構文解析までを書こうとおもいます。

## 字句解析
以下のコードを“`simple.rb“`ファイルに記述し、実行してみます。
“`
10.times do |n|
p n
end

# =>0
1
2
3
4
5
6
7
8
9
“`
まず、この文字列に遭遇すると、Rubyは**字句解析**を行います。
>字句解析とは、自然言語の文やプログラミング言語のソースコードなどの文字列を解析して、後半の狭義の構文解析で最小単位(終端記号)となってい

元記事を表示

rails_tutorial chapter9 <忘備録>ログインとログアウトの応用

chapter8では、セッションを利用してログイン・ログアウトを実装しましたが、chapter9ではcookieを利用して、永続的なログイン・ログアウトの実装をします。これはそこまでセキュリティーが求められないWebサービス向きです。

### 今回の実装のまとめ
1、Userモデルにremember_digestを作成
2、remember_digestにハッシュ化したトークンを保存(ハッシュは不可逆)
3、cookieにトークンと暗号化されたuser_idを保存
4、authenticated?(user)メソッドを使ってcookies[:remember_token]がremember_digestと一致することを確認

上で説明した設計やセキュリティ上の考慮事項を元に、次の方針で永続的セッションを作成する。

### remember_digestカラムをUserモデルに追加
“`
$ rails generate migration add_remember_digest_to_users remember_digest:string
“`

### rememberメ

元記事を表示

モデルを作る

Railsではコントローラやビューからモデルを使うプログラムを書くことがほとんどであり、まず機能に関連するモデルを用意するのが一般的だ。

//Postモデルの作り方。//

モデルは主に
1,モデルに対応するRubyのクラス
2,モデルに対応するデータベースのテーブル
の二つから構成される。

ちなみに命名の規則として
1は大文字で
2は小文字の複数形で書かなければならない。

理由は簡単で、データベースは複数のものを取り出すときに使う。
また、モデルはデータベースの書き込みならず読み出しも行う。
モデルは単体でデータベースが複数あるイメージを持っていただけると命名規則もわかりやすいかと思う。

つまり今回、例えば
1モデルをTaskと名づけたのなら2のデータベースはtasksと複数形になる。

次にどんなカラムを持たせるのかも考える。
“`
bin/rails g model [モデル名][属性名:データ型 属性名:データ型]
bin/rails g model Post name:string//短い文字列// comment:text //数字//
“`

1、railsの

元記事を表示

OTHERカテゴリの最新記事