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

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

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でDestroyの発行

#### 結論

link_toではなく、button_to を使う。

– 動く
“`
<%= button_to "Log out", logout_path, method: :delete %>
“`

– 動かない
“`
<%= button_to "Log out", article_path, method: :delete %>
“`

turbo扱いこなせてないので、また別途まとめます。

元記事を表示

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がこのままでは動きませんでした。
popperjsの記載では、ga.jspmではなく、unpkg.comを使う等の解決策が見つかったが、
色々調べてみたが解消でせず。。

結局「application.html.erb」でCDNを読み込みました。。。
“`

元記事を表示

Gem::ConflictErrorについて

### Gem::ConflictErrorについて

**【書いた理由】**
チェリー本に書かれているMinitestが突然起動しなくなってしまいました。
調べてみたところエラー解決できたため、まとめてみます。
ちなみに、プログラミング歴1ヶ月の超初心者なのでご容赦ください:bow:

**①まずは原因解明**

エラー文を読んでみます。

“`
/Users/takaya/.rbenv/versions/3.0.1/lib/ruby/3.0.0/rubygems/specification.rb:2247:in `raise_if_conflicts’: Unable to activate railties-6.0.5.1, because activesupport-6.1.4.1 conflicts with activesupport (= 6.0.5.1) (Gem::ConflictError)
“`

「Gem::ConflictError」と書いてあります。
よく読んでみると「activesupport-6.1.4.1」がコンフリクトしているようです。
ググっ

元記事を表示

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

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.

元記事を表示

【個人開発】現役鉄道運転士が作った鉄道運転士のための情報共有アプリ

# はじめに

こんにちは@shunsuke0810と申します。
鉄道運転士をしております。
DIVE INTO CODEで4ヶ月間、未経験からWeb開発について学んでおりました。
この度卒業制作として初めて個人開発したアプリ「Trails」が完成いたしましたのでご紹介いたします。
ちなみにTrailsの由来はTrain(列車)・Rail(線路)・Rails(ruby on rails)の3つ言葉を掛け合わせました。

【Twitter】

【アプリURL】
https://hidden-sands-43685.herokuapp.com/

【GitHub】
https://github.com/Shunsuke0810/Trails

# アプリ制作のきっかけ

