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

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

効率的なseedの書き方

# seeds.rb
Railsで初期データを格納する場合、あらかじめseeds.rbでデータをcreateしておくという手法が一般的だと思われます。
ただ、モデルが増えていくと自ずと投入したいデータは肥大化していき、seedで管理するのが面倒になりませんか??

## 管理の方法
ある種思想の話になりますが、私はdevelop/test/productionでそれぞれseedデータは分けるべきだと考えています。
従って下記のようにseedを管理しています。

### 格納フォルダ作成
“`bash:
$ mkdir -p db/seeds/development
$ mkdir -p db/seeds/test
$ mkdir -p db/seeds/production
“`
seedデータを格納するseedsフォルダを作成しました。
さらに実行環境毎にフォルダを分けています。

### データを投入
“`bash:
$ touch db/seeds/development/users.rb
$ touch db/seeds/test/users.rb
$ touch db/

元記事を表示

【Rails】異なる階層のファイルをrender (部分テンプレート)

## やりたいこと

似たデザインのページを使い回したい。
以下のように、処理が完了すると「完了しました」と通知するようなページが複数存在している状況で
「完了ページ」をテンプレート化したい。

ログアウト完了→ログアウトしました!
ユーザーの削除完了→ユーザーを削除しました!

## 方法

“`ruby
render template: ‘ファイル名’, locals: { ローカル変数の定義 }
“`

今回は`views/shared/after_xxx.html.erb`を呼び出します。
以下のようにタイトルやメッセージ、path を柔軟に変更できるファイルをイメージします。

“`_after_xxx.html.erb

       

<%= title %>

   #ここ
    

<%= message %>

   #ここ

<%= link_to path_message,

元記事を表示

devise nameカラム追加<忘備録>

deviseにはデフォルトでnameカラムがない。
そのため、こちらで追加する必要がある。

基本的なことなので、大丈夫かと思いつつ忘備録。

migrationファイルの作成
“`
rails g migration AddNameToUser name:string
“`

テーブルに反映
“`
rails db:migrate
“`

次にバリデーションの追記
“`
class User < ApplicationRecord # Include default devise modules. Others available are: # :confirmable, :lockable, :timeoutable, :trackable and :omniauthable devise :database_authenticatable, :registerable, :recoverable, :rememberable, :validatable validates :name, presence: true, length: {

元記事を表示

1つのフォームから複数のテーブルへ複数のレコード保存の実装

## 目的
Railsで1回のフォーム送信で2つのテーブルにデータを登録しつつ、片方のテーブルには複数のレコードにデータを保存したい。

## 自身が行った実装方法
1. フォームオブジェクトパターンの実装で2つのテーブルへ保存できるようにする
2. 複数のレコードを作成したいフォームのパラメーターを配列で送られてくるようにする
3. 2で送られてきたパラメーターを変形して要素の数だけcreateメソッドで保存

**※2と3について記録致します。**

“`フォームのある.html

<%= f.label :name, "材料名" %>
<%= f.text_field :name, name:"[recipe_ingredient][name][]" %>
<%= f.lab

元記事を表示

deviseを導入 <忘備録>

https://github.com/heartcombo/devise
公式サイトより、Getting startedを参考にしながらdeviseを導入してみました。

gemファイルに追記、bundle installを実行
“`
gem ‘devise’
“`

次に、以下のコードを実行
“`
$ rails generate devise:install
“`

以下のファイルが作成される
“`
create config/initializers/devise.rb
create config/locales/devise.en.yml
“`

ファイルを作成すると、ターミナルに以下のようなメッセージが表示される。

