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

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

【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をインストール
“`

元記事を表示

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

https://www.cloudflare.com/ja-jp/press-releases/2022/privacy-preserving-captcha-alternative/
### CAPTCHAの背景

CAPTHCAというのはサービスを操作しているのが人間かbotか

元記事を表示

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)

元記事を表示

マイグレーションファイル

# マイグレーションファイルとは?
以下を実行するためのプログラムファイルのことです。
* “`データベーステーブルのカラムの追加・変更・削除“`
* “`indexの追加・変更・削除“`
* “`カラムの名称やデータ型の変更“`

### 出典
https://www.sejuku.net/blog/60950#:~:text=%E3%83%9E%E3%82%A4%E3%82%B0%E3%83%AC%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB,%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%81%AE%E3%81%93%E3%81%A8%E3%81%A7%E3%81%99%E3%80%82

* p36 “`テストやデータベースのテーブル定義を行う“`migrationファイルなどが生成されます。
* p38 “`データベースの操作を行う“`migration(マイグレーション)ファイルが生成される
* p39 ファイルの中身は“`

元記事を表示

Railsアプリのrubyのバージョンを2.7から3.1へ上げる作業を1日で終わらせるために大切なこと

# はじめに

お久しぶりの投稿となったQiita。
最近はRails書きながら、AWS構築したり、python書いたり、typescript書いたりな生活です。
たまにはなんか書いてみようかと筆を取りました。
今回はruby2.7を使っていたRailsアプリをruby3.1へアップグレードしたという事例をもとに
__やっておいてよかったこと__ を紹介していきます。

# 結末は2行で

– rubocopは最初から
– テストカバレッジの目標は100%

# アップグレード前の状態

さてアップグレードの話をする前に、アップグレード前の状態について説明しておきます。

アプリケーションとしては2017年頃に開発が始まったもうすぐ6年生。
ruby2.4から始まり、2.7までは毎年順調にアップグレードされていたアプリです。

## コントローラー数等

`rails stats`の結果より

“`
+———————-+——–+——–+———+———+—–+——-+
| Name

元記事を表示

createの条件分岐ができない

## まえがき
新規ユーザーの登録ページにて情報を登録できたら`redirect_to`でトップページへ。
登録できなかった場合は`render`で新規登録ページに遷移するという分岐を設定したかったのですが・・・
登録できても、できなくてもトップページに遷移してしまうという症状に悩んでいました。
解決策が分かったので、記録します。

__参照先:__
[Taroken Fintech様:【Rails】createメソッドとnew+saveメソッドの使い分けを解説](https://tarokenfintech.com/%E3%80%90rails%E3%80%91create%E3%83%A1%E3%82%BD%E3%83%83%E3%83%89%E3%81%A8newsave%E3%83%A1%E3%82%BD%E3%83%83%E3%83%89%E3%81%AE%E4%BD%BF%E3%81%84%E5%88%86%E3%81%91%E3%82%92%E8%A7%A3%E8%AA%AC/) 
お陰様で解決できました!ありがとうございます!:bow_tone3:

以下がその時の記述

元記事を表示

グループごとに投稿できる機能

こんにちは。寒すぎて凍えているGeeksalonの限界メンターです。

「アーティストごとにアルバムを投稿したい」、「飲み会ごとに飲んだ量でランキングを実装したい」、「旅行プランごとに行き先を登録したい」etc…

そんな声に応えた機能を実装してみました。ユーザーのグループ機能はあったんですが、投稿をグループ化するのはぱっと見つからなかったので、初めてですが記事を書いてみました。未熟者ではありますが、温かい目で読んでみてください♪

## 【目次】
1. 開発環境
2. 概要
3. アソシエーション
4. 機能実装
 ➢ モデルの作成
 ➢ コントローラーの作成
 ➢ アソシエーション
 ➢ HTMLの実装
  ・ おまけ:ランキング


## 【 1. 開発環境 】
・ruby 3.0.4
・rails 6.1.6

**- 前提 -**
・Userの機能は実装済み
・TweetのCRUD機能は実装済み


## 【 2. 概要 】
– コントローラー・モデルは以下3つ
– User:ユーザー
– Tweet:投稿(好きなものに置き

元記事を表示

脆弱性から学ぶRailsの仕組み(CVE-2022-23633編)

# 脆弱性から学ぶRailsの仕組み(CVE-2022-23633編)
少し前にやった[脆弱性からRubyの仕組みを学ぶやつ](https://qiita.com/0kate/items/e0209cd83b4992d75b19)を`Rails`でもやってみる記事。
前回同様「脆弱性の原理を把握する」という側面から、実際に脆弱性を試しつつ「その本体の仕組み」も学んでしまおうという趣旨。
`Rails`も業務で使うようになったので、これもちゃんと学んでみようと思う。

# 対象の読者
この記事の対象となる人はこんな感じで想定。
– `Rails`を使い始めたばかりで仕組みから学びたい人
– `Rails`はよく使ってるけど仕組みはよくわからないから知りたいという人

自分のような`Rails`入門したてホヤホヤの方にも勉強になれば嬉しいので、自分の理解度整理も含めて「`Action Pack`って何?」みたいな説明を軽くする箇所もあるためその辺はご了承ください。

# Ruby on Rails
さっきから「Rails、れいるず」と言っているもの。
言わずとしれたRubyのWebアプリケ

元記事を表示

Hotwireを理解するために選曲アプリを作ってみた

# はじめに
[Ateam Finergy Inc.× Ateam CommerceTech Inc.× Ateam Wellness Inc. Advent Calendar 2022](https://qiita.com/advent-calendar/2022/finergy-commerce-tech-wellness)の21日目の記事です。
本日はエイチームコマーステックの@hibiheionが担当します。

**Hotwire**はJavaScriptを使わずにSPA(Single Page Application)を作成することができる仕組みです。Rails 7では標準機能になっています。業務でRailsを使っている身としては無視できない技術だったので作ろうと考えていた個人開発のWebアプリに導入してみました。

# 選曲アプリの概要
カタログ情報を見ながら選曲するためのWebアプリです。ジャズをよく聴くのですが、その目線で見るとSpotify(に限らず私が知っている音楽ストリーミングサービス)が持っている情報が物足りないと感じていたことが作成理由です。本題から逸れるので

元記事を表示

Stimulus リファレンス: ターゲット

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

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

ターゲットを使用すると重要な要素を名前で参照できます。

“`html

