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

Rails関連のことを調べてみた2022年11月09日
目次

2 Railsでログインユーザのアカウント管理機能 実装

Railsを用いてユーザアカウント管理機能を作成する。

## 1 エンドユーザーの会員情報編集画面を作成する

###### 編集画面 , 更新機能のルーティングを下記のように定義した。

“`Ruby
get ‘customers/edit’ => ‘public/customers#edit’
patch ‘customers’ => ‘public/customers#update’
“`

###### (1)編集画面を表示するアクションを記述する

app/controllers/public/customers_controller.rb

“`Ruby
def edit
@customer = current_end_user
end
“`

###### (2)ビューファイルを作成する
“`Ruby

エンドユーザ#会員情報編集

このurlは、データを送るupdateアクションのurl
<%= form_with model:@customer, url: "/customers", local:true do |f| %>

<

元記事を表示

1 Railsでエンドユーザーのサインアップとログイン機能、管理者のログイン機能を実装

## 1 Deviseの導入
#### (1)Gemfileに以下を追記する

“`
gem ‘devise’
“`
#### (2) bundle intallを実行する

## 2 顧客 , 管理者用のモデルを作成する

顧客のモデルを作成する
“`
rails g model devise Enduser
“`

管理者用のモデルを作成する
“`
rails g model Admin
“`

## 3 顧客 , 管理者用のテーブルを作成する
それぞれのマイグレーションファイルに以下を追記する

devise_create_end_users.rb
“`Ruby
t.string :first_name 名前 姓
t.string :katakana_first_name 名前 カナ 姓
t.string :last_name 名前 名
t.string :katakana_last_name 名前 カナ 名
t.string :postal_code 郵便番号
t.string :a

元記事を表示

7 新たなRouting、Controllerのアクションは追加しないで検索機能 , ジャンル検索機能を実装する

## 検索機能の流れ
1 検索フォームを作成する。
2 モデルにメソッドを定義する。
3 アクションを編集する。

## 1 検索フォームを作成する

“`
<%= form_with url: admin_items_path, local: true, method: :get do |f| %>
<%= f.text_field :word %>
<% end %>
“`

このフォームで送られるパラメータは、、、
“`
{“utf8″=>”✓”, “word”=>”×××”, “controller”=>”admin/items”, “action”=>”index”}
“`

###### ポイント

クエリパラメータは特に、設定しなくても使える

クエリパラメータの作り方
book_path(book.id)
本来は、book_path(id: book.id) (idというキーにbook.idという値を入れる)

params[:word]
本来は、book_path(word: “xxx”) => wor

元記事を表示

$ rails generate devise:install 実行後の4つのセットアップ

<開発環境>
・cloud9
・Rails:5.2.8.1
・Ruby : 2.6.3

<きっかけ>
自主制作アプリにログイン機能を追加しようと
gemに’devise’を追記した後、4つのセットアップをした時のやり方。

まずはgemfileに以下を追記。
“`
gem ‘devise’
“`
そしてターミナルで下記を実行する。
“`
 $ rails generate devise:install
“`

正常に実行されれば4つのセットアップの文が表示される。

ですが今回はエラーはないものの、正常にインストールしていなかったので
普段やるはずの以下の4つのセットアップ項目を追記していく。

1つ目
 アプリ名/config/environments/development.rb に下記を追記。
“`
  config.action_mailer.default_url_options = { host: ‘localhost’, port: 3000 }
“`
2つ目
 アプリ名/config/routes.rb に追記。
