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

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

【Rails】f.text_areaのサイズ指定の仕方【Bootstrap】

# 結論

“`html

<%= f.text_area :content, class: "form-control", style: "width:40%", rows: "3" %>

“`

## 解説
+ 親要素に`form-label`のクラスを付与する。
→`form-floating`クラスだと`rows`の指定が出来ない。

+ `text_area`に`form-control`のクラスを付与する。

+ `text_area`内で`style: “width:XX%”`と`rows: “X”`を指定する。

## 注意
属性の付与は`○○:`といったシンボルの形式を指定すること。
`,class=”{任意の値}”`のような形式を追加すると下記のようなエラーメッセージとともにバグが発生する。

“`terminal
[NOTE]
You may have encountered a bug in the Ruby interpreter or extension libraries.
Bug

元記事を表示

ActiveRecordモデルの拡張検討

ActiveRecordモデルの拡張方法にはいくつか選択肢があるので、どういった方法を選ぶのが適切かよくよく考えなおしてみたいと思います

## 今回のストーリー
新規ユーザーは必ず無料のサンプルを受け取ることができるので、ユーザーが作成されたときに、無料サンプル用の注文を作成したい
ただし、受け取れる無料サンプルは一人一つまでで、無料サンプルを提供する販売元と無料サンプルはコードで指定したい

販売元コード: DEFAULT
商品コード: JOIN

![スクリーンショット 2022-09-17 11.01.30.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/89997/0445fa77-d120-534f-a95b-36a9d576133a.png)

## 2種類の拡張方法を試す
1. [scopeを使った拡張を使った拡張](#1scopeを使った拡張)
2. [AssociationExtentionを使ったhas_manyリレーションの拡張](#2associationextentionを

元記事を表示

Dockerにおいてソースコードが即時反映されない問題について

# 背景
現在就職のためのポートフォリオを作成しているのですがその際、Docker環境のrailsでソースコードを書 いているときにソースコードが即時反映されなかったので、即時反映される方法を記しておきます。

# 即時反映させる方法について
自分が調べた限りでは即時反映させる方法は2つありました。

**一つ目ですが**
“`ruby:config/environments/developments.rb
config.file_watcher = ActiveSupport::EventedFileUpdateChecker
“`
これを・・・
“`ruby:config/environments/developments.rb
config.file_watcher = ActiveSupport::FileUpdateChecker
“`
とすれば大丈夫です!
# 何をしているのか?
これは
・ファイルの保存イベントを監視するのか
・ファイルを追跡して変更を監視するのか
の違いがあるらしいです!
“`ruby:config/environments/developme

元記事を表示

これでバッチリ!初心者向けdevise導入の基本

本記事では、以下について記載しています。
* deviseの導入手順
* usersテーブルの作成手順
* デフォルト以外のカラムを追加した場合に必要な処理
* deviseを導入すると使える基本のメソッド3選
* deviseの削除方法