“`

# 属性と名前

`data-search-target`属性はターゲット属性と呼ばれ、その値は`search`コントローラーで要素を参照するために使用できるターゲット名のスペース区切りのリストです。

“`html

元記事を表示

Litestreamを使ってSQLiteをS3にレプリケーションしてみた

## はじめに
昨今の円安でAWSコストを抑えるために[Litestream](https://litestream.io/)を試してみました。

## 環境
MacOS Monterey 12.5
Docker 20.10.21
Compose v2.13.0
Rails 7.0.4(Ruby 3.1)
SQLite 3.34.1
Litestream v0.3.8

## Rails(Docker)環境の下準備

“`Dockerfile
FROM ruby:3.1
ENV APP_ROOT /usr/src/app
ARG RUBYGEMS_VERSION=3.3.20

RUN apt-get update -qq \
&& apt-get install -y vim sqlite3 nodejs npm \
&& rm -rf /var/lib/apt/lists/* \
&& npm install –global yarn

# Download the static build of Litestream directly into the path

元記事を表示

DBにreferences型のカラムが追加できない

## 起きた問題
マイグレーションファイルに`refereces型`のカラムを追加したかったが、マイグレーションできなかった。

### 試したこと
全てロールバックした後、DBを削除し作り直し、マイグレーション。←ダメ
試しに`referenes型`のカラムだけマイグレーションファイルから消してマイグレーション。 ←できる

## 解決方法
参照先:[箱のプログラミング日記。](https://www.y-hakopro.com/entry/2019/06/29/103112)様
ありがとうございます:bow_tone3:

`rails g migration Addカラム名Toテーブル名 追加したいカラム名:カラム型`でマイグレーションファイルを生成。

中身を以下の内容に書き換え。

“`ruby
class AdduserToPrototypes < ActiveRecord::Migration[6.0] def change change_table :Prototypes do |t| t.references :user, foreign

元記事を表示

【Rails】インスタンス一覧と新規インスタンスを同時に取得するときの挙動が少し意外だった

# はじめに
先日、一覧を取得するページで新規レコードも登録できるフォームを設置する必要に迫られましたのですが、その時Railsが自分としては意外な動きをする部分があったので紹介します。
# 完成形イメージ

– `User`と`Task`モデルは1対多の関係
– `Task`の一覧を表示しつつ、同じページに新規タスクの入力フォームを設置

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1051539/c58768c4-a081-21fb-4dfd-8cba4e7530c4.png)

# エラーが発生するコード

“`ruby:tasks_controller.rb
def index
current_user = User.find(params[:user_id])
@tasks = current_user.tasks
@task = @tasks.new
end
“`
`@tasks`の書き方を変えた下記でも同じです。

“`ruby:tasks_contro

元記事を表示

RubyonRailsチュートリアル:実践メモ【第三章】

Ruby on Rails チュートリアル(Webサービス開発が学べる学習サービス)に従って、MVCフレームワークアプリケーションを作成していく。

**使用ツール** :
AWS Cloud9
## ローカルサーバーの使用方法
ローカルサーバーについてのまとめ。

※サーバーウィンドウの出し方
1. 一番上のメニューバーから、**preview**を選択する
1. **Preview Running Application**を選択する

#### **サーバーを立ち上げる**
“`
$ rails server
“`
※サーバーを立ち上げる際は、サーバー用とコマンド用のターミナルを分けると良い。
[新しくターミナルを開く方法](https://qiita.com/suzuki_q/items/59fea2e882197f562ead)
#### **サーバーをシャットダウンする**
`ctrl + C`

#### **ローカルサーバーが立ち上がらない時の対処法**
ポートが使用中というメッセージが出た場合、コマンドで実行中のファイルを確

元記事を表示

railsヘルパー link_toメソッド

“`Ruby
link_to “Home”, ‘#’
“`

Link_toメソッドの第一引数にはリンクテキスト、第二引数にはURLを書く。

“`html
Home
“`

元記事を表示

OTHERカテゴリの最新記事