“`
    root to:

元記事を表示

本番環境(EC2)上でunicornは起動できたが、アクセスができない時に確認すべきこと

# 概要
下記記事を参考に、RailsアプリをAWS上で動かす設定をしていたが、unicornの起動後も色々とハマった。
その際の解決方法について。

> (参考)unicorn起動までにハマったこと
https://qiita.com/jibirian999/items/f793206a7b7adf485b7d

https://qiita.com/gyu_outputs/items/b123ef229842d857ff39#%E3%83%A6%E3%83%8B%E3%82%B3%E3%83%BC%E3%83%B3%E3%82%92%E8%B5%B7%E5%8B%95

# 環境
– アプリ
– ruby 3.0.2
– rails 6.1.4
– mysql 8.0.31

– EC2AMI
– Amazon Linux2 AMI

## エラー①ERR_SSL_PROTOCOL_ERROR
unicorn起動後、ChromeブラウザにてパブリックIPアドレスにアクセスしたところ、エラーが発生。

### エラー内容(ブラウザ上で表示)
>このサイトは安全に

元記事を表示

【Rails】bundle install Your Ruby version is 3.0.2, but your Gemfile specified 3.0.4の対処法

症状

DockerでGemfileのrubyバージョンを変更した後、ローカルでサーバーを実行したとき、下記のエラーが発生しました
Gemfileのバージョンが違うと怒られているようです。
ただ、Docker側でバージョンが3.0.4で使っているので、できればGemfileのバージョンを変えたくない・・・。

“`terminal:error
Your Ruby version is 3.0.2, but your Gemfile specified 3.0.4
“`

“`ruby:Gemfile
ruby ‘3.0.4’
“`

“`ruby:Gemfile.lock
RUBY VERSION
ruby 3.0.4p107
“`

解決策

以下のサイトにアクセスして、ローカル環境に該当のバージョンのrubyを入れて、解決しました。

https://rubyinstaller.org/downloads/

参考

https://rubyinstaller.org/downloads/

元記事を表示

jsファイルからGETでControllerに値を渡す

## 環境
Rails5.2
Slim

## はじめに
以前、「link_toでViewからControllerに値を渡す」という題で記事を書いたことがあります。この記事の内容は、Controllerへ受け渡すパラメータを、link_toで直接指定するといったものでした。

https://qiita.com/pyon_kiti_jp/items/545b391b3e101298c712

今回の記事は、link_toではなく、jsファイルにパラメータを指定してControllerへ渡すといった方法になります。jsファイルでパラメータを指定できれば、Viewで作成した画面項目に入力した値を、GETを使って、Controllerへ受け渡すといったことが可能になります。

## 事前準備
SeikyusControllerクラスの中に、testというメソッドを作成しました。
“`seikyus_controller.rb
class SeikyusController < ApplicationController def index end def test red

元記事を表示

[個人開発・独学]未経験者がHotwireのポートフォリオを作った話【Rails / Hotwire/ TailwindCSS/ Docker / AWS】

はじめに

都内の大学に通う(生物学科)3年のチャスと申します。
当記事ではタイトルの通り独学のみでポートフォリオ(以下PF)を作成した過程をご説明します。
記事の最後に、お世話になったWeb教材・記事をまとめましたので、参考にしていただければ幸いです。
開発期間は7ヶ月です。大学に通いながら暇なときにコツコツ作りました。また、開発前には学習(迷走)期間が10ヶ月程あり、基本情報技術者試験やRubyの書籍を読んだり、ネット上の簡単なアプリを作ったりしていました。

PF概要

制作したアプリケーションはこちらになります。
Karibito

アプリの説明

TOPページ(冒頭)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2607099/4c65b31d-aa19-26f1-1c41-476be507144e.png)

