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

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

【モンキーパッチ】管理画面生成gemのAdministrateで、NameError uninitialized constant

問題

Administrate gem
`0.16.0`

コントローラー
`app/controllers/admin/students/users_controller.rb`

モデル
`app/models/students/user.rb`

“`
NameError: uninitialized constant Student::User
File “/app/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.3.3/lib/active_support/inflector/methods.rb”, line 284, in const_get
File “/app/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.3.3/lib/active_support/inflector/methods.rb”, line 284, in block in constantize
File “/app/vendor/bundle/ruby/2.6.0/gems/ac

元記事を表示

DBパフォーマンス改善:既存のカラムにindexを設定する方法【Ruby on Rails】

## はじめに
パフォーマンス改善の観点で既存のカラムにindexを設定する方法について書いてみようと思います。 新たにカラムを追加する方法ではなく、元々あるカラムにindexを設定する方法については該当の記事を見つけることができなかったので、書いてみようと思います。 設定自体は簡単ですが、この記事ではなぜindexを設定する必要があるのか、という点について重点をおいて初学者向けに解説していきたいと思います。

## 開発環境
Rails 6.1.4.3
ruby 3.0.3
psql 14.2

## テーブル同士の関係について
#### ER図
indexを設定するlikesテーブルと関係するUsersテーブル、Postsテーブルについて図で紹介します。 自分のPFで書いたER図をそのまま転用しているので、見にくいですがご了承下さい。
※content:投稿内容

![スクリーンショット 2022-05-23 23.14.55.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2316171/87333

元記事を表示

フルスタックエンジニアへの道 part 2 ~Rails 7 × Dockerの環境構築 2

### 前回: 個人開発をやる目的とか、何をするかなどはこちらから

[https://qiita.com/Terao-Takumi/items/f33393f7e99d40d7e4bb](https://qiita.com/Terao-Takumi/items/f33393f7e99d40d7e4bb)

### 今回のゴール: Docker上に起動したMySQLとRailsを接続し、rails sする。

# dockerまわりの設定

Dockerfile: 最後にこれを足す

“`bash
$ CMD [“mysqld”] # mysqlを起動
“`

docker-compose.yml

“`bash
db-sloth:
image: mysql:5.7
platform: linux/x86_64 # M1 Macだと動かないのでplatformを指定
volumes:
– ./db/development/tools:/docker-entrypoint-initdb.d # 初回データ実行
– ./db/devel

元記事を表示

新規登録画面を作成する

# 新規登録で送信できるようにする
ルーティングでpostを作り、コントローラを設定すれば完成だったような気がする。

## Routing Error
No route matches [POST] “/signup”

## ルーティングを設定する
“`routes.rb
Rails.application.routes.draw do
get ‘/’, to: ‘home#top’
get ‘/signup’, to: ‘users#new’
post ‘/users/create’, to: ‘users#create’
get ‘users/index’, to: ‘users#index’
get ‘users/:id’, to: ‘users#show’
end
“`
これで設定。

## usersコントローラーのcreateアクションを作成
name,email,passwordで登録
“`users_controller.rb
.
.
.
def create
@user

元記事を表示

【Ruby / Rails / devise】お気に入り機能( いいね機能 )の実装方法

## お気に入り機能の作成イメージ

![スクリーンショット 2022-05-24 15.43.55.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2655769/95e9db65-09b4-c636-e30a-3f589ba8a48b.png)

今回はこのようなお気に入り機能の実装をしていきたいと思います。
(非同期通信は使用しないで作成しています)

## 前提

・deviseを導入している
(user_signed_in?メソッドを使う必要があるため)

・userモデル、お気に入り機能をつけたいモデルが存在している
(お気に入り機能をつけたいモデル → 今回はitemモデルで作成します)

## 作成手順

### ①お気に入り機能のモデルを作成する

・名前はお好きなものでOK
今回は「favorite」モデルで作成します。
他には「like」モデルで作成している例もあります。
(モデルは単数形で書くルールがありますので、単数形で作成しましょう)

“`ターミナル
rails g m

元記事を表示

bundle install(gem install pg)が通らない時の対処 on macのhomebrew環境

ただのメモ書きです