みなさん、駅のホームの端っこでこんな光景みたことありませんか?
![スクリーンショット 2022-08-30 20.57.33.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.co

元記事を表示

【Rails初心者】ユーザー/管理者を分けて認証機能を作る

## _【Rails初心者】ユーザー/管理者を分けて認証機能を作る_
アカウント管理を行える「devise」を使って、「管理者(admin)」と「会員(user)」を作成する方法をまとめてみた

詳しくは、[heartcombo/devise ](https://github.com/heartcombo/devise#configuring-views)のReadmeを参照

## 全体の流れ
1. __`devise`のインストール__
2. __installコマンドとconfigファイルの修正__
3. __`admin`/`user`モデルを作成__
4. __`admins`/`users`コントローラを作成__
5. __`admins`/`users`ビューを作成__
6. __routesの編集__
7. __デフォルトのビューを削除__

### 1.`devise`のインストール
「devise」を「Gemfile」に追加して、インストールします。
~~~:Gemfile
gem ‘devise’
~~~
~~~:Console
bundle install

元記事を表示

React axios RailsAPIを叩いてみる

今回は、ハッカソン形式のインターンでAxiosを使って
Rails APIを叩く機会があったので、その備忘録です!
(少し解説あります!)

# 内容
1. Axiosとは
1. 実際に書いてみた

# Axiosとは
簡単に言うと、APIをサクッと叩いてくれる便利なやつです。
APIを利用するときに、**このパスをGETのメソッドで送ってね**とか
あるのですが、この説明通りに実装できるのがAxiosです。

厳密にはHTTP通信、Promiseの云々カンヌンありますが
気になる人は、[公式サイト](https://axios-http.com/docs/intro)を見てみたり、JS自体を勉強したりしてみましょう〜

今回は、解説&コード全部載せてるので
コードだけ欲しいよ!という人は「コードの全容」に飛んでくださいね!

# 解説
## 導入手順
導入手順は以下のように進めます。
1. `npm` or `yarn`でaxiosをインストール
1. インポート(自分のファイルで使えるようにする)
1. 基本的な設定を作る
1. 便利な関数を作成する

### 1. `npm`

元記事を表示

【Rails】options_from_collection_for_selectの使い方

実現したいこと

ECサイトの注文情報を入力する画面で、
既に登録されている配送先を、セレクトボックスから選択できるラジオボタンを作る。

ざっくり手順

1. form_withでデータを送る準備をする
2. radio_bottunを設置する
3. セレクトボックスに登録済みの住所を選択肢として表示させる

1. form_withでデータを送る準備をする

“`ruby:orders/new.html.erb
<%= form_with model: @order, url: orders_confirm_path do |f| %>
<% end %>
“`

解説

form_withの引数の意味をよく忘れてしまうためここにメモとして残しておきます。
・ model: @order…保存したいテーブルのインスタンス
(Ordersテーブルに新たに情報を追加したいのでコントローラーで@order = Order.newと定義する。)
・ u

元記事を表示

FactoryBotの導入と使い方の基本 [RSpec]

FactoryBotの使い方や導入方法をメモしておきます。
# FactoryBotを使うには
### 1, gemのインストール
“`
gem “factory_bot_rails”
“`
bundle installを実行する。
### 2, ジェネレートする
“`
rails g factory_bot:model モデル名
“`
`spec/factories`というディレクトリが生成される。その中に`モデル名s.rb`というファイルが生成される。このファイルにテストデータを作成していく。
# FactoryBotの使い方(例としてUserモデルを扱う)
### サンプルデータの作成
“`ruby
FactoryBot.define do
#この中に書いていく
factory :user do
first_name { “aaa” }
last_name { “aaa” }
email { “aaa@example.com” }
password { “password” }
end
end
“`
### サンプルデータを呼び出す
“`

元記事を表示

mimemagicのbundle installに手間取った件

## 起きたこと
しばらく昔に触っていたローカルでそのまま動かしていたRuby on Railsプロジェクトを久々に動かそうと`bundle install`したら、以下のエラーが。

“`terminal
Gem files will remain installed in /Users/hoge/projects/hogehoge/vendor/bundle/ruby/2.7.0/gems/mimemagic-0.3.9 for inspection.
Results logged to /Users/hoge/projects/GitHub/hogehoge/vendor/bundle/ruby/2.7.0/extensions/x86_64-darwin-21/2.7.0/mimemagic-0.3.9/gem_make.out

An error occurred while installing mimemagic (0.3.9), and Bundler cannot continue.
Make sure that `gem install mimemagic -v

元記事を表示

【初心者向け】moduleの使い分け

# 執筆経緯
moduleは色々な使い方ができるのは知っていたのですが具体的にどうやって使えばいいのかを
勉強していて気付いたことを共有したいと思い執筆に至りました。

# 対象の読者
– ruby初心者の方
– moduleの使い方がわからない方

上記の方たちに向けて記事を書いていこうと思います!

# moduleの使い方その1
moduleは色々な使い方がありますがまず紹介するのは名前空間としての使い方です!

“`ruby:
class OtukaTakashi
def initialize(from,age)
@from = from
@age = age
end
end

class OtukaTakashi
def initialize(job,talent)
@job = job
@talent = talent
end
end
“`
上記の様に別々に定義されて使い方も異なるclassがあります。
それぞれ違うところで1個のclassのみが使われている内はいいですがある日一緒に使うことになったら
どうやって区別すれば

元記事を表示

[Rails]ActiveHashの使用例(備忘録)

# ActiveHash(アクティブハッシュ)
**ActiveHash**とは、モデルファイル内に直接記述することで、データベースへ保存せずにデータを取り扱うことができるGemです。
モデルファイルに直接記述したデータに対して、ActiveRecordのようなメソッドを用いることができます。
例えば、都道府県名一覧やカテゴリーなど「基本的に変更されないデータ」を扱うときに便利です。

ここでは例として商品の送り元住所の都道府県登録にActiveHashを用います。

## ActiveHashの導入
Gemfileの最下部に
“`ruby
gem ‘active_hash’
“`
を追記し、`bundle install`を実行します。

## モデルの作成
Itemモデルを作成します。

次に、都道府県名を管理するPrefectureモデル(厳密にはActiveHashを用いたクラス)を作成します。

データベースを利用しないため、手動で
app/modelsディレクトリ内にprefecture.rbを作成します。

まずは、モデルの「Prefectureクラス」を

元記事を表示

Railsのsendメソッドを使うとどう便利になるのか

## 環境
Rails 5.2
Ruby 2.6
Ubuntu 20.4

## 記事
テーブルのカラム名を引用するとき、Railsのsendメソッドを使うとシンプルに記述することができます。
“`user_controller.rb
@user = User.all
User.test(@user)
“`

sendメソッドを使わないときの書き方です。全カラムの先頭に、userを付ける必要があります。userの記述が冗長で、カラムの数が多くなる程、煩わしくなってきます。
“`user.rb
def test(user)
user.each do |user|
ary = []
ary << user.id ary << user.name ary << user.addr puts ary end end ``` 処理結果です。 ``` [1, "tan", "米原市"] [2, "pon", "長浜市"] [3, "mii", "近江八幡市"] ``` sendメソッドを使ったと

元記事を表示

学生4人でチーム開発を行ってみる!

# はじめに
某企業のインターンで4人チーム開発を行い、約2週間でしたがとても有意義な経験をさせていただきました。
せっかく開発力のあるメンバーと出会えたのを、この機会だけで終わらすのは勿体ないと思い、この学生4人で何か作ろうということで、その過程を記録していこうと思います。
初めての記事作成ということで、優しく見守ってくれるとありがたいです。

# 私のことを少し紹介
某大学の法学部で法律を勉強中。ド文系(笑)
縁あってIT企業のインターン、アルバイトを通して、Web開発を学んでいます。
現在は、自社開発志望で就活をしています。
趣味は、映画、アニメ、漫画、憲法、プログラミングです。

# 第一回開発会議にて

### まずはアイディア出し
– 文字ランダム生成アプリ
– 勤怠管理アプリ
– シフト管理アプリ
– プログラミング書籍情報サイト
– お年寄り特化アプリ
– ToDoリスト
– 時間割アプリ
– カレンダーアプリ
– 文字数制限ブログ
– タイピングゲーム
– アップローダー

### Webサイトにするのか、アプリにするのか
ひとまず、チームとして何かを作るということを

元記事を表示

OTHERカテゴリの最新記事