掲示板一覧
![image.png](

元記事を表示

ストロングパラメーターとParamsの復習

ストロングパラメーターとは

まずパラメーターとは、渡される情報のことです。
ストロングパラメーターとは、指定したキーを持つパラメーターのみを受け取るように
制限をかけたものです。
つまり「指定した情報のみちょうだいね」と制限をかけてくれます。

なぜこのストロングパラメーターが必要なのかというと、
以前のRailsは、送られてきたデータを全て保存することが実装によってはできたらしいです。
つまり改ざんされたデータを送信した場合も保存されてしまいます。
現在はストロングパラメーターを用いることで、許可していない不正な情報を
ブロックすることができるようになっています。

以下のコードを参照ください。

“`ruby:controllers/book_controller.rb
private
# ストロングパラメータ
def book_params①
params①.require②(:book).permit③(:title, :body)
end
end
“`

①paramsメソッド

シンプルに言えば、「送られてきた値を

元記事を表示

【個人開発】スムーズに会話を進めたいが、会話を上手く進められない人のためのアプリ「bilbil」を紹介します。

## はじめに
はじめまして!@icchankunです。エンジニア就活生です。
お忙しい中、この記事を見ていただき、ありがとうございます:bow:
個人開発でアプリを作成しましたので、それに関する記録を残したいと思います。

追加機能や不具合につきましては、随時開発・改善を行い、それについてもこの記事でまとめていきます。

## アプリ概要
**「bilbil」** (“ビルビル”)はスムーズに会話を進めたいけど、それがなかなか上手くいかない人のために **「ルーレット」** を使って、**トークテーマや話す順番などを提案してくれる**会話サポートアプリです。

![bilbil_ロゴ.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2626303/25a1305e-0a03-13e2-f522-e124074b198c.jpeg)

**「bilbil」** とは私が考えた造語で、二つの**bil**を組み合わせで出来ています。

**bil**とは 英単語**build**の省略形です。bilがbu

元記事を表示

6-3. オリジナル開発初期手引書

## 0. はじめに
企画面談お疲れ様でした!早速オリジナル開発を進めていきましょう!
このページは、オリジナル開発の第一歩を踏み出すときに使用します。
(“`rails new“`から削除機能まで)

まず、自分の企画面談シートを開いておきます。

このページでは、企画面談サンプルシートを使って説明していきます!

# 目次
1.railsアプリケーションの作成 & 開発の下準備
2.モデルの作成
3.ルーティングの作成
4.コントローラーの作成
5.新規投稿機能
6.一覧ページの表示
7.ログイン機能の作成(任意)
8.開発を便利にしてくれるツールの紹介

## 1. Railsアプリケーションの作成 & 開発の下準備

アクティブストレージを利用して複数枚の画像を投稿した際の単体テスト

アクティブストレージを利用して複数枚の画像投稿には成功した。
しかしテストコードで詰まったので記録。
結論
“`ruby
RSpec.describe Item, type: :model do
before do
@item = FactoryBot.build(:item)
@item.images = [ fixture_file_upload(“/files/test_image.jpg”)]
end
“`
このように書き換える。
画像1枚のときは fixture_file_uploadだけでよかったのですが、複数枚になったことで配列で渡す必要があったのですね。

元記事を表示

エラーメッセージを日本語対応にする

フリマアプリ追加実装にてエラーメッセージを日本語対応にしたので記録。
まずは
config/application.rb
“`ruby
config.i18n.default_locale = :ja
“`
を追記。これしないとエラーでます。

“`ruby
gem ‘rails-i18n’
“`
をgemファイル末尾に加えてbundle install(ローカル)
itemモデルのimageのところを
“`ruby
has_many_attached :images
“`
このようにhas_many_attachedに変える。image→imagesの複数形にすることも注意。
次にitemsコントローラー。
ストロングパラメーターを書き換える。
“`ruby
def item_params
params.require(:item).permit(:product_name,:product_description,:category_id,:condition_id,:contribution_id,:prefecture_id,:delivery_id,

元記事を表示

Firebase Authentication を試してみた~フロントエンド編~

## 環境
– Firebase
プロジェクトを登録して Google、GitHub の Authentication を設定済み

– 言語、フレームワーク
TypeScript、Next.js、React、graphql、React MUI

## Firebaseの設定
ここから、firebaseConfig を取得します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/91978/2b30461b-2ea4-c91e-5471-a2d311b7d69d.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/91978/eeef9a7a-5318-5b8c-1218-4f9e1480e646.png)
APIKeyなどは 環境変数に設定しなくても大丈夫なの? とも思ったんですが、どうやら大丈夫な模様。

https://qiita.com/hoshymo/items/e9c14ed

元記事を表示

ブロック、コールバックの使い方の一例

>どうもaono1234と申します。記事がいいなと思ったらtwitterのフォローもお待ちしております‼

皆さん、ブロック(コールバックメソッド)は使用されてますでしょうか?
自分は今日まで使ったことがありませんでした。?

どうも使いどころが分からないんですよね~
しかし、やっと使いどころが1つ明らかになりましたので共有させて頂きます。

## はじめに
本記事は以下の読者様が対象です。

* プログラミング初心者

* コールバックメソッド(ブロック)について知りたい

本記事ではRubyを題材に例題コードを作成しているため、コールバックではなくブロックと呼称させて頂きます。

## 先に結論
* ブロックを使うことで複数のメソッドをつなぎ合わせることができる。
* メソッドを拡張する際によりブロックを使えば、抽象的な名前に変更しなくてよくなる。

## 背景
私はオリジナルのスクレイピングコードを書いており、
以下のような自作メソッドを定義しておりました。

このメソッドはスクレイ

Railsガイドの「記事を削除する」で削除できなかった話

## はじめに
RailsガイドでRails入門中にはまったので誰かの助けになればと思い書いた。

## 問題
[Railsをはじめよう – Railsガイド](https://railsguides.jp/getting_started.html)でRailsに入門しているが、「7.5 記事を削除する」でうまく動かなくなった。
Destroyのリンクを押しても確認も出ずリロードされるだけで削除されない。
コードは以下である。
“`ruby
<%= link_to "Destroy", article_path(@article), data: { turbo_method: :delete, turbo_confirm: "Are you sure?" } %>

# https://railsguides.jp/getting_started.html 「7.5 記事を削除する」より
“`
開発用サーバ(bin/rails server)から出ているログやWebブラウザのネットワークやコンソールを見ても特にエラーは見当たらなかった。

## 環境
– OS: Ubuntu 22

本番環境(EC2)上でunicornが起動できない時に確認すべきこと

# 概要
下記記事を参考に、RailsアプリをAWS上で動かす設定をしていたが、unicornの起動から色々とハマった。
その際の解決方法について。

https://qiita.com/gyu_outputs/items/b123ef229842d857ff39#%E3%83%A6%E3%83%8B%E3%82%B3%E3%83%BC%E3%83%B3%E3%82%92%E8%B5%B7%E5%8B%95

# 環境
– アプリ
– ruby 3.0.2
– rails 6.1.4
– mysql 8.0.31

– EC2AMI
– Amazon Linux2 AMI

## unicorn起動
“`terminal:ターミナル(EC2)
# xx-xx-xx-xxはパプリックIPアドレス
[ec2-user@ip-xx-xx-xx-xx ]$ bundle exec unicorn_rails -c config/unicorn.rb -E production -D
“`

## エラー発生
“`terminal
master faile

[Ruby]関数を作成する上で心がけること

## ラベル付き引数

* 引数名がはっきりしているので渡す内容がわかりやすい。
* rubymineのIDEなどで自動保管してくれる
* 渡し忘れの引数があればエラーが出る
* デフォルト値も指定できるのでデフォルト値指定した分は省力できる
* 引数の順番気にしなくていい

“`
# 定義
def some_method(user: , require: false)
end

# 呼び出し型
some_method(
user: current_user
)
some_method(
user: current_user,
require: true
)
“`

## 普通の引数

* rubymineのIDEなどで引数名は把握できる
* 渡し忘れの引数があればエラーが出る
* デフォルト値も指定できるのでデフォルト値指定した分は省力できる
* 引数の順番を気にしなくてはいけないので数が多いと面倒
* 1・2個の引数でメソッド名からもわかりやすければ楽
* User.find(1) / User.find_by(id: 1) 左が楽

“`
def

Rails 7 で複数の CSS のエントリーポイントを使う方法(管理画面は本体とは別の CSS を使いたいときなど)

## 対象

npm パッケージの [sass](https://www.npmjs.com/package/sass) を使っている

:::note info
`rails new` 時に `–css` オプションで bootstrap や bulma, sass を指定した場合は npm パッケージの sass がインストールされています。
:::

## 結論

sass の Many-to-many Mode を使います。

https://sass-lang.com/documentation/cli/dart-sass#many-to-many-mode

具体的には `package.json` のスクリプトのうち、 sass で scss ファイルをコンパイルするコマンドの引数を変更します。

## 例 `application.bootstrap.scss` とは別に `admin.scss` を使いたい場合

`./app/assets/stylesheets/admin.scss:./app/assets/builds/admin.css` を追記します。

【Rails6】終了日のバリデーションはValidatorが使える

## 環境
Rails 6.0.1
Ruby 2.6.3
PostgreSQL 11.16

## 状況
終了日が開始日より先にならないようにバリデーションをかけたい。
開始日は必須パラメータで、終了日はオプション。

## before

“`ruby
class Period
attr_reader :start_date, :end_date

def initialize(start_date, end_date)
@start_date = start_date
@end_date = end_date
end

def validate_finish_contract_date!
return nil if end_date.blank?

raise ActionController::BadRequest, ‘不正な終了日です’ if end_date.to_date < start_date.to_date end_date.to_date end end ``` ## after 別クラスに切り出さな