“`
===============================================================================

Some setup you must do manually if you haven’t yet:

1. Ensure you have defined defa

元記事を表示

[個人開発]Rails×LIFF×Linebot(MessagingAPI) 子供の名前候補をストック・シェアするアプリ「BabyNames」を作りました

# どんなアプリ
[![Image from Gyazo](https://i.gyazo.com/144be074325dd586a863d5aebff4ca11.png)](https://gyazo.com/144be074325dd586a863d5aebff4ca11)
LINE上で赤ちゃんの名前候補の管理、評価ができて、ユーザー同士でアカウント共有をできるアプリです。

https://www.baby-names-app.com/

# どんなことができる?

LINEメッセージで 名前の候補を登録 (1).png

LINEメッセージで 名前の候補を登録.gif【個人開発】すべての投票を民主化するサービスを作ったよ【SPAポートフォリオ】

「すべての投票を、民主化したいよ」
どうも、スター宮☆みゆきです😊

今回はポートフォリオ用に**匿名性投票サービス**を作ったので、その知見を共有する記事をお送りします!

## 対象読者

– 駆け出しエンジニアの方
– SPAポートフォリオの作り方が分からない方
– 個人開発のアイデアが思いつかない方

※本サービスはスクール等には通わず完全独学で作成したので、独学でポートフォリオを作成されている方の役に立てば幸いです。
**ソースコードも全て公開しています。**

## サービス概要

![tobehonest.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/208060/5578738a-f7b0-e190-7e54-a7255b1dfcf4.png)

### 「わたし、気になります!」

みんなに聞いてみたいけど聞けない。そんな疑問ってありませんか?

私はあります!

そんな疑問を匿名性の投票により解決するために、このサービスは誕生しました。

サービス名: みんなの投票箱
サービスUR

元記事を表示

【Rails】アパレルショップを簡単に検索できるポートフォリオを作成してみた!

![スクリーンショット 2022-03-03 22.22.19.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/944601/54f6f23f-6e03-3fa7-849e-b8b36e815a68.png)

# アプリの概要

アプリ名: **FASHION-ONE**

都内エリアのアパレルショップを、様々な情報や口コミを参考にしながら検索できるアプリです。

* 都内にあるお店を様々な条件で検索できる
* 行ったお店の口コミ投稿ができる
* 気になるお店を保存済み機能で保存することができる

1つのアプリだけでお店を調べることができることをコンセプトに、名前を**FASHION-ONE**にしました。

下記URLにて公開中です。

https://fashion-one-app.com

GitHubのURLはこちら。

https://github.com/shutheonetokyo/fashion-one-app

# アプリの作成背景

ファッションが好きな私は、上京して初めて服を買

元記事を表示

rails webpacker:installのエラーで躓いた時の対処法

# rails webpacker:installでエラー

“` rails webpacker:install“`
を実行したところ

“`
rails webpacker:install
rails aborted!
Don’t know how to build task ‘webpacker:install’ (See the list of available tasks with `rails –tasks`)
“`

上記エラーが表示されてた。

## 対処法
Gemfileに
“`gem ‘webpacker’, ‘~> 3.0’“`
を追記して“`bundle update “`を行いその後改めて“`rails webpacker:install“`で解決した。

元記事を表示

railsアプリ作成準備

### Ruby on RailsのアプリをGithubからクローンしてからhello worldするまで

“`git clone URL“`
でクローンする。

“`bundle _2.2.17_ install“`
を実行する。

そうすると
“`
n error occurred while installing pg (1.1.4), and Bundler cannot continue.