# 背景とか

gemのnative拡張の.so依存は、基本的にはpkg-configにまかせていればよいのだけど、
残念ながら、`gem “pg”`においては、pg_configを参照できないときに、pkg-configにfallbackしてくれるのは、2022年1月リリースのv1.3.0からである。
see: https://github.com/ged/ruby-pg/blob/master/History.rdoc#v130-2022-01-20-michael-granger-gedfaeriemudorg-

プロダクトコードのライブラリバージョンを上げるのは後からにして、ひとまずbundle configでの解決策をメモしておく。
(他にもpkg-configに対応していないnative拡張のgemがあったら後で自分で参照する用)

# ネイティブライブラリのインストール

homebrewのpostgres formulaeを入れると、サーバーごと入ってしまうので、libpqのみ入れる
gemは”p**g**”だけど、ライブラリは”libp**q*

元記事を表示

【awesome_print is not working】(pry) output error: #

移転しました↓

[【awesome_print is not working】(pry) output error: ](https://www.malanka.tech/entry/awesome_print_is_not_working_by_marshal_dump_removed)

元記事を表示

【Rails】link_to で「ブラウザ上に表示する文字列」と「指定するURL」が同一のときは nil を使う。

## はじめに
未経験からエンジニアに転職しました。
まだまだわからないことだらけですが、毎日楽しく働いています!
業務や個人開発での発見やエラー解決などをアウトプットしています。
今回は、
##### link_to で「ブラウザ上に表示する文字列」と「指定するURL」が同一のときは nil を使う。
という内容です。
初学者向けの内容です。

# 結論
~~~
<%= link_to nil, 'https://qiita.com/' %>
~~~
上記のように書く。
下記と同じ結果になる。

~~~
<%= link_to 'https://qiita.com/', 'https://qiita.com/' %>
~~~

# 参考
https://github.com/rails/rails/blob/f33d52c95217212cbacc8d5e44b5a8e3cdc6f5b3/actionview/lib/action_view/routing_url_for.rb#:~:text=def%20url_for(options%20%3D%20nil)

元記事を表示

フルスタックエンジニアへの道 part 1 ~Rails 7 × Dockerの環境構築 1

# はじめに

ゼロから100まで、すべて自分の力でウェブアプリケーションを作り上げることのできる技術と経験を得ることで、プロジェクト・マネジメントができるリーダーになりたい…フロントエンド、バックエンド、デザイン、インフラなど関係なくなんでもできる最強のエンジニアになりたい…Modern-day Da Vinciになりたい…(笑)。

この目標を達成するための方法を考えてみた結果、**現場で行われている開発プロセスを自分ひとりでやってみるのが一番速いんじゃないか**という仮説を立てた。

そこで、私個人の成長記録として、この「フルスタックエンジニアへの道」という連載をやっていこうと思う。

読者諸兄におかれましては、この記事で技術的な知識を得るというよりも、私が**どんなことをどんな順番で勉強したのかを参考にしていただいたり、シンプルに頑張ってるヤツ(私^^;)を見て仕事や勉強へのモチベーションとしていただければ**なと思います。

### なぜそう思った?

エンジニア歴5ヶ月目の私は、現在Rails 6を使った社内アプリケーションの開発をやっている。(で、明後日デプロイする笑)。

元記事を表示

現在時刻に最も近いキリの良い時刻を取得する方法

送信の予約機能で、現在時刻に最も近い10分単位の時間を取得したいことがあり、その計算方法が勉強になったので記載します。
例えば現在時刻が15:55なら16:00を取得したいという趣旨です。

## 作成したメソッド

“`ruby
def round_off(seconds = 60)
Time.at((to_f / seconds).ceil * seconds)
end
“`
上記のようにメソッドを定義し、以下のように呼び出すことで実現できました。

“`ruby
Time.now.round_off(10.minutes)
# もし現在時刻が16:55なら、17:00の時刻が取得できます。
“`

## 何をしているか

先輩に教えてもらいながら書いたのですが、理解するのに時間がかかったのでメモしておきます。

1.指定した秒数で割り算をし、切り上げる
“`ruby
(to_f/seconds).ceil
“`

2.その数字にもう一度指定の秒数を掛ける

“`ruby
(to_f/seconds).ceil * seconds
“`

上記をすることで

元記事を表示

DockerからRailsのコントローラとルーティングを設定する

仮想環境下でコントローラやルーティングの設定はしたことがあったが、Dockerではなかったので備忘録として簡単に記載する。

homes_controllerを作成する

“`言語:ターミナル
docker-compose exec web rails g controller homes
“““

app/viewsの配下にhomesディレクトリが作成されていることを確認し、top.html.erbのファイルを作成する。
![スクリーンショット 2022-05-22 17.44.15.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2654361/c762b51c-c0a3-78ca-92af-d59d2142ddb6.png)

トップページだと分かるように下記のように記載する。
“““言語:top.html.erb

ここはTopページ

“““

コントローラに以下のように記載する。
“`言語:routes.rb
class HomesController <

元記事を表示

【個人開発】英語の発音精度を診断するアプリ「Speaking Checker」を作りました

## はじめに
初めまして、よしたかと申します!

突然ですが、皆さんは英語が得意でしょうか?
私は「読む・書く」は得意ですが、「聞く・話す」は苦手です。「読む・書く」については高校時代の先生の教え方がうまかったおかげか今も得意なのですが、「聞く・話す」については海外留学や英会話スクール等に通ったことがなく、外国人の方と話す経験がほとんど無かったので苦手です。
他の方はどうなのか?と思い調べてみると、下記のビジネスパーソン向けに行われた調査データによると、英語が得意と答えた人は約3割なのに対して、英語が苦手と答えた人は約7割と多数を占めていることが分かります。
参考: [「英語学習の実態と意欲」に関する調査結果](https://www.iibc-global.org/iibc/press/2019/p123.html)

私は一人でも多くの方に英語を好きになって欲しいです。そのため、ゲーム感覚で英語の発音練習ができないかと思い、「Speaking Checker」を開発しました。

▼サービスサイト

https://www.speaking-checker.com/

## サービ

元記事を表示

Railsのdraper decoratorでtagヘルパーを使いたい。例えばtag.span(“hello”)などと。

## やりたい事
Railsのdraperのdecoratorで、スマートにHTMLタグを生成したい。
今回は例えで`”hello“`をば。

`”hello“.html_safe`でもできるけど、tagヘルパーを使ってもうちょいスマートに。

– tagヘルパー参考サイト
– https://api.rubyonrails.org/classes/ActionView/Helpers/TagHelper.html#method-i-tag
– https://techracho.bpsinc.jp/hachi8833/2022_01_13/48191

## 実装!

単にこう書いただけではエラーになる。
“`ruby:app/decorators/hello_decorator.rb
>> tag.span(‘hello’)
=> undefined local variable or method ‘tag’ for # Did you mean? tap

元記事を表示

rspecでETagのテストを追加した

## 背景
Android端末とサーバーの同期(一方通行)を実装するために、ETagを使いました。サーバーのコードを変更したため、テストを追加した

## サーバー側
“`ruby
def sync
return unless stale?(@program)

render json: { success: 1, data: @program }
end
“`

## Rspec
“`ruby
context “on a subsequent request” do
before(:each) do
# first time request
get api_sync_path, params: { device_id: device.id }
assert_response 200, response.body
@etag = response.headers[“ETag”]
end

context “check ETag exist” do

元記事を表示

新規登録機能を作成する

# ログイン機能作成する
まずusersテーブルにパスワードカラムを作成することから初めて
それからHTMLで画面を作って、railsで中身を作成していこうかな。
よし始めよう!

# MySQLを使ってusersテーブルでパスワードカラムを作成する
“`
mysql> ALTER TABlE users
-> ADD password varchar(50) AFTER name;
ERROR 1046 (3D000): No database selected
mysql> show databases;
+—————————+
| Database |
+—————————+
| garden_development |
| garden_review_development |
| garden_review_test |
| garden_test |
| information_schema

元記事を表示

【Rails】Railsでカバレッジを計測する

# 初めに

`Rails6`のプロジェクトにカバレッジを導入したので、そのやり方を記事にしておきます。

## 環境

– Rails 6.1.4
– Ruby 2.7.4
– simplecov 0.21.2

# simplecov を導入する

カバレッジを測定するためのジェムである`simplecov`を追加します。

“`ruby:Gemfile
group :test do
gem ‘simplecov’, require: false
end
“`

`simplecov`の設定を追加する。

“`ruby:spec/rails_helper.rb
require ‘spec_helper’
require ‘simplecov’
SimpleCov.start ‘rails’

RSpec.configure do |config|
# 省略
end
“`

これで`Rspec`実行後に、`coverage/index.html`に実行結果が出力されます。

# 参考

[simplecov – Github](https://github.com/si

元記事を表示

Gemをインストールする時に関連するGemを自動でインストールする

Rubyでは標準でRubyのライブラリを管理するRubyGemsというコミュニティがあり、gemというコマンドを使用することでRubyGemで管理されているライブラリを取得できます。

RailsではGemfileというアプリケーションで使用するGemの情報を記述している管理ファイルです。
Gemfileにgemコマンドの後ろに取得したいGem名を記述し(既に取得しているGemのバージョンの変更も可)、installを実施することができますが、Gemは様々なGemが複雑に関連して動作する為、取得したいGemと関連するGemも取得する必要がある場合がある。

インストールを実施する際
“`ターミナルの作成中アプリのディレクトリ
% bundle install
“`
このコマンドを使うと取得したいGemに関連するバージョンのGemを一緒にインストールしてくれる。
これはbundlerというGemが働いてくれている。

:::note info
bundlerというGemを使うと関連するGemファイルも一緒に取得してくれる
:::

元記事を表示

RailsのAction Cableで任意のメッセージ形式でやりとりする

## 背景

REST API, WebsocketのAPIを提供するとあるサービスのMockを素早く作るため、Railsを選定したが、メッセージの形式がRailsと合わなかった。

メッセージ送信では、 `command`, `data`, `identifier`を送る必要があるが、

“`json
{
“command”: “message”,
“data”: “{\”message\”:\”test message\”,\”action\”:\”speak\”}”,
“identifier”: “{\”channel\”:\”RoomChannel\”}”
}
“`

例えば、 `command` をやめて `cmd` だけで任意のアクションを指定できるようにしたい。

## 注意

今回はローカル起動用のMockの作成を目的としていたためoverrideを試しました。
副作用の検証まではしていませんし、通常はRailに乗る方が良いので使い所は注意しましょう。

## サーバーが受け取るメッセージを任意の形

元記事を表示

volume使用時のPermissionError

# 環境
– WSL2 – Ubuntu20.04
– Docker 20.10.1
– ruby 3.1.2
– rails 6.1.5
# 問題
Volumeを使いローカルにデータを保管すると,フォルダがroot権限で作成される.
# 原因
DockerはWSL環境ではユーザーを指定していない限りコンテナがrootユーザーで実行される.
ちなみにMacOSではこの問題は起こらず,コンテナはローカルユーザーで実行されるらしい.
個人的にDockerの主なメリットにOS間の差異の吸収があるのに[それどうなの?」と感じる.
今後改善されていくのかな?知っている方はコメントお願いします.
# 対策
Docerfileのentrypointでユーザー作成と権限変更を行う

“`Dockerfile:Dockerfile
FROM ruby:3.1.2

# yarnインストール用に追加
RUN curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | apt-key add – \
&& echo “deb https://dl.yarnp

元記事を表示

【Ruby on Rails】Herokuのデプロイ時のエラーについての対処法

RailsチュートリアルでHerokuにアップする時があり、
`git push && git push heroku master`と打つとエラーになりはまってしまったのでその対処法を記述しておきます。

Herokuをデプロイするために打ったコマンド
“`
$ git commit -am “Add hello”
$ heroku create
$ git push && git push heroku master
“`

出てきた内容

“`
hogehoge toy_app % git push -f heroku main
Enumerating objects: 89, done.
Counting objects: 100% (89/89), done.
Delta compression using up to 4 threads
Compressing objects: 100% (72/72), done.
Writing objects: 100% (89/89), 22.14 KiB | 2.21 MiB/s, done.
Total 89 (delta

元記事を表示

OTHERカテゴリの最新記事