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

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

メモ

Ruby基礎 2022/12/22
・変数を定義するときはビュー内ではなく、コントローラー内のアクションのアクションで定義することが一般的である
def index と end の間で定義するが 変数の前には@をつける。@をつけることによりアクション内で定義してもビュー内で利用できる

元記事を表示

RailsアプリにSchemaSpyを導入してER図を自動生成してみた(MySQL 8.0)

# はじめに
メタップスアドベントカレンダー第23日目です。

開発をしているとドキュメントを見ている時に 「あれ? 仕様と実装がちょっと違う??」 「このドキュメントが最後に更新されたのいつだろ??」 という状況に陥った経験がある方はいらっしゃるのではないでしょうか。

私は過去にRDBのリレーションを視覚的にパッと把握するためのドキュメントが見つけられない経験がありました。そこで、今回は**SchemaSpyを使ってER図を自動生成する方法**を試してみました。

## SchemaSpyとは
データベースの情報を元に、ER図、テーブル、カラムなどの情報をHTML形式のドキュメントとして出力するツールです。

# 検証
Railsアプリ、MySQL、SchemaSpyをコンテナ上で動かし、MySQLの情報をSchemaSpyで読み込み、ER図を作成していきます。SchemaSpyには [docker image](https://hub.docker.com/r/schemaspy/schemaspy/tags)を使用します。最終的なディレクトリ構成はこのようになります。

“`

元記事を表示

更新日時を全部更新しないようにするためのupdate_attributeとupdate_columnsの違い

?< [WEBCAMP ENGINEER COMMUNITY Advent Calendar 2022](https://qiita.com/advent-calendar/2022/webccamp-engineer-community) 23日目の記事です。
## 背景
大量のテーブルのとあるカラムを全て更新しようと思いました。

ただ、テーブルの`updated_at`が全部更新されてしまうのはちょっと怖いな…と思ったので良いメソッドがないか探したところ、ちょうどよく2種類用意されていたので、ここに簡単にまとめてみます?

## 結論
https://api.rubyonrails.org/classes/ActiveRecord/Persistence.html#method-i-update_attribute
こちらを読んでいただければ正確にわかります。

せっかくなので一部説明します。

### update_attribute(name, value)

“`
Updates a single attribute and saves the record.
Th

元記事を表示

Stimulus リファレンス: 値

:::note
この記事は[Google翻訳](https://translate.google.co.jp/)の結果を編集したものです。
:::

https://stimulus.hotwired.dev/reference/values

特別なコントローラープロパティを使用してコントローラー要素の[HTMLデータ属性](https://developer.mozilla.org/en-US/docs/Web/HTML/Global_attributes/data-*)を型付きの値として読み書きできます。

“`html

“`

“`javascript
// controllers/loader_controller.js
import { Controller } from “@hotwired/stimulus”

export default class extends Controller {
static

元記事を表示

Rails Renderデプロイガイド 【完全版】

# 背景
今回は、Herokuの代替案として有効的だったFly.ioが
クレジットカードを持たない人にサービスを提供しない方針になってしまったので
クレジットカードを持たない人向けにRender.comのデプロイ方法を
詳細にお伝えします?

この記事の通りに進めるだけでほぼ確実にデプロイできるはずなので
もし問題等がありましたら、コメントなどでお知らせください?

:::note warn
無料枠では、Renderのデータベースは90日まで+1つまでしか運用できません
こちらを了承できる方は進めていきましょう!
(90日後にDBを作成し直す必要がありそうです)
:::

# 手順
大きく以下の流れで進行します。
1. [PC上のアプリ内での準備](#pc上のアプリ内での準備)
1. [データベースの作成](#データベースの作成)
1. [Railsアプリとデータベースの接続](#railsアプリとデータベースの接続)

# PC上のアプリ内での準備
作成しているアプリの階層に移動しておきましょう!
移動するコマンド
`cd フォルダ名`

## Gemfileの編集
[公式](htt

元記事を表示

Vue.js in RoR の最新サンプルを作ったよ

Vus.jsをRoRに入れ込む形の実装サンプルを作りました。
**sprockets/webpackerなし**なのがポイントです。

出来上がったものは[こちら](https://github.com/isuke/rails-vue-sample)から見ることができます。

自分用の備忘録を兼ねて実装内容をここに残しておこうと思います。

## 0. 技術スタック

– Ruby 2.7.1
– Rails 7.0.4
– rspec
– Node.js 16.18.1
– Vue.js 3.2.45
– webpack 5.75.0
– TypeScript
– headless chrome

## 1. rails new

なにはともあれ`rails new`から始めましょう。
いろいろskipしていますが、「sprockets/webpackerなしなのでいらないもの」と「サンプルなのでいらないもの」があります。
「sprockets/webpackerなしなのでいらないもの」は必ずスキップしてください。
「サンプルなのでいらないもの」は必要に応じて入れてください。

元記事を表示

【Railsエンジニア寄り】GraphQLを無料で学べる教材を集めてみた。

## はじめに
RESTは業務で触ってたのですが、GraphQLは使ったことなかったので年末年始に個人開発でも使ってみようとキャッチアップがてら漁ったソースを忘備録的にまとめます。

## GraphQLとはなんぞや
> GraphQLは、APIのためのクエリ言語であり、既存のデータを使ってクエリを実行するためのランタイムです。GraphQL は、API 内のデータについて完全かつ理解しやすい記述を提供し、クライアントが必要なものだけを求める力を与え、API を長期にわたって進化させることを容易にし、強力な開発者ツールを可能にします。

公式としては上記の説明。ややとっつきにくいので調べた情報を端的にまとめてみる。

– GraphQLは、Facebookによって開発されたオープンソース
– REST APIと異なりWebサイトやモバイルアプリケーションでデータをやり取りするためのクエリ言語
– 取得するデータをサーバー側で指定してリクエストできるので、パフォーマンスの向上にも期待ができる

## REST APIとはどのように異なるのか
REST APIとGraphQLの主な違いは

元記事を表示

Rails カラム追加とロールバック

# はじめに
業務の中で既存のテーブルに対して、カラムの追加が必要なタスクがあったので色々調べて得た情報をまとめてみました。

# 手順1 マイグレーションファイルの作成
テーブのを作成や編集を行うにはマイグレーションファイルを作成する必要があります。

マイグレーション作成コマンドは以下になります。

補足) 業務のアプリケーションはdockerのコンテナ上で動作していたのでコンテナ上でrailsコマンドを実行する必要がありました。

“`
$ rails generate migration Addカラム名Toテーブル名 カラム名:データ型
“`

実際のコマンドだと…
“`
rails generate migration AddIntroductionToProfile
“`
みたいな感じになるかなと思います。

上記コマンドを実行すると“` db/migrete “`の配下に“` 20221222_add_introdunction_to_profile.rb “`みたいなファイルが生成されているはずです。

# 手順2 マイグレーションファイルの中身を確

元記事を表示

Google APIからGoogle Workspaceのユーザーデータにアクセスする最適な認証方法

## はじめに

本記事は[モチベーションクラウドシリーズ Advent Calendar 2022](https://qiita.com/advent-calendar/2022/mcs)の21日目になります。

リンクアンドモチベーションでソフトウェアエンジニアをしているnakagam3です。
最近業務の中でGoogle APIを利用する機会があったのですが、知識不足が故にかGoogle APIの認証周りを調べるのになかなか骨が折れました。今回は備忘も兼ねて調べたことをまとめてみます。

## Google APIの認証方式が3種類ある

Google APIには現在3種類の認証方式が存在するそうです。

### 1. APIキー方式

事前に発行しておいたAPIキーという文字列を、APIリクエストに含めて送信することで認証する方式です。
手軽な方式ではありますが、今回利用したかったAPIは対応していませんでした。
これはAPIキー方式が他2つに比べてセキュアではなく、Google Maps Platform APIなど一般公開されているデータにアクセスする一部のAPIにしか適して

元記事を表示

rails のヘルパーメソッドで yield を呼び出すと HTML が2重で表示される

「特定の条件の時だけ div 要素でラップする」みたいなヘルパーを作りました。

“`rb
module MyHelper
def my_method(wrap: false)
# wrap: false の時は、何も加工せずにブロックで渡されたHTMLを描画したい
return yield unless wrap

# wrap: true の時は div 要素でラップする
tag.div(class: ‘wrapper’) { yield }
end
end
“`

“`erb
<%= my_method(wrap: @flag) do %>

こんにちは!

<% end %>
“`

しかし、実際に動かしてみると、 `wrap: false` のとき、ブロックで渡したHTMLが2回描画されるという結果に・・・

“`html:結果

こんにちは!

<p>こんにちは!</p>

元記事を表示

rails チュートリアル 〜1日目〜

### rubyのバージョンを見る方法
– 現在使ってるrubyのバージョンを確認する
– 「0.0.0」特に左の数字がズレてるとやばいらしい
– 一旦左の数字だけは必ず合わせるようにする
“`
$ ruby –v
“`

元記事を表示

【Rails】ポリモーフィックを使用した抽象モデルの作成

ポリモーフィック関連付けを使用し、抽象モデルを作成したのでそのアウトプットとなります。

## 前提条件

今回車を例に説明します。
これまでのサービスでは「SUV」の状態を管理する`SuvClass`が存在しました。
しかし、新しい概念「スーパーカー」`SuperCarClass`を導入することになりました。
そこで、抽象クラス`CarClass`を作成し、`SuvClass`、`SuperCarClass`に従属させようと考えています。

※ そもそも設計に問題があるかもしれませんが、サンプルなのでお許しを。。

## ポリモーフィック関連付けを使用した経緯
これから新たに増える可能性のある車の概念に対して、車を特定するユニークな`id`が必要でした。

## 関連付け
関連付けは以下のようになります。

### モデル

“`ruby:sample.rb
class Car < ApplicationRecord belongs_to :carable, polymorphic: true end class Suv < ApplicationRecord has_o

元記事を表示

【Laravel9】入力したカラムを使って別カラムに値を入れる

## ユーザーが入力したカラムを使って、同テーブルの別カラムに値を入れたい
Railsを書いていた頃は、モデルに`before_save`メソッドを書いて
そこに計算式などを書いていたのだが、Laravelの場合どのように書くとやりたいことができるのか??

例えば、ユーザーが`height`と`weight`を入力したとして、
その値をシステムが計算し、`basemetabolism`というカラムに値を自動で入れてくれる場合、
Railsだと下記のようにモデルに記載することで実装できる。
(そもそもこれがベストプラクティスかはわからない)
“`ruby
before_save do
self.basemetabolism = 13.397*(weight)+4.799*(height)-5.677*(user.age)+88.362
end
“`

同様のやり方でLaravelでもできないかなと思ったのですが、
いまいちしっくりこなかったので、一次避難としてコントローラに直接計算式を書いてしまうことにしました。

### 実際のコード(Laravel)
“`php
pu

元記事を表示

railsチュートリアルの復習について

こんにちは。
今日はrailsチュートリアルの効率的な復習方法でいいアイデアを思いついたので
メモとして残そうと思います。
二つあります。

1.各章のファイルをgithubからダウンロードしておく
 cloud9を使っている初学者は各章のファイルをダウンロードしておくと解説している部分のコードを簡単に調べられて便利です。

2.常に手を動かす
 ノートに鉛筆で書いたり、分からなくてもコードを打ってたりすると、無理やり頭を動かせて極小でもインプットされるので大事かなと。

progateを初めて3週間少し経ちました。
まだまだ分からないことだらけですが初学者を卒業できるように頑張ります。ポートフォリオを来年の2月までには完成させたい!

元記事を表示

【Rails】楽天APIの導入

# 概要
備忘録として楽天APIの用いて検索する機能の実装方法をまとめます

# 参照
以下の記事を参考にしました。
ほとんど同じですが、上手く行かなかったところを自分なりに修正しました。
https://qiita.com/nabenomoto/items/6453c4577647cb8995d3

# 完成図
![rakuten.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2287171/12ff2948-de2a-6170-6dc3-578b0302d1cc.gif)

# API取得方法
こちらの記事で取得方法を詳しく解説してくださっているので、参考にしてみてください。
https://freesworder.net/rakuten-api-rails/

# アプリの作成
“`ruby:ターミナル
$cd desktop
$rails new rakuten_sample
$cd rakuten_sample
“`
# Gemをインストール
“`r

元記事を表示

Procって何?

## はじめに
“`Proc“`って知ってますか?僕は知らないです。

“`ruby
scope :old, -> { where(‘year_published < ?', 50.years.ago )} ``` Railsだと、上記のように```model```に```scope```を定義したりしますが、これは```lambda```によって```Proc```オブジェクトが生成されています。 Railsを触っていると```Proc```にはちょくちょく出会うので、出会った時にビビらないようにまとめたいと思います。 ## Procとは https://docs.ruby-lang.org/ja/latest/class/Proc.html >ブロックをコンテキスト(ローカル変数のスコープやスタックフレーム)とともにオブジェクト化した手続きオブジェクトです。

らしいです。処理自体をオブジェクトにすることができます。

**Proc**は**Procedure**を意味しています。

“`ruby
square = Proc.new{|a| a ** 2

元記事を表示

Stimulus リファレンス: アウトレット

:::note
この記事は[Google翻訳](https://translate.google.co.jp/)の結果を編集したものです。
:::

https://stimulus.hotwired.dev/reference/outlets

アウトレットを使用するとCSSセレクターを使用して別のStimulusコントローラー内からStimulusコントローラーインスタンスとそのコントローラー要素を参照できます。

アウトレットを使用するとコントローラー要素でカスタムイベントをディスパッチする代わりにコントローラー間の通信と調整が容易になります。

Stimulusターゲットと概念的には似ていますが、Stimulusコントローラーインスタンスとそれに関連付けられたコントローラー要素を参照するという違いがあります。

“`html

元記事を表示

Rails 自分用

controllerに処理を書く
“`ruby:controller.rb
def “html.erbとつなげる名前” ⇒ここに書いたものがhtml.erbとつながる(?)
#処理を書く
end

#通常の処理
def 〇〇〇
senaka = “タヌキのせなか”
@html.erbで使う名前 = “タヌキのおなか”(変数など)
@html.erbで使う名前2 = senaka
#html.erbで<%= @以下 %>で上記の文を出力できる
end

#select文
def □□□
@html.erbで使う名前(html.erbと書く) = SQLの名前.all ⇒ 全検索
.find(params[:検索したいデータのメンバ名]) ⇒ SQLなどのWHERE id = #{id} データ名で検索してそれに該当するカラムを取り出す。
end

#カラムを新規作成する際に呼ぶメソッド
def new
@html.erb = SQLの名前.new

#新規作成文
def c

元記事を表示

Google超え(?)の安全・高速認証ができるCloudflare TurnstileをRailsに導入

## TurnstileとCHAPTCHA
今回はTurnstileとCHAPTCHAについて説明しTurnstileをRailsのアプリに導入していきたいと思います。
先日CloudflareからTurnstileという認証テストのβ版が発表され、ユーザーのプライバシーを担保し高速なUXを提供し無料で利用できるということで従来のCAPTCHAの代替となりうるのではないかとされています。TurnstileはCAPTCHAとは違いTurnstileは高性能で不視性を保つ認証テストです。認証はユーザーの目の見えないところで起こり、人間が操作していることを判断の基準にします。

> Turnstile は、CAPTCHA の「ユーザーフレンドリーでプライバシーを保護する代替手段」として提示されています。プレス リリースによると、Cloudflare によると、通常、通過に平均 32 秒かかる人物の確認に使用されるインタラクティブなチャレンジが不要になり、プロセス全体が 1 秒に短縮されます

https://www.cloudflare.com/ja-jp/press-releases/

元記事を表示

RubyonRailsチュートリアル:実践メモ【目次】

#### 【第一章】
– [ターミナルを開く方法](https://qiita.com/suzuki_q/items/59fea2e882197f562ead)
– [ルートの設定方法](https://qiita.com/suzuki_q/items/755ed1a2602c20b12b50)
#### 【第二章】
– [Gitのバージョン管理下に置く](https://qiita.com/suzuki_q/items/3d9fdc8b79a6741b2b41)

#### 【第三章】
– [コントローラの新規作成](https://qiita.com/suzuki_q/items/2b3d5e31787a08d00759)
– [ローカルサーバーの使用方法](https://qiita.com/suzuki_q/items/c35c495de24d30abb32b)

元記事を表示

OTHERカテゴリの最新記事