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

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

Ruby on Railsでアプリを作成してみた【1】【recipegram】

##参考サイト
[【プログラミング入門】Ruby on Rails でウェブアプリを作ってみよう ~ PART 1(イントロダクション)~ Let’s build with Ruby on Rails]
(https://www.youtube.com/watch?v=auLih2TFwio&t=647s)

元記事を表示

Rails 複数 画像投稿 Cloudinary CarrierWave

# 環境
ruby 3.0.2
Rails 6.1.4.4

# 実装
cloudinaryの登録を済ませてください

https://cloudinary.com/

## gemの追加

“`ruby:Gemfile
gem ‘carrierwave’
gem ‘cloudinary’
“`

“`
$ bundle install
“`

## モデルの作成
PostとImageは1対多のアソシエーションで実装します

“`
$ rails g model post body:string
$ rails g model image post:references, image:string
$ rails db:migrate
“`
“`ruby:models/image.rb
class Image < ApplicationRecord belongs_to :post mount_uploader :image, ImageUploader end ``` ```ruby:models/post.rb class Image < Applicati

元記事を表示

form_withを使ったRails.fireの使い方

## form_withを使ったRails.fireの使い方

JS側からsubmitを行う方法として、Rails.fireを使う方法があります。
Rails.fireを使うとajax通信が可能になります。
form_withの中で、local: falseを指定することによって、html.erbがコンパイルされた結果のhtmlに「data-remote=”true”」が記述される様になり、ajax通信が可能になります。

– html.erb側

“`
<%= form_with(model: @hoge, url: '', id: 'hoge_form', local: false) do |f| %>
<%= f.text_field :name, placeholder: 'test' %>
<%= f.button id: 'hoge_submit' ,type:'button' %>
<% end %>
“`

– js側

“`
import Rails from “@rails/ujs”;

$(document).on (‘turbolinks:load

元記事を表示

FactoryBot(Rails)のtraitとは

## 概要
`FactoryBot`を使用する際の`trait`の使い方についてアウトプットしたいと思います。

## traitとは
FactoryBotでテストデータを定義する際に用いるオプションのことです。
`trait`を使用することによってテストファイル内でデータを定義する際により簡潔に記載することができるようになります。

## 使用例
### 前提
Userモデルにて`name`に10文字以内というバリデーションが定義されていると仮定します。
そのバリデーションについてのテストを行う際のテストデータの定義を行います。
なおテストの記載は割愛します。

_*factories/user.rb*_

“`ruby
FactoryBot.define do
factory :user do
name { ‘太郎’ }

trait :over_length_name do
name {‘a’ * 11}
end
end
end
“`
### traitを使用する場合
下記のように記載するだけで`name`が11文字のデータを定義

元記事を表示

Coudn’t find Tweet with ‘id’=index [rails エラー error]

# エラー内容
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/324819/724b77b6-6cf3-6a1f-492c-009af6fb4690.png)

開発してるとこんなエラーがでる

「idがindexなんてTweetは見つけられなかったよ」って意味ですね!

# エラーの解説
それはそう、だってDBの中に入っているレコードのidには、「1,2,3…」のような数字で割り振られてるから、その中から検索メソッド(今回はfindメソッド)を使って「index」という文字列でidを調べてもダメだよねって事です。

# エラーの原因
問題はroutesにあります。

“`config/routes.rb
Rails.application.routes.draw do
# 省略

get ‘tweets/:id’ => ‘tweets#show’,as: ‘tweet’
get ‘tweets/new’ => ‘tweets#new’
post ‘tweets

元記事を表示

Railsでタグ検索機能でページネーションをつける方法

# 前提

https://qiita.com/Kairi_Yasunnde/items/935dcdb8ec88b9ed9d91
この記事を見て、タグ機能とタグ検索をつけていることです。

# 概要
作者の開発環境

“`rb:環境
ruby 3.0.2
Rails 6.1.4.4
“`

# コントローラーの記述

コントローラーはpostsで作成されています。

posts_controllerのindexアクションを以下のように編集します。

“`app/controllers/posts_controller.rb
class PostsController < ApplicationController def index #ここから追記 @posts = params[:tag_id].present? ? Tag.find(params[:tag_id]).posts : Post.all #ここまで end ``` 以下の記述により、**`tag_id`**がセットされていたらTagから関連づけられたpostsを呼び、**`tag_idの指定

元記事を表示

Tempfile オブジェクトから Content-Type(mime type) を取得する方法

## やりたいこと

Tempfile のオブジェクトを作成後、そこから Content-Type(mime type) を取得したい。

## 解決策

[marcel](https://github.com/rails/marcel) の `Marcel::Magic.by_magic` を使うと取得できる。

“`ruby
> tempfile = # PDF を Tempfile オブジェクトに変換
> Marcel::Magic.by_magic(tempfile).type
=> “application/pdf”
“`

[実装](https://github.com/rails/marcel/blob/fc69a19d17de4fedca354b2404b04834b16eacd8/lib/marcel/magic.rb#L85-L88) を読むと `io` を引数に取れるみたいなので、 `File` クラスへの Delegator の `Tempfile` だけでなく `StringIO` もいけるかも(未検証)
ちなみに `activestorage` が依存し

元記事を表示

[JS]繰り返しの処理

アウトプットとして

Rubyの繰り返しの処理とは違う書き方をするので、自分の中で整理するために記事にしたいと思います。

##for文
JavaScriptでは、繰り返し処理を行う際にfor文を使用する。
構文は以下の通り

“`javascript
for([①初期化式]; [②条件式]; [③加算式]) {
// 繰り返す処理の内容
}

//例
for ( let i = 1; i <= 100; i++ ) { // 100回処理を繰り返す } ``` ①初期化式(initialization):for文の中で使用する変数を定義する。ここで定義した変数は「今何回目の処理か」を判定するために参照される。 ②条件式(condition):for文の処理を何回繰り返すかを指定する。この条件式の戻り値がtrueで有る限り処理が行われ続ける。往復する前に評価される。 ③加算式(final-expression ):初期化式として定義した変数の増減を記述できる。往復した後に評価される。 例)i = i+1とすれば1周ごとに1が加算されて、処理が実行されます。 i = i

元記事を表示

アプリを作る その2

###ヘルパーとは
新しく作ったメソッドはカスタムヘルパー と呼ばれます。

####ヘルパーを作成
app/helpers/application_helper.rb

“`rb
module ApplicationHelper
def full_title(page_title = ”) # ページタイトルを作成する デフォルトの引数は空
base_title = “自作アプリ”
if page_title.empty? # 論理値テスト
base_title # 暗黙の戻り値
else
page_title + ” | ” + base_title # 文字列の結合
end
end
end
“`

####full_titleメソッドを使いhtmlを作成
app/views/layouts/applicat

元記事を表示

Rails ルーティング

#Rails ルーティング設定
## ルート設定
rootを使用する

“`ruby:Routes.rb
root to: “main#index”
“`
## 名前空間を使用する
名前空間(admin)のteamsコントローラを使用する場合

“`ruby:Routes.rb
namespace :admin do
resources :teams
end
“`

元記事を表示

form_forを使ったRails.fireの使い方

## form_forを使ったRails.fireの使い方

JS側からsubmitを行う方法として、Rails.fireを使う方法があります。
Rails.fireを使うとajax通信が可能になります。
form_forの中で、remote: trueを指定することによって、html.erbがコンパイルされた結果のhtmlに「data-remote=”true”」が記述される様になり、ajax通信が可能になります。

– html.erb側

“`
<%= form_for hoge_model, url: '', html: { id:'hoge_form',method: put},remote: true do |f| %>
<%= f.text_field :name, placeholder: 'test' %>
<%= f.button id: 'hoge_submit' ,type:'button' %>
<% end %>
“`

– js側

“`
import Rails from “@rails/ujs”;

$(document).on (‘tu

元記事を表示

【Rails × CircleCI】初心者がCI/CD設定で躓いたエラー集と解決法

railsでポートフォリオ作成している初心者の私がcircleCI導入で遭遇したエラー集とその対応をまとめました。

“`
#version
Ruby 3.0.2
Rails 6.0.4
“`

# ① unable to parse yaml while parsing a block mapping

原因:ymlファイルの記法ミス

circle CIの設定関係なく、タブインデントを使用している等のymlファイル特有の文法に沿わない記述があると発生します。

解決法:
文法チェックのために毎回デプロイするのは面倒なのでデプロイ前の下記コマンドで文法チェックを行うことができます。

“`
$ circleci config validate
Config file at .circleci/config.yml is valid.
#この表示が出れば文法ミスはないことが確認できます
“`

# ②The following gems are missing

“`
[DEPRECATED] The `–path` flag is deprecated because i

元記事を表示

エンジニアなら一度は経験有り!? Nginxの502BatGatewayに対処して学んだ知識

# はじめに
先日、開発中アプリケーションの本番環境にアクセスしたところ、もやは全エンジニアにとってお馴染みとなった**502 BadGateway**に出会しました。

**「またコイツかよ!今度はなんだよ!」**と正直心の中で思いましたが、この問題への対処を通して初めて知り学べたことがあったので備忘がてら残したいと思います。

![502エラー.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/669969/6d215a25-e71e-e4af-9059-cd9ffb5ce9ff.png)


※開発中アプリケーションは以下のような環境です。
【環境】
– EC2(Amazon Linux2)
– Webサーバ (nginx/1.20.1)
– アプリケーションサーバ (puma/3.12.6)
– Ruby on Rails5.2.5

RailsアプリケーションをNginxをインストールしたEC2上で稼働させている

# 調査
## Nginxのエラー確認

まずは、どのような状況になっている

元記事を表示

memcachedの概要と動作確認

## はじめに
インターン先でMemcashedに触れる機会があったので、どんなものか調べてみました。
Memcashedについて様々な素晴らしい記事があり、それらを参考に体型立ててまとめたものなので引用が多くなっております。

## memcachedとは
とてもわかりやすい記事があったので、そちらを引用させていただきます。

>memcachedは高性能な分散メモリキャッシュサーバ。データベースへの問い合わせ結果を一時的にキャッシュすることで,データベースへのアクセス回数を減らし,動的なウェブアプリケーションの高速化やスケーラビリティの向上のために利用されている。
引用元:
[memcachedを知り尽くす ~第1回 memcachedの基本~](https://gihyo.jp/dev/feature/01/memcached/0001)

## 導入方法
>参考:[macでmemcachedを導入する手順 – Qiita](https://qiita.com/makotok7/items/9998b15f79fc7a53af24)

###インストール
“`shell:con

元記事を表示

Blocked hostエラーが出た時の対処法

①やりたいこと
Rails6の本番環境でrails sをしたときにBlocked hostエラーが発生しました。

②エラー内容
![e322b88f1ab7ec7e6f5ef601ef851134.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1962714/b6dd7688-9647-4acd-0858-85a183dbd69c.png)

今回の対処法は以下の記事を参考にさせていただきました!
https://qiita.com/kodai_0122/items/67c6d390f18698950440

https://weseek.co.jp/tech/680/

③原因
DNSリバインディング攻撃を防止する ActionDispatch::HostAuthorization middleware によるものらしい、、(Rails6から追加された機能です)

④解決策
3つありますが、基本的には一つ目の解決方法でOKです。筆者も一つ目で解決しました。

1. Rail

元記事を表示

Rails [管理画面] 管理画面へのログイン機能、管理画面トップページの作成 解説

#AdminLTE 3 のインストール

“`:ターミナル
yarn add admin-lte@^3.0
“`
・node_modulesというディレクトリが作成される。

#管理者画面用のマニフェストファイルの設定

・管理者画面ではユーザー画面とレイアウトが全く別物の為、管理者画面とユーザー画面は分ける。
・「app/assets/javascripts/admin.js」「app/assets/stylesheets/admin.scss」ファイルを作成。

“`:app/assets/javascripts/application.js
//= require jquery3
//= require activestorage
//= require rails-ujs
//= require bootstrap-sprockets
//= require cable.js
//= require tree. ←ここを削除
“`

・`//= require tree.`はapplication.jsと同じ階層の全ファイルを読み込んでいる。今回作成した、admin.j

元記事を表示

RailsのSTIで子クラスがfindに引っかからなくてハマった話

# 前提環境
“`
$ ruby -v
ruby 3.0.3p157 (2021-11-24 revision 3fb7d2cadc) [x64-mingw32]
$ rails -v
Rails 7.0.1
“`

# 問題
ツイッターのクローンアプリを学習用に作っていて、ツイート系のモデルが`Tweet < ApplicationRecord`、`NormalTweet < Tweet`、`Reply < NormalTweet`となる設計で実装しました。 ※Tweetはツイートの作成者`author`、NormalTweetはツイート内容`text`、Replyは返信先`reply_to`を持ちます。 それで開発中`NormalTweet.find()`にその子クラスである`Reply`が引っかるときと引っかからない時がある!(`Couldn't find NormalTweet with 'id'=n (ActiveRecord::RecordNotFound)`)という問題が発生。 # 原因 Rails(のデフォルトではdevelopment環境)では、クラスが使用さ

元記事を表示

【MinIO】RailsアプリケーションにS3互換ストレージ MinIO を導入してみる

# はじめに
プライベートでの共同開発において、「開発環境と本番環境の差異をできるだけ少なくしたい」という思いからローカルで動かせるS3互換ストレージを調べていました。業務で`fake-s3`というサービスを使用したことがありますが、MinIOというサービスも現場で使われている例を発見したのでそちらを導入してみました。

# MinIOについて
MinIOとはAWS S3互換のオブジェクトストレージのことです。

https://min.io/

* 特徴
* ローカルに仮想的な S3 環境を構築できる
* ローカルの仮想環境なので不用意にAPIを叩いてもお金も掛からない

# シナリオ
簡単なアプリを作成した後、MinIOを導入し、投稿した画像がMinIOに格納されるかを確認してみます。

### 1. アプリの土台を作成する
以下の機能をもつ簡易的なブログアプリを作成する。

* 記事一覧機能
* 記事詳細機能
* 記事投稿機能

#### 動作確認
MinIOを用いない状態で画像を投稿し、storageフォルダにファイルが格納されることを確認する

### 2.

元記事を表示

RailsでYoutubeの動画を投稿・編集する方法

# 概要

Youtubeにアップロードされた動画をRailsアプリで投稿したいという方に向けたものです。
Youtubeの動画を投稿した時にYoutubeのURLのなかで最後の11桁の値のみを取り出し、他の変数に取り入れるようにしている記事が多い。
それだと編集する時に、末尾11桁を入力しないとエラーが起こってしまうので、それが起きないような、その実装方法を記載します。

# 1. YouTubeURLの種類

### YouTubeURLは僕がパッと見た感じ3種類のURLが存在します

#### PCでのYouTube閲覧時のURL 一番スタンダード?

![qiita-1.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/364026/54573626-027c-083a-62a9-faf618d10c2a.jpeg)

#### 共有用URL (スマホで視聴中の動画を友達に共有するときはこれ)
https://

元記事を表示

renderで部分テンプレートを呼び出す方法

#はじめに
 この記事はプログラミング学習の備忘録です。今回はrenderを使って指定のビューファイルを呼び出す方法についてまとめます。
#viewでrenderメソッドを使う
 まずviewでよく使われるrenderメソッドの用法は、部分テンプレートを呼び出す時です。部分テンプレートとは複数のviewファイルで使われるコードを切り出して、共通化するファイルのことです。
renderで部分テンプレートを呼び出すためには、まずは共通部分をまとめた部分テンプレートファイルを作ります。
この時に気をつけることは、ファイル名の先頭にアンダーバーをつけて
**「_tweet.html.erb」**のような形にすることです。

次に部分テンプレートを呼び出します。呼び出し方は主に、
①部分テンプレートをそのまま呼び出す場合
②変数を渡す場合
の2つがあります。順番に説明します。 
#部分テンプレートをそのまま呼び出す
例えばformを作る部分テンプレートには変数を渡さず、そのまま呼び出されます。
まずは「_form.html.erb」というファイルを作り、

“`new.html.erb
<

元記事を表示

OTHERカテゴリの最新記事