Rails関連のことを調べてみた

Rails関連のことを調べてみた

【個人開発】旅行やデートのプランを共有するSNS「Go out Planning」を作成しました

# はじめに

![go_out_plannin_header_logo.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3782860/f3c0ab6f-8ce7-9888-4c21-f36ea3a3bfb9.jpeg)

はじめまして3rararaと申します!

今回は旅行やデートのプランを共有するSNS「Go out Planning」を作成したため、
記事にまとめておこうと思います

これからポートフォリオを作成しようと考えている方などの一例として、作成の一助となれば幸いです!

AI機能などまだまだ機能を追加予定ですので、その度に記事もアップデートできたらと考えています!✨

【サイトURL】

https://go-out-planning.net

【Github URL】

https://github.com/3rarara/go_out_planning

本記事では、「Go out Planning」の概要やこだわりポイント、
苦労した点などについて書いていきます!
機能の実装につ

元記事を表示

[Rails]あ…ありのまま、今起こった事を話すぜ!「おれはorder(created_at: :asc)と実装したと思ったら、created_at descのSQLが実行されていた」

な… 何を言っているのかわからねーと思うが
おれも 何をされたのか わからなかった…

頭がどうにかなりそうだった…
[reverse_order](https://railsdoc.com/page/model_reverse_order)をチェーンしていただとか超スピードだとか
そんなチャチなもんじゃあ断じてねえ

もっと恐ろしいものの片鱗を味わったぜ…

ということで、前置きはここまでにして実際に私が体験した話です。

タイトルの通り`order(created_at: :asc)`と実装したのに、SQLは`created_at desc`と実行される実装について説明します。

ここまでの話だけで、パッと実装が思い浮かぶ方はActiveRecordマスターだと思います…!
私は10年弱Rails触っていますが、初めて気づきましたw

## 実装

わかってしまえば、やり方は簡単です。
Userというモデルがある場合、下記実装では発行されるSQLのorderは逆になります。

“`ruby
User.order(created_at: :asc).last
“`

`

元記事を表示

大量発生していたスパム登録を防ぐことができたreCAPTCHAを紹介

サービスを運用していると、スパムによるユーザー登録に遭遇することがあります。
一度ならまだしも、頻繁にスパム登録をされてしまうと不要なデータが大量に発生してしまいます。

もし、スパム登録にお悩みであればGoogleが提供している[reCAPTCHA](https://cloud.google.com/security/products/recaptcha?hl=ja)の導入をおすすめします。

以前、大量のスパム登録に困ったいたところreCAPTCHAを導入してから途絶えたので、かなり有効なのではないかと思っています。

# reCAPTCHAとは

reCAPTCHAは、悪質なボットなどによるWebフォームからの送信を防ぐ機能です。

年々、ボットもreCAPTCHAの制限を突破するために進化してきているため、reCAPTCHAもバージョンが更新されています。
本記事投稿時点では、v3が出ています。

## v1

v1は歪んだ文字列をユーザーに提示し、入力したものが正解しているかを判定するものです。
現在はボットの画像認識精度が向上し、突破されるようになったため非公開となっていま

元記事を表示

rspecのtravel_toって便利

## はじめに
最近、rspecでtravel_toを使いテストを書きました。
使ってみて便利だなと思ったので共有します。

## travel_toとは
ActiveSupport::Testing::TimeHelpersのtravel_toメソッドです。

https://api.rubyonrails.org/classes/ActiveSupport/Testing/TimeHelpers.html

travel_toはある時刻を渡してあげれば、その時刻についてのテストを実装することができます。
実際にやってみたいと思います。

## travel_toのテスト例
travel.rbというmodelでcurrent_yearというメソッドを定義します。
これは単純に現在の時刻の年を返すメソッドです。
“`rb:app>models>travel.rb
class Travel < ApplicationRecord def self.current_year Time.zone.today.year end end ``` rails_helper.rb

元記事を表示

ネストしたルーティングの_pathヘルパーについて

## 読んで欲しい人
– `link_to post_edit_path(@post, @hoge)`でなんで2つ引数を入れているかわからん人へ
– 過去の自分

## 動作環境
– ruby 3.3.0
– Rails 7.1.3.3

## pathヘルパーとは
– URLを生成するための便利なヘルパー

こんなルーティングがあったら
“`ruby:routes.rb
resources :posts
“`

下記のようにURLを生成してくれる

– `posts_path`→/posts
– `new_post_path`→/posts/new
– `edit_post_path(:id)`→/posts/:id/edit
– `post_path(:id)`→/posts/:id

今回メインに扱うのは下記

– `edit_post_path(:id)`→/posts/:id/edit
– `post_path(:id)`→/posts/:id

基本的に、ビューやコントローラに`edit_post_path(@posts)`という使い方をする。
引数を指定して、リンク

元記事を表示

【Rails】saveメソッドとcreateメソッドの使い分け

## はじめに
データ保存などで使用する`save`メソッド・`create`メソッドをどういう使い分けをしたら良いかに悩んだので、
勉強がてら使い分けについてまとめました。

## saveメソッドの使用場面
`save`メソッドは以下のように使用します。
“`ruby:
user = User.new(name: ‘taro’, age: 18) #インスタンス生成
user.save #生成したインスタンスの保存
“`
`save`メソッドの戻り値は`true`か`false`です。
実行結果によって分岐をさせたい場合などは、`save`メソッドが使用できます。

## createメソッドの使用場面
`create`メソッドは以下のように使用します。
“`ruby:
user.create(name: ‘taro’, age: 18) #インスタンス生成+保存
“`

`create`メソッドは`new`と`save`を一度に実行してくれます。
しかし、createはインスタンスを戻り値として返すため、登録に成功したかどうかの判定には使用できません。

## まとめ

元記事を表示

簡単に rails API を実装してみた

# Docker

参考

https://zenn.dev/trysmr/articles/b9c99302ebc205

本記事では、web コンテナのポートを 80:3000 で実装している

# rails API 実装

## cors 設定

`Gemfile`

“`ruby_diff
+ gem ‘rack-cors’
“`

`config/initializers/cors.rb`

“`ruby
Rails.application.config.middleware.insert_before 0, Rack::Cors do
allow do
origins ‘http://localhost:3000’

resource ‘*’,
headers: :any,
methods: [:get, :post, :put, :patch, :delete, :options, :head]
end
end
“`

## ログイン機能実装

devise を使用する

### ライブラリインストール

`Gem

元記事を表示

論理否定の`!`と`nil?`メソッドを組み合わして使った際のメモ

# やろうとしたこと
– 条件分岐をさせるにあたって boolean で結果を取得したかった
– 「オブジェクトが nil なら false を返してほしい」という目的
– `nil?`は「nil なら true を返す」ので論理否定と組み合わせた

▲しかし、論理否定`!`をと`nil?`を組み合わせて使うと自分が想定している結果が返ってこない

以下にサンプルを示す
“`:ソースコード
p (“aaa”)
p !(“aaa”)
p (nil)
p !(nil)
p (“———-“)
p (“aaa”).nil? #【1】
p !(“aaa”).nil? #【2】
p !((“aaa”).nil?) #【3】
p (“##########”)
p (nil).nil? #【4】
p !(nil).nil? #【5】
p !((nil).nil?) #【6】
“`

“`:実行結果
“aaa”
false
“———-”
false #【1】
true #【2】
true #【3】
“###

元記事を表示

【Elastic Beanstalk】デプロイしたときにlibsass.soがないと言われた

どうもこんにちは。

今回は、Elastic Beanstalk環境にデプロイした時、libsass.soがないと言われたので、メモとして残します。

# 環境

## Ruby on Rails環境

Ruby 3.2.2
Rails 7.1.3.3
gem ‘sassc-rails’を使用

## EB環境

Ruby 3.2 running on 64bit Amazon Linux 2023/4.0.7

## エラー内容

上記に示した状態でデプロイを実行すると以下のようなエラーが出てきます。

“`
LoadError: Could not open library ‘/var/app/staging/vendor/bundle/ruby/3.2.0/gems/sassc-2.4.0/ext/libsass.so’: /var/app/staging/vendor/bundle/ruby/3.2.0/gems/sassc-2.4.0/ext/libsass.so: cannot open shared object file: No such file or direct

元記事を表示

ローカルでRailsを環境構築

### はじめに
今回はローカル環境で1からRailsを立ち上げるところまで解説したいと思います。ProgateやRailsチュートリアルなどは専用のエディタとクラウドIDEなどでRubyonRailsを学習することが可能ですが、より難易度を上げ挑戦したいのであれば、自分のパソコンに1から環境構築してみると良いと思います。今回はそんな環境構築を1から解説してみたいと思います

:::note warn
今回はWindowでのインストール方法で解説します
Macでは少々手順が違いますのでご注意ください
:::

## 環境構築の手順

インストールするもの
* Ruby
* データベース(今回はSQLite)
* Bundler
* Rails

この4つのインストールです
早速やっていきましょう

## Rubyのインストール

まずはRubyがインストールされているかを確認しましょう。ターミナル画面で以下のコマンドを打ってみましょう

“`
ruby -v
“`

こちらで以下のような表記が出れば既にインストールされているのでこちらはパスして構いません。
“`
ruby

元記事を表示

構想5年 元銀行員がデータ分析アプリを作ってみた

## [経済データ分析アプリonwut](“https://www.onwut.com/#)を作りました。
金融業界で3年、コンサル業界で1年働いた経験からデータを用いた分析が好きでwebアプリを作成してみました。
スマホは現状、未対応となっています。
https://www.onwut.com/

# [機能1 : データ](“https://www.onwut.com/data#)

* 経済に関する世界中のあらゆるデータを加工してまとめています。
日本のデータは日本銀行や統計局、東証等から取得しています。
米国のデータは中央銀行や労働局等から取得しています。
その他の国のデータは世界銀行から取得しています。
またデータの種類は随時追加していく予定です。
![スクリーンショット 2024-07-01 19.09.27.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/398994/d96148a8-01cc-0569-7c58-6e5dc3d05810.png)
https://www.onwut.co

元記事を表示

gem Faradayを使ったWordPress記事の取得方法について

## はじめに

アプリ制作の過程で、APIを利用してWordPressの記事を取得し、RailsのDBに保存をする実装を行いました。
その際に`gem Faraday`を使用したため、ここではその実装過程で得られた気づきをまとめます。
## 本記事の内容
`gem Faraday`を使いWordPress記事を取得する方法について

## 対象者

`gem Faraday`を使ってWordPress記事を取得する方法を知りたい方

## REST APIを使った記事取得方法
WordPress REST APIを使用することで、簡単に記事一覧を取得できます。例えば、今回取得したいWordPressのURLの後ろに `/wp-json/wp/v2/posts` をつけてアクセスするだけで、JSON形式で記事一覧が取得可能です。これを利用して、Rails側から記事一覧を取得する手順を説明します。

## Faradayのセットアップ
まず、Gemfileに gem ‘faraday’ を追加し、bundle install します。次に、Faradayの接続設定を行います。
“`ru

元記事を表示

コードレビューの指摘について

# はじめに
とあるコードレビューで指摘を受けた内容です。
今後の自分に対してのメモとしての備忘録です。

# 修正前
## 対象コード
“`ruby
scope :public_record, -> {
where(open_at: ..Time.zone.now)
.where(close_at: Time.zone.now…)
.or(where(open_at: ..Time.zone.now).where(close_at: nil))
.or(where(open_at: nil).where(close_at: Time.zone.now…))
}
“`
## 指摘内容
このスコープがとても見づらく、次に条件式を加える際に何処に手を加えればいいかわかりづらいとのこと

# 修正後
## 対象コード
“`ruby
scope :public_record, -> {
query1 = where(open_at: ..Time.zone.now).where(close_at: Time.zone

元記事を表示

Rails:PR前のセルフレビューチェックリスト メモ

## 内容
– Rubocopに引っかからない部分をチェックする

## 動作環境
– ruby 3.3.0
– Rails 7.1.3.3

## 使用しているもの
– haml-rails gem

## チェックリスト

#### link_toの書き方(haml)

– 悪い例
“`ruby
= link_to user_path(user), class: ‘text-decoration-none’ do
= user.name
“`

– 良い例
“`ruby
= link_to user.name, user_path(user), class: ‘text-decoration-none’
“`

**理由**

– リンク内がテキストだけであるというケースは、1行で書いた方が見やすい。リーダブルである
– なるべくインデントない方が見やすい

#### パーシャルでインスタンス変数を使用しない
https://qiita.com/MrTT/items/811fae89b31f4e588388

#### PRのタイトル、コメントは適切か?

– そ

元記事を表示

[Rails] モデルの関連付け纏め(アソシエーション)

## はじめに

[HappinessChain](https://happiness-chain.com/)で学習しているAisakaです。
苦手なアソシエーションの理解を深めるため、それぞれの使い方を纏めてみました。

## 注意点
この記事では以下の内容については解説していません。
– N+1問題
– アソシエーションのオプション(`dependent`等)

N+1問題ってなに?って方には次の記事が参考になるかと思います。

https://qiita.com/massaaaaan/items/4eb770f20e636f7a1361

## アソシエーションとはなにか?

アソシエーションとは、Railsにおいてモデル(データベースのテーブル)間の関連付けを定義する機能です。これにより、関連するデータを簡単に扱えるようになります。

例えば、映画レビューシステムでは「映画」と「レビュー」という2つの主要な要素があります。アソシエーションを使うことで、これらの関係を簡単に表現し、操作することができます。

## 目次
1. [has_many](#has_many)
2. [b

元記事を表示

rails s

# -p
サーバを起動するときのポート番号を指定(初期値:3000)
# -b
バインドするIPアドレスを指定(初期値:0.0.0.0)

### 気づき
このオプションを使うことで開くポート、IPアドレスを指定できる。

これでapacheからのリクエストすることができる。

# 出典
https://railsdoc.com/page/rails_server

# 感想
apサーバ、webサーバにapcheやpumaがあるおかげでhttpの通信ができているのかもしれない。
知らないことだらけだ。

# 関連記事
https://qiita.com/masatom86650860/items/2c438d910cb17d7b557f

元記事を表示

【JavaScript】Ajaxの書き方あれこれ

どうもこんにちは。

今回は、使用するライブラリによって書き方が変えられるAjaxについてメモとして残そうと思います。

# JavaScriptの場合(ライブラリなし)

“`javascript
fetch(`/users/${userId}`, {
method: “POST”,
headers: {
“Content-Type”: “application/json”,
“X-CSRF-Token”: document.querySelector(‘meta[name=”csrf-token”]’).getAttribute(‘content’)
},
body: JSON.stringify({
user_data: {
name: nametext
}
})
})
.then(response => response.text())
.then(data => {
console.log(“Ajax request successful.

元記事を表示

Rails Admin – 一覧ページでのデフォルトのソート順 ( ORDER )を決める

# 正順

“`rb
RailsAdmin.config do |config|
config.model ‘Example’ do
list do
sort_by :name
end
end
end
“`

# 逆順

“`rb
RailsAdmin.config do |config|
config.model ‘Example’ do
list do
field :name do
sort_reverse true
end
end
end
end
“`

# 公式

https://github.com/railsadminteam/rails_admin/wiki/List#default-sortingrai

# チャットメンバー募集

何か質問、悩み事、相談などあればLINEオープンチャットもご利用ください。

https://line.me/ti/g2/eEPltQ6Tzh3pYAZV8JXKZqc7PJ6L0rpm573dcQ

# プロフィール・経歴

元記事を表示

【Ruby on Rails】Turbo Stream 実行後にredirect_toを行う

## はじめに
Ruby on Railsを使用して開発を行っていますが、モーダルウィンドウの実装で詰まりました。
備忘録として問題解決までの手順を書き記していきます。
※環境や、知識の足りていないところがあるため、おおまかな情報になります。

## 環境

* Docker
* Ruby 3.3.3
* Rails 7.1.2
* bootstrap 5.3.0
* Hotwire(Turbo Stream)
* stimulus

## やりたかったこと
とあるページのログイン、新規登録処理をモーダルウィドウで行いたかった。
![モーダルウィンドウ実装.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/737553/a428c9c0-3eea-15fe-74c2-9e9b1b35a6b6.gif)

・`turbo_flame_tag`を使用し、Bootstrapのモーダルを読み込む。
・バリデーションエラーをモーダルで表示するためsubmitするための`form`に
“`Ruby: app/vi

元記事を表示

Rails APIのレスポンスをキャメルケースに変換するテクニック

Railsは通常スネークケースを用いてコードを書きますが、JavaScriptなどのフロントエンドではキャメルケースを好む場合が多いです。
そのため、要件によっては、RailsでAPIを構築する際にスネークケースからキャメルケースへの変換が必要になる場合があります。
ここではそんな時の変換テクニックをいくつか紹介します。

# 1. ActiveModelSerializersの使用
`active_model_serializers`というGemを使用します。

### 設定
initializerに以下の設定を追加し、全体でキーをキャメルケースに変換するようにします。
“` config/initializers/active_model_serializers.rb
ActiveModel::Serializer.config.key_transform = :camel_lower
“`
個別のレスポンスで異なる変換を行いたい場合は、render時に指定することも可能です。

### モデルのSerializer作成
それぞれのモデルに対してSerializerを作成します

元記事を表示

OTHERカテゴリの最新記事