# deviseの導入手順
1\. Gemfileの最後の行に以下を追加
“`
gem ‘devise’
“`
2\. Gemをインストール: ターミナルで以下のコマンドを実行
“`
bundle install
“`
3\. ローカルサーバーの再起動: ターミナルで以下のコマンドを実行
“`
rails s
“`
4\. deviseの設定ファイルを作成: ターミナルで以下のコマンドを実行
“`
rails g devise:install
“`
5\. deviseのビューファイルを作成: ターミナルで以下のコマンドを実行
“`
rails g devise:

元記事を表示

rails apiでの複数の値をmapで回してcreateアクションでDBへ保存しようとするとAbstractController::DoubleRenderErrorで苦しめられた話

はじめに

reactで配列を使って作成した値を、一気にrails apiに送ってcreateアクションで保存をしたいと考えていました。
ですが、AbstractController::DoubleRenderErrorを解消することに時間がかかったので、備忘録として残そうと思います。
深夜テンションで、雑に文章を書いちゃってる部分もあるかもしれないので、後で元気がある時に確認して必要があれば修正しようと思います。

どのような記述をしてエラーが起きたか

データやモデル名やカラム名は少しいじってますが、下記のような値がrails apiが来ているとします。

~~~
Parameters: {“_json”=>[
{“quiz_name”=>”問1”, “quiz_status”=>”answered”},
{“quiz_name”=>”問2”, “quiz_status”=>”answered”},
{“quiz_name”=>”問3”, “quiz_status”=>”answered”}],
“quiz”=>{}}
~~~

最初は下記のように記述をしていました。

元記事を表示

ActiveStorage に保存した画像のサイズを取得する

ActiveStorage をセットアップ後、

“`ruby
class User < ApplicationRecord has_one_attached :avatarend end ``` のように、モデルを定義して、 ```ruby user.avatar.attach(params[:avatar]) ``` のように、ファイルを添付すると、 ```ruby user.avatar.metadata[:width] user.avatar.metadata[:height] ``` で、幅と高さが取れます。 # 必要なもの - [libvips](https://github.com/libvips/libvips) - `ImageMagick` より `libvips` の方が早いそうなので - [ruby-vips](https://github.com/libvips/ruby-vips) - 画像サイズをとるだけだとこれだけで十分 - 画像のリサイズとかする場合には、[image_processing](https://

元記事を表示

RubyKaigi 2022行ってきたYO!

はいどうもー!最近バイク&カメラにドハマリしているYOです。
先日は三重県文化会館で行われたRubyKaigi 2022に参加しました!数年ぶりのリアルイベントなので、ワクワクする気持ちが押さられません!

初日の早朝に最寄り駅について、これが見えた:
![IMG_1447.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/59161/f069c160-cb40-c62d-f9be-ee818c021e10.jpeg)
「津(つ)きました!」
この駅名の表示は、遠くから見るときに「?」に見えるようにわざわざ漢字表記を小さく下側に配置したという。遊びココロがあって自分は好きです。

————
駅から無料シャトルバスも出ていて本当に用意周到です!バスに乗って揺られて5分ほど、三重文化会館に到着しました。
入り口の撮影スポットもあったので、記念写真もバッチリ取りました!

![Image from iOS (17).jpg](https://qiita-image-store.s3.ap-nor

元記事を表示

【Rails】Parameter Objectパターン

## 環境
Rails 6.0.1
Ruby 2.6.3
PostgreSQL 11.16

## Parameter Objectパターン

Laravelだったらフロントから投げられたパラメータはRequest層でバリデーションをかけたりするが、
RailsはドキュメントにRequest層に当たるものが載っていない。
そういうときにParameter Objectパターンを使って実装するのもひとつの手法らしい。

“`app/models/parameters/profile_parameter.rb
module Parameters
class ProfileParameter
attr_reader :name,
:email,
:avatar,
:birthday,
:gender,
:phone_number,
:living_addr

元記事を表示

【Ruby】◯番目から最後までの文字列を取得する

## 環境
Rails 6.0.1
Ruby 2.6.3
PostgreSQL 11.16

## String[]

“`[]“`の中に“`Range“`オブジェクトを指定できる。
“`str[f..-1]“`は「f文字目から文字列の最後まで」を表す慣用句

“`ruby
message = ‘こんにちは、山田さん’

message[2 .. -1]
=> “にちは、山田さん”
“`

ハッシュタグ検索を実装したいときに使えそう
“`ruby
keywords = ‘#今日のコーデ’

if keywords.start_with?(‘#’)
search_keywords = keywords[1..-1]
end
# 検索の処理が続く
“`

https://docs.ruby-lang.org/ja/latest/method/String/i/=5b=5d.html

元記事を表示

[Rails,Ruby]文字列の置換(gsub,sub)

# はじめに
正規表現について学んでいたら、文字を置換する`gsub`メソッドが出てきたので練習も兼ねて遊んでみました。

# gsub
文字列内に指定した文字が複数含まれている場合、その全てを置換します。

使用例の前に突然ですが穴埋め問題です。(同じ数字には同じ単語が入ります)
皆さんは高校野球・山下智茂監督のこの名言をご存知ですか?
“`
心が変われば(1)が変わる
(1)が変われば(2)が変わる
(2)が変われば(3)が変わる
(3)が変われば運命が変わる
“`
答えは1から順に`行動`、`習慣`、`人格`です。

では答えを数字の部分に置換しましょう。
“`ruby
q = “心が変われば(1)が変わる\n
(1)が変われば(2)が変わる\n
(2)が変われば(3)が変わる\n
(3)が変われば運命が変わる”

a = q.gsub(/1/,’行動’).gsub(/2/,’習慣’).gsub(/3/,’人格’)

puts a
“`
すると以下のように出力されます。
“`
心が変われば(行動)が変わる
(行動)が変われば(習慣)が変わる
(習慣)が変われば(人格)が

元記事を表示

Ruby on Rails 7 with Bootstrap on Docker Compose 開発環境で Popovers と Tooltips を有効にする方法

タイトル通りの、ごく単純な内容なのですが、もしかしたら、同じように少し悩んでしまう人もいるのではないかと思ったので、共有しておきます。

ちなみに、そもそも「 Ruby on Rails 7 with Bootstrap on Docker Compose 開発環境 」を構築する方法については、過去の記事をご覧いただければ幸いです。

https://qiita.com/normalsalt/items/8bf6c5010c9e9f127582

さて、やること自体はめちゃくちゃ簡単で、まず、`app/javascript/application.js` を開いて、例えば、以下のように追記してください。

“`diff_javascript:app/javascript/application.js
// Entry point for the build script in your package.json
import “@hotwired/turbo-rails”
import “./controllers”
import * as bootstrap fro

元記事を表示

ActiveRecordでの条件付きのリレーションについて

# 概要
ActiveRecordでは「has_many, has_one, belongs_to」をモデルに定義することでテーブル間同士の関連性を表すことができます。
この関連性ですが、単純なテーブル同士の関係だけではなく、条件を定義することで任意の関連性を表現出来るので、そのことについてまとめます。

# 基本
開発チームとチームメンバーをDBで管理する場合を考えてみます。
開発チームには複数のチームメンバーがいるので、開発チームとチームメンバーの関係は1対nになります。
名前を`teams`, `members`とします。
![名称未設定2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/264889/da52d669-a155-4c27-8ee0-04a3be6f7c0f.png)

モデルで定義すると以下のようになります。
“`ruby
class Team < ApplicationRecord has_many :members end class Member < Applica

元記事を表示

Rails7 で Bootstrap5を使用する

こんばんは。
Railsの案件にアサインされることになリました。
表題の件でつまづいたので、備忘録として書き残しておきます。

### 必要な対応
#### CSS
Gemfileに以下を追記
“`
gem ‘bootstrap’, ‘~> 5.2.0’
“`
gemインストール
“`
bundle install
“`

app/assets/stylesheets/application.cssの名前をaplication.scssに変更
app/assets/stylesheets/application.scssの中身を全て削除し、以下を追記
“`
@import “bootstrap”;
“`
CSSが適用されているか確認してください。

#### JavaScript
DropDownがこのままでは動きません。

`config/initializers/assets.rb`に以下を追加
“`
Rails.application.config.assets.precompile += %w( bootstrap.min.js popper.js )
“`

元記事を表示

Gem::ConflictErrorについて

### Gem::ConflictErrorについて

**※ 9/16日 追記**
プロを目指す人のためのRuby入門の著者の伊藤 淳一さんから、この記事についてコメントをいただきました。
お忙しい中ご指導をしていただき、大変光栄です。

起動するときに、–no-pluginsオプションを入れると、エラーを回避できることを学びました。
実行したことは下記となります。

①削除したactivesupportをもう一度入れ直す。
“`
$ gem install activesupport -v 6.1.4.1
“`

②–no-pluginsオプションを入れた状態でMinitestを起動してみます。
“`
$ ruby test/gate_test.rb –no-plugins
“`
③無事に起動することができました。

ConflictErrorが起きた時、対象のソフトウェアを削除するのでは、今後そのソフトウェアが必要となったときに問題対処ができなくなってしまいます。今回得た知識を今後の学習に活かしたいと思います。
改めてお礼申し上げます。


**【

元記事を表示

レビュー機能(レビューを一覧表示させる)

mac OS バージョン11.6
エディタ…VScode
Rails 6.0.4

映画のレビュー機能に関する備忘録です。
レビューを一覧表示させることが目的で、レビューの投稿に関する記述は端折っています。
必要であれば別の記事で追記します。
![6df600d58c843b86d07be66a56a8373e.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1962714/0e514943-ef56-6dfc-1a7a-4398d3f2a2c8.png)

# 1.モデル設計

![65c95b6e79bed96ec091f33cc49f179d.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1962714/450d8ea4-1f9f-ac18-7f06-7e4a7ed04de4.png)
 ・Userは多くのReviewを持ち、Movieも多くのReviewを持つことになる多対多の関係。
 ・中間テーブルを作成して1つ

元記事を表示

controller作成がうまくできないとき

# 開発環境
ruby 3.1.2 Rails 6.1.7です。

# 概要
投稿アプリを作るときにusersコントローラーを作ろうとしたが作れなかった。

# その時のエラー
`const_get’: uninitialized constant Users 

Object.const_get(camel_cased_word)
^^^^^^^^^^ (NameError)

rails g controller users index show editを実行したときに出てきて解決できなかった。

# 解決方法
様々な記事を見ていると、「devise_for :usersのせいでルーティングがおかしくなっている」という記事を見つけた。試しに、自分のroute.rbからdevise_for :usersをコメントアウトしたら解決した。

参照 https://qiita.com/blackpeach7/items/dd71417bf0b0ef937369

元記事を表示

Rails・Rubyで benchmark を使って簡単にパフォーマンス計測をしてみよう!

## はじめに
先輩や上司に、「どのロジックがパフォーマンス良いか調べてみて」と言われることはありませんか?
または、先輩や上司にコードを見せる前にどのロジックがパフォーマンス良いか調べたいことがありますよね。

`Rails パフォーマンス計測` で検索すると、`rack-mini-profiler`のGemが出てくると思います。
ただ、実務においてGemを導入するのはハードルが高いです。

そこでRubyに標準である`benchmark`を使ってみましょう。

## `benchmark`とは
https://docs.ruby-lang.org/ja/latest/library/benchmark.html

ベンチマークの計測ができます。そのままですね。

https://docs.ruby-lang.org/ja/latest/method/Benchmark/m/bm.html

こちらの`bm`メソッドを使用していきます。

サンプルコードは以下になります。

~~~ruby
require ‘benchmark’

n = 50000
Benchmark.bm do

元記事を表示

Rails 月ごとのデータを出すときに31日のデータがなかったのでメモ

投稿を月ごとに表示させたかったが31日のデータが表示されなかったので色々試した
結果的に発行されるSQLクエリが問題だった

## 元のコードとクエリ
“`ruby:config/application.rb
config.time_zone = ‘Asia/Tokyo’
config.active_record.default_timezone = :local
“`

“`ruby:controller
@month = params[:month] ? Date.parse(params[:month]) : Date.today
@diaries = current_user.diaries.where(created_at: @month.all_month).order(created_at: :asc)
“`
“`sql
SELECT “diaries”.* FROM “diaries” WHERE “diaries”.”user_id” = ? AND “diaries”.”created_at” BETWEEN ? AND ? ORDER BY “diari

元記事を表示

Rails フォームヘルパー Cheat Sheet !

フォーム作成時に構文を毎回調べているので備忘録兼ねてまとめました。

### バージョン

下記のバージョンで確認
Rails version: 7.0.2.2

## ActionView::Helpers::FormHelper

“`erb
<%= form.color_field :favorite_color %>
<%= form.date_field :born_on %>
<%= form.datetime_field :user, :born_on, min: Date.today %>
<%= form.datetime_local_field :graduation_day %>
<%= form.email_field :address %>
<%= form.file_field :post, :image, multiple: true %>
<%= form.hidden_field :parent_id, value: "foo" %>
<%= form.month_field :birthday_month %>
<%= form.number_fi

元記事を表示

今まで知らなかった開発で使ったRailsメソッド備忘録

## なぜ記事を書こうと思ったか
Railsアプリの開発をする際に適切なメソッドを調べる時がある為、今まで知らなかったまたは理解が曖昧な開発で使用するメソッドを中心にこの記事にまとめようと思います。

## railsメソッド一覧
### Regexpクラス
– escapeメソッド
メタ文字をエスケープした結果を返す。

“`
pattern = Regexp.escape(‘1+2=3,2*3=6’)
p pattern
# ‘1//+2=3,2//*3=6’
“`

### Stringクラス
– subメソッド
文字列中で pattern にマッチした最初の部分を文字列 replace で置き換えた文字列を生成して返す。

“`
greeting = “I am name. My favorite food is meet.”
pattern = { “name” => “James”, “meet” => “beef” }
replaced = article.sub(/name|meet/, pattern)

p replaced # “I am James.

元記事を表示

OTHERカテゴリの最新記事