In Gemfile:
pg
“`
上記エラーが出る

これは、**pg Gemは開発環境には不要**な為、最初に

“`
bundle _2.2.17_ config set –local without ‘production’
“`
をする必要があった。

この後に“`bundle _2.2.17_ install“`

“`rails server“`

でlocalhost:3000にhello world表示

元記事を表示

redmine管理画面のuser一覧に、メール通知機能の情報を追加する

## ■やりたいこと
 管理画面のuser一覧に、メール通知機能の情報も表示させたい。

## ■環境:
Environment:
Redmine version 4.2.3.stable
Ruby version 2.6.9-p207 (2021-11-24) [x64-mingw32]
Rails version 5.2.6
Environment production
Database adapter Mysql2
Mailer queue ActiveJob::QueueAdapters::AsyncAdapter
Mailer delivery smtp
SCM:
Git 2.34.0
Filesystem
Redmi

元記事を表示

画像投稿で画像が表示されないエラーの対処【Ruby on Rails】

### 画像投稿時のエラー

![top.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2316171/c0fe7f62-9610-5523-aaa7-8337d8cba2f1.png)

コードは載せていませんが、上の画像の「新規投稿」画面で「ファイルを選択」から画像と、テキストを記入し、「投稿する」を押したところ、投稿はされたものの下記の画像のように画像だけが表示されない現象が起きました。

![新規投稿_画像表示されず.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2316171/106b6391-acbb-2ca2-b703-ebf3626abb19.png)

 画面上では何がエラーなのか分からなかったので、「rails s」を実行したコンソールで何か出ていなか確認したところ、下記のようなエラー内容が出ていました。

“`:コンソール rails s
MiniMagick::Error (You must

元記事を表示

【Rails】eachの中でテンプレートをrenderをするのは危険である

早速ですが、みなさんはviewで部分テンプレートを利用されていますでしょうか?
こういうやつです。よく見ますね。

“`
<%= render 'path', user: user %>
“`

私はコードの見た目がきれいになるだけでなく、管理もしやすくなるといった理由から多用しております。

そんな便利な部分テンプレートですが、実は使いすぎるとパフォーマンスが悪くなってしまうことを知っていますか?
今回はその理由と改善点を説明できればと思います。

## eachの中でrenderを使ってはいけない

例えば以下のようなコードがあるとします。(適当な例です。こんなコード書かないよ、というのは一旦置いといてください。)

“`erb
<% @users.each do |user| %>
<%= render 'user', user: user %>
<% end %>
“`

で、これの何が良くないかですが、単純にパフォーマンスが悪いです。

雑な例ですが、10,000件のユーザを一覧に表示してみます。データはscaffoldとdb:seedで適当に作成しました。

元記事を表示

ActiveRecord で、関連先のテーブルの条件で絞り込む

# はじめに
ActiveRecord で、少し複雑なクエリを発行したかったのだが、書式が分からなかったので、自分用に調べためも。

# 状況
アソシーションは以下の User:Book = 1:N の関係。カラムなどは以下の状態とする(created_at など関係ないカラムは省いた)。
## User モデル
| カラム | 型 |
|:-:|:-:|
| id | int |
| name | string |
“`ruby:user.rb
class User < ApplicationRecord has_many :books end ``` ## Book モデル | カラム | 型 | |:-:|:-:| | id | int | | user_id | int | | book_type | int | | passed | boolean | ```ruby:book.rb class Book < ApplicationRecord belongs_to :user end ``` ## 紐づくBookで、type別の最新がすべて

元記事を表示

Railsチュートリアル7.3.4でハマった(ArgumentError)

# 内容
タイトルの通りです。ArgumentErrorのエラーが発生しました。
## 開発環境
ruby 3.1.1
rails 7.0.0

## テストコード
“`users_signup_test.rb
require ‘test_helper’

class UsersSignupTest < ActionDispatch::IntegrationTest test "invalid signup information" do get signup_path assert_no_difference 'User.count' do post users_path, params: { user: { name: "", email: "user@invalid", password: "foo",

元記事を表示

ActionCableを用いたチャットアプリでチャットルームとメッセージを紐づける方法

## 概要
 先日、[こちらの記事](https://techtechmedia.com/action-cable-rails6/)で解説されていたActionCableを用いたリアルタイムチャットアプリを動かしてみました。一通り動かせたのでこれを発展させて、複数のチャットルームを作りそれぞれに対してメッセージを投稿できるようにしてみたのでその方法をまとめました。

## 実装
※ [こちらの記事](https://techtechmedia.com/action-cable-rails6/)を前提とします。

最初に [こちらの記事](https://makolog.xyz/gem/)の通りにgonというgemをインストールします。これはコントローラからjavascriptへの変数の受け渡しが簡単に行えるようにするものです。

 ![ER](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1261800/146f9360-6617-3733-9a9b-8bbebcb3581d.png)
 
“`ruby:co

元記事を表示

【個人開発】ランダムでカラオケで歌う曲を決めてくれるサービス「PICKUP TRACK」をリリースしました!

# はじめに
皆さんはカラオケに行った時、歌う曲に困った経験はありませんか?

最近はこのご時世なのでなかなかカラオケにも行きづらい状況ですが、私自身そういったことがよくありました。
また、私は一緒に行った友人の歌を聴くのも好きなので少しでも歌う曲に悩む時間を減らしたいとも思っていました。

そんな経験から自分と同じような悩みを持つ人に、よりカラオケを楽しんでもらいたいと思い、「PICKUP TRACK」を作成いたしました。

URL: https://pickup-track.com
GitHub: https://github.com/junjunpei/pickup_track
[![Pickup (1).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2564332/0ae464a7-32bf-17ac-96b4-b91ca10b5835.png)](https://pickup-track.com)

# サービス概要
※パソコン、スマホどちらからでも使用できますが、カラオケで使っていただくこと

元記事を表示

【個人開発】『書くこと(ジャーナリング)📝』をもとに、感情の分析や習慣化サポートするアプリをリリースしました!!🎉🎉

# 🔰 はじめに

『書くこと(ジャーナリング)』をデジタルで実現し,感情の分析や習慣化しやすいようにサポートするサービス【Mikke(ミッケ)習慣ジャーナリング】をリリース致しました。
本サービスへの概要や想いなどを書きましたので、よければ最後までご覧ください。

:::note info
ジャーナリングとは…
「書く瞑想」とも呼ばれ, **頭に浮かんでいることを一定の時間内でただ紙に書いていく**というものです。
:::

【サービスURL】
https://a-mikke.com

:::note warn
※当サービスは,モバイルファーストのサービスになっておりますのでスマホで使用することをおすすめします。
また、PCやiPadでも問題なく使用できます。
:::

# 👣 サービスを作った背景 / ✨ サービスに込め

元記事を表示

新人がよくやる間違い(MVCの領域侵犯編)

Railsを使ったアプリケーション制作を始めて2ヶ月ちょっと…。

こんな↓コードを書いていたら、先輩から「それはやばいよ」と指摘を受けました。

“`ruby
<% @users.each do |user| %>
user_type = UserType.find(user.type_id)

<%= user %>

<%= user_type.type_name %>

<% end %>
“`

なにがやばいのかわかりますか?

まあ、タイトルでネタバレしているのですぐわかってしまうと思うんですけど、**ViewでSQL文を書いている**んですね。端的に云うと、「それコントローラーでやれよ」ってことです。(さら言うとN+1問題も発生しているんですが、今回は割愛)

サンプルではリレーションのあるわかりやすい2つのモデルなので、コントローラーでらくらく書けるんですけど、

例えば直接的なリレーションのない2つのモデルを扱わないといけなかったり…

複雑な関係をもつ3~4つのモデルを同時に扱わないといけなかった

元記事を表示

Better ErrorsとBinding_of_callerを導入する(Rails+Docker環境)

## Better ErrorsとBinding_of_callerとは?

Railsのgemの一つでBetter_Errors gemを使うと便利で高機能なエラー画面が表示されます。

Binding_of_callerはブラウザ上でirbを使えるようになるgemです。

### Better Errorsとbinding_of_callerの導入

Gemfileに以下を記述します↓

“`Gemfile
group :development do
gem ‘better_errors’  #追加
gem ‘binding_of_caller’  #追加
end
“`

次にdocker-compose buildでコンテナをビルドします。
“`
$ docker-compose build
“`

**/config/environments/development.rb**に以下を追加します↓
“`
if Rails.env.development?
BetterErrors::Middleware.allow_ip! “0.0.0.0/0”
e

元記事を表示

OTHERカテゴリの最新記事