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

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

TuboLinksでreadyイベントが発火できるようにする

## 環境
Rails5.2
jQuery3

## はじめに
RailsではデフォルトでTurobLinksが有効になっており、RailsでJavaScriptを動かすと、WindowのLoadイベントが発火しないという問題がありました。

詳しくはこちら。
https://qiita.com/pyon_kiti_jp/items/8dd1e94ba13003cb4520

JavaScriptだけでなく、jQueryを使う場合でも、同じような問題が発生します。JavaScriptでは、documentオブジェクトを使い、パラーメータを、loadからturbolinks:loadに書き換えることで回避できました。jQueryにおいても、似たような方法で回避することができます。jQueryにおける回避方法について、書いてみました。

## やったこと
画面をロードするとき(初回ロード、リロード共に)、jQueryで発火するイベントは、readyイベントになります。JavaScriptのloadイベントに該当するjQueryのイベントが、readyイベントということです。(※ VBでいう

元記事を表示

ページネーションレイアウト

## 初めに
前回はページネーションの実装について投稿しましたが今回はレイアウトについて投稿していきます。
すでに’kaminari’をGemfileに入れている方は 新たに’bootstrap4-kaminari-views’を入れてviewページの記述の所を見て貰って構いません。
まだ、’kaminari’をGemfileに入れていない場合は上から順にやって頂けたら幸いです。

## Gemfile
まずGemfileに
“`
gem ‘kaminari’,’~> 1.2.1′
“`
“`
gem ‘bootstrap4-kaminari-views’
“`
上記の記述を入れてあげます。
記述をしたら忘れずに

“`
bundle install
“`
をしましょう。
bundle installをしたら次にkaminariの設定ファイルを作成する為に下記のコマンドをターミナルに打ち込みます。
“`
$ rails g kaminari:config
“`
最後に、kaminariが利用するテンプレートを作成してあげます。
“`
$ rails g kami

元記事を表示

【Rails】Carrierwaveを用いてAWSのS3にPDFのアップロードとダウンロードを可能にする。

# はじめに

PDF投稿機能。cloudinaryではpdfに対応していないので、AWSのS3を使ってPDF投稿を実現しました。

# 開発環境
– Ruby 3.0.4
– Rails 6.1.7

# 前提
– tweetsコントローラーで投稿機能作成済み
– tweetsテーブルにはpdfカラムstringで用意
– [AWSアカウント登録済](https://aws.amazon.com/jp/free/?gclid=Cj0KCQjwqoibBhDUARIsAH2OpWjwD6i56zlT62LqzwhLLLs-Pwqdqo91PMZ_10Pre8KXy7wURDGgIOkaAuJXEALw_wcB&trk=94c18984-27d1-4395-8dae-cdbf523f1ae5&sc_channel=ps&s_kwcid=AL!4422!3!568105078079!e!!g!!aws&ef_id=Cj0KCQjwqoibBhDUARIsAH2OpWjwD6i56zlT62LqzwhLLLs-Pwqdqo91PMZ_10Pre8KXy7wURDGgIOkaAuJ

元記事を表示

Ruby 麻雀 配牌のシャンテン数をカウントしたい①

# 現状の課題
麻雀牌全種類から無作為に14枚取り出す構造はできたため、そこから取り出された値を見て
シャンテン数をカウントしたい。
これがいくら考えてもいい方法が思いつかない。。。
ただまずは今の配列データのままでは面子の判断も難しいので、配牌の萬子、筒子、索子、字牌がそれぞれどれくらいあるかのカウンターを作ってこれをもとに判定する機能を設けようかと考えました。

# 作成コード

“`ruby:pia.rb
def shanten
mcounter = [0, 0, 0, 0, 0, 0, 0, 0, 0]
scounter = [0, 0, 0, 0, 0, 0, 0, 0, 0]
pcounter = [0, 0, 0, 0, 0, 0, 0, 0, 0]
zcounter = [0, 0, 0, 0, 0, 0, 0]
@haipai.each do |pai|
pai_num = pai.split(/\s*/)
val = pai_num[1].to_i – 1
case pai_num[0]

元記事を表示

【Rails】PG::UndefinedTable: ERROR: relation “users” does not existの対処法【DB】

症状

DockerでRailsの環境構築後にDB:migrateをしようとしたとき、下記のエラーが発生しました。

“`terminal:error
PG::DuplicateTable: ERROR: relation “users” already exists
“`

マイグレーションファイルは以下を使用していました。

“`terminal:マイグレーションファイル
20210817024851_photos
20220817024851_users
“`

“`terminal:20210817024851_photos
class CreatePhotos < ActiveRecord::Migration[6.0] def change create_table :fhotos do |t| t.references :user, null: false, foreign_key: true t.string :name, null: false t.string :image t

元記事を表示

紛らわしいRubyの@とselfについて

Rubyのクラスについて紛らわしい@とselfの違いを自分の備忘録としてまとめます。

クラスの基本内容については[先日まとめた記事](https://qiita.com/bellmmm/items/a1292d5143d0f128c009)をご確認ください。

# 紛らわしい@とself
クラス内でインスタンス変数を参照するのに、例えば`@name`と`self.name`のように、@が使われる場合とselfが使われていることがあります。この違いは何なんでしょうか?

# 前提知識

## インスタンス変数
`@name`のように最初に@が付いたものはインスタンス変数そのものを表しています。つまり、データの入れ物それ自体を表しています。

## インスタンスメソッド
一方、`self.name()`のように最初にselfが付いたものはインスタンスメソッドの呼び出しを表しています。下に例を示します。

“`ruby
class S
def calc
return 1+1
end

def call_calc
# クラス内でインスタンスメソッドを呼び出

元記事を表示

タグ機能をつけてみよう

# はじめに
この記事ではいわゆるタグをつけて投稿し、そのタグによって検索できる仕組みを実装しています。
前提としてTweetモデルにて投稿機能を扱う状態からタグ機能を追加していきます。

実装内容一覧
1. タグモデルの作成
2. モデルのアソシエーションの設定
3. デフォルトのタグをseedファイルで用意する
4. Tweet投稿の際、タグの投稿を可能にする
5. コントローラーでタグ配列を受け取れるようにする
6. 各Tweetにつけられたタグを表示する
7. 複数タグの検索をできるようにする
8. 新たなタグの追加をできるようにする
9. タグ機能に関するその他の記事

# 1. タグモデルの作成
まず、今回使用するモデルは以下の3つになります。

|Tweets|Tweet_tag_relations|Tags|
|—|—|—|
|id|id|id|
|title|tweet_id|name
|body|tag_id|

– Tweets
– 投稿テーブル
– Tags
– タグに関するテーブル
– Tweet_tag_relatio

元記事を表示

railsでデータベースを作るときのメモ

## Terminalでのコマンド例
“`bash:terminal
1:rails g model model_name
2:rails db:migrate
“`
1のコマンドでモデルファイル`model_name.rb`とマイグレーションファイル`create_model_names.rb`の二つが作成される。マイグレーションファイルにdbの構造を書き込んで、モデルファイルにバリデーションを書き込む。

## マイグレーションファイル
“`ruby
class CreateEvents < ActiveRecord::Migration[7.0] def change create_table :events do |t| t.references :users, null: false, foreign_key: true t.string :name, null: false t.timestamps t.index :name end end end ``` ### 制約 マイグレーションファイ

元記事を表示

railsの複合ユニークを追加するときに詰まったこと

既に作成しているdbのカラムに複合ユニークを追加しようとした際に詰まったので記録。
## 原因
今回複合ユニークを設定しようとした`user_id`と`event_id`はt.referencesでカラムを作成していたため、既にindexがついていた。そのため、add_indexの構文で複合キーを設定しようとするともうそのindex名が存在するためエラーになる

## 吐かれたエラー
“`
Mysql2::Error: Duplicate key name ‘index_answers_on_event_id_and_user_id’
“`

## 解決方法
一回、indexを削除して付与し直すという方法をとり、エラーを回避した。
“`ruby
class ChangeColumnSettingsFromAnswers < ActiveRecord::Migration[7.0] def change remove_index :answers, column: [:event_id, :user_id] add_index :answers, [:event

元記事を表示

Railsで削除してしまったデータを復元する

# はじめに
最近3つあった案件が2つ急になくなってしまってピンチのフリーランスエンジニアの[藤井](https://twitter.com/YoshitsuguFujii)です。

えっ。不況?
最近は釣りばっかりしています。

ということで時間があったのでQiita初投稿です。


# 道具箱を持とう
さていきなりですがみなさん道具箱お持ちでしょうか?

道具箱というのは自分が開発、運用、調査などをする際に便利に使える自分専用のツール類(主にcliツール)のことです。


問題解決のためには、もちろんネットで探して既成のソフトを使ってもいいんですが、せっかく自分でコードを書けるのだから自分で作って自分の道具箱に追加しましょう。
特に新人の方はスキルも上達するのでおすすめです。
どこかから持ってきたコードを改造して使ったりしてみてもいいです。
日々使い続ける上で自分好みにカスタマイズしながら洗練させていきましょう。

# 心構え

自分しか見ないし使わないのでコードは汚くていいんです。可読性なんて考えなくていいです。まさかりも飛んできません。
なのでPRで辛辣なことかかれません

元記事を表示

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

元記事を表示

OTHERカテゴリの最新記事