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

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

rails c について

## 問題
rails c してもターミナル上に入力したはずのデータが表示されない。
「Object doesn’t support」のエラーメッセージが表示される。

## 原因
rails c でコンソールを起動してから、exit で脱コンソールしてからも、コンソール自体は裏で起動しているため、最新の情報が表示されないらしい。

## 解決
spring status で状況を確認して、spring running の時は、spring stop で停止する。その後、再度 rails c すると無事データが表示された。

# 参照
こちらの記事が参考になりました。
https://mophie-blog.com/2020/12/30/rails-error-object-doesnt-support-inspect/#toc1

元記事を表示

Heroku の dyno type を API で変更する方法(Ruby)

## 背景
Heroku の dyno type を柔軟に変更したいケースがあるかと思いますが、Platform API を利用すれば簡単に実現する事が出来ました。
重めの処理が走る時だけ dyno を Performance-M に変更し、処理が終わったら Standard 1X に戻すなどの操作が可能です。

## 実装

“`:Gem
$ gem install platform-api
“`

“`ruby
require ‘platform-api’

heroku = PlatformAPI.connect_oauth(“#{platform_api_token}”)
heroku.formation.update(“#{app_id_or_app_name}”, “#{formation_id_or_formation_type}”, {“size” => “Standard-1X”})
“`

## 参照
– [Platform API Reference | Heroku Dev Center](https://devcenter.heroku.com/ar

元記事を表示

Railsプロジェクトの始め方

#Railsプロジェクトの始め方
##Railsプロジェクトの作成
rails new プロジェクト名
##データベースの設定
database.yml

default: &default
adapter: postgresql
username: ユーザ名
password: パスワード
host: localhost
database: データベース名

##Vue導入
rails webpacker:install:vue

元記事を表示

[お正月記事]ActiveRecord::ConnectionNotEstablished: Can’t connect to local MySQL server through socket

##背景

“`
docker-compose run backend rails db:migrate
“`
をしようとしたところ
[+] Running 1/0
⠿ Container renote_mysql_1 Running 0.0s
rails aborted!
ActiveRecord::ConnectionNotEstablished: Can’t connect to local MySQL server through socket ‘/run/mysqld/mysqld.sock’ (2)
/app/bin/rails:10:in `
/app/bin/spring:15:in `
/app/bin/rails:3:in `load’
/app/bin/rails:3:in `

Caused by:
Mysql2::Error::ConnectionError: Can’t connect to lo

元記事を表示

ルーティングのネストとは

ルーティングのネストについて勉強したので備忘録としてまとめます。

 ルーティングのネストとは、Twitterなどにある、コメント機能の実装に必要です。
 あるtweet画面の詳細ページを開くと、それに紐づくコメント一覧が出てきます。
これはネストによって、コメントの一つ一つにtweetのidが記録されているからです。

例えばTwitterを例にすると、以下のようなルーティングになります。

“`Ruby:ruby.rb
Rails.application.routes.draw do
resources :tweets do
resources :comments, only: :create
end
end
“`

tweetsコントローラーのルーティングの中に、commetnsコントローラーのルーティングが入れ子構造になっている事が分かります。

#親モデルのidを保持できる
 ネストを行う理由は、親モデルのidを保持できるからです。rails routesコマンドで実行結果を確認してみます。

“`
% rails routes

#実行結果
t

元記事を表示

よく聞くN+1問題って何ぞや?

使っている環境
– Vscode
– Rails 5.2.6
– ruby 2.6.6

目次
– [初めに](初めに)
– [1どんな問題?](#1-どんな問題?)
– [2具体的に中身を見ていく](#2-具体的に中身を見ていく)
– [3解決方法](#3-解決方法)
– [4includesメソッドとは](#4-includesメソッドとは)
– [5データを増やしてみる](#5-データを増やしてみる)
– [6まとめ](#6-まとめ)
– [反省](#反省)
– [参考](#参考)

## 初めに
– 何か不手際があればご指摘いただけるとありがたいです。?

##1. どんな問題?

– テーブルにたくさんアクセスしてしまいデータが多いと重くなる問題

(図:ユーザーがたくさんの映画口コミができる。そして映画一覧の表示で映画に紐づいたユーザーの名前など表示)

##2. 具体的に中身を見ていく

– まず、scaffoldを利用し簡単な投稿アプリを作成

“`ruby
$ rails new movie_review
$ cd movie_review/
$ rails

元記事を表示

rails new で指定するフラグによって生成されるコードの違いを確認するリポジトリを作った

`rails new` するとき、いつも `–skip-xxx` するのとしないとのでどのような違いがあるんだっけ? と気になってしまって毎回調べるのが面倒なのでリポジトリを作りました。

## 作ったもの

– https://github.com/snaka/rails_new_flags

このリポジトリでは、 `Rails version` × `flag` という組合わせで `rails new` を実行して出力されたコードを git の tag で参照できるようにしています。

tag の名前は `{Rails version}-{flag}` の形式になっています。

例えば、 Rails 7.0.0 で `–minimal` を指定して出力されたコードは `7.0.0-minimal` という Tag で参照することができます。

現時点で対応している Rails のバージョンは以下です。

– 6.0.4.4
– 6.1.4.4
– 7.0.0

## 使い方

見ればわかりそうですが、念のため使い方を書いておきます。

例えば Rails 7.0.0 において、

元記事を表示

サブクエリと闘うActiveRecord

# 0. 背景・こんな時に使いたいなど

ユーザー毎の最高得点や、ユーザー毎の最新の投稿などを取得・表示したいケースというのはよくあると思う。

そんな場合のSQL(ActiveRecord)は以下に記すようにある程度パターンとして決まっている気がするので、便利用に記事にしておく。

# 1. ユーザ毎の投稿の最新日時を降順で表示する

## 1-1. WHEREのサブクエリパターン

“`rb
> User.joins(:posts).where(posts: { created_at: Post.group(:user_id).select(‘MAX(created_at)’) }).order(‘posts.created_at DESC’)
# => SELECT “users”.* FROM “users” INNER JOIN “posts” ON “posts”.”user_id” = “users”.”id”
# WHERE “posts”.”created_at” IN (SELECT MAX(created_at) FROM “posts” GROUP B

元記事を表示

Rails 7.0 + Ruby 3.1でゼロからアプリを作ってみたときにハマったところあれこれ

:christmas_tree: Ruby on Rails Advent Calendar 2021の枠が空いていたので、あとから登録しました :christmas_tree:

## はじめに

個人的なプロジェクトになりますが、僕が翻訳しているRSpecの入門書「[Everyday Rails – RSpecによるRailsテスト入門](https://leanpub.com/everydayrailsrspec-jp/)」を2022年前半にRails 7.0バージョンにアップデートしようと考えています。

そこでこの本の中で使っているサンプルアプリケーションをRails 7.0でゼロから作り直してみました。フロントエンド周りを中心に結構考え方が変わっている部分があったので、「ここでハマった!」とか「こういうポイントを押さえておくといいかも」という点をあれこれ書いてみます。

なお、Rails 7.0版のサンプルアプリケーションはまだ公開できる状態ではないので、公開はもうしばらくお待ちください?

### 実行環境

この記事は以下の実行環境で動作確認しました。

– Rail

元記事を表示

マイグレーションにおけるchangeとup/downの違い

##up/downについて
upとdownメソッドは、migrateを実行した時の処理と、rollbackした時の処理を定義します
upで変更したものは、downで元に戻るようにしておかないと、正しくrollbackできません

“`ruby
class AddNameToTitles < ActiveRecord::Migration def up #migrateを実行した時の処理 add_column :title, :name, :string end def down #rollbackした時の処理 remove_column :title, :name end end ``` ##changeについて changeメソッドは、migrateを実行した時の処理を定義します up/downと違うところは、rollback時の処理を勝手に反転して実行してくれるところです ですので、changeメソッドはrollback時の処理を書く必要はありません ```ruby class AddNameToTitles < ActiveRecord

元記事を表示

駆け出しエンジニアが点字メーカープログラムに挑戦(銀座Rails#41)

## 自己紹介
はじめまして。
私はRailsで自社サービスの開発を行っている駆け出しエンジニアです。

|2020年11月|エンジニアとしての学習を開始
|—|—|
|**2021年 5月**|**エンジニアへ転職**

この1年間で自分ができるようになったこと、これから学ぶべきことを知る良い機会だと考え、
[【オンライン開催】銀座Rails#41](https://ginza-rails.connpass.com/event/234304/)の企画に挑戦させて頂きました。

この記事では考えた過程を記載致します。

自分の実装が終わりましたので、これから他の方の実装も見ていきたいと思います。
至らない点は、優しくご指摘頂ければ幸いです。

## 作成したPR
https://github.com/JunichiIto/tenji-maker-challenge-for-ginza-rails/pull/3

# どうやって作ろう? (設計)
まずはどのように実装するかを考えました。
他の人のコードを見ないようにしていましたが、
できれば他の人がやってなさそうな方法にしたいと

元記事を表示

【form_with】名前空間でadminを使用した際の書き方

編集画面の実装がうまくいかず困っていたところ、ドンピシャの記事を見つけたためメモ。
[Rails: form_withで名前空間が異なるコントローラを簡潔に指定する方法](https://techracho.bpsinc.jp/ohno/2019_12_10/84349)

form_withの引数に[:admin, @user]を渡す。

“`
<%= form_with model: [:admin, @user], local: true do |f| %>
“`

元記事を表示

未経験からSESに転職した2021年を振り返る

今年ももう大晦日ですね。

私は今年からエンジニアになりました。
SES・受託開発の企業で、現在はSESとして案件に参画しています。

どちらかというとネガティブなイメージが強いSESですが、
どんな一年だったかを振り返ってみようと思います。

これから未経験からエンジニア転職する際の何か参考になると嬉しいです。

# 結論、めっちゃ楽しい1年だった

ありがたいことに、開発させてもらってます。
チケットから仕様を理解して開発させてもらってます。

その反面悩みすぎて少し仕事をお休みしたり、とても辛い部分も大きかったです。

ざっくりこんな一年でした。

##### 1月
通っていたスクールを卒業した?

転職活動が本格化

書類選考落ちや、返答すらないがほとんどだった

##### 2月

引き続き就活
Twitterで現職のCEOからお誘いもらい、面接に進んだ
面接を経て、内定をいただいた。

企業はこんな感じ↓

– 10人規模のベンチャー
– SES・受託開発
– フルリモート(案件先に端末取りに行くとか、必要なこと以外まじで出社してない)
– CEO CTOがいて、二人とも

元記事を表示

ハンズオン rails new から OAuth2 を使った機能を実装するまで

今年は OAuth2 の仕組みを使ってユーザーに認可を求める Web アプリをたくさん書きました。この振る舞いを実現するために、難しいことは必要ないのですが、いくつかの仕組みをまたいだ作業が必要です。ということで手順のまとめ記事です。

ところで、 ruby で google-apis-ruby-client を使うのが半端なく面倒くさいという記事があるようですが、たぶんどの言語、どのライブラリを使ってもこの手順になるんじゃないかと思っています。

ここでは、 hampton という名前のプロジェクトを生成していきます。以下のコマンドは、 Rails のプロジェクトを生成し、コードを一式そろえてくれます。Rails プロジェクトのフォルダ構造や、どこになにが書いてあるとかは、 https://guides.rubyonrails.org/getting_started.html を読むと良いと思いますが、いまは気にせずに作業していきましょう。

# プロジェクトを生成してエディタで開く

以下のコマンドを実行します。

“`
rails new hampton
“`

画面がこうい

元記事を表示

rails s時の「Address already in use」の解決方法

rails s でローカルホスト3000を立ち上げようとした時に、「Address already in use」というエラーが出て起動ができない問題が派生しました。
その際に実施した解決法について備忘録としてまとめます。

以下エラー文です

“`ruby:qiita.rb
Address already in use – bind(2) for “127.0.0.1” port 3000 (Errno::EADDRINUSE)
“`
翻訳すると、ローカルホスト3000は既に立ち上がっている。という意味なので、ターミナルを全て終了させたのですが、改善しませんでした。

エラーの原因としては、アプリの動作中にctrl cで強制終了させた事のようです。
その際に行った対処法は
①lsof -i:3000コマンドで、ローカルホスト3000を使用しているアプリを見る
②kill -9 PID番号で該当するPID番号のプロセスを終了させる
という手順です。
順番に説明します。

#「lsof -i:3000」 コマンド

まずはlsof -i:3000 コマンドを実行してローカルホス

元記事を表示

【Rails × Vue】本番環境で画像が読み込めないエラー対応

AWSにデプロイしたRailsとVueで作成したポートフォリオにおいて画像が表示されないエラーが発生し、解決したのでその方法です。

#修正前のディレクトリツリー

“`
original_app
|
|–app
| |
| |–assets
| |
| |–images
| |
| |–img1.svg
|
|–src
|
|–pages
|
|–Home.vue #このコンポーネントでimg1.svgを読み込みたい
“`

“`Home.vue

“`

開発環境だとing1.svgを読み込めたが本番環境だとうまくいかなかった。

#原因
通常のrailsアプリであればviewファイルに/assets/画像ファイルと書けばassets以下のimagesフォルダからファイルを探してきてくれるがVueのファイルはjavascriptなのでそのような動作をしてくれなく

元記事を表示

rails generateコマンドまとめ

rails generateコマンド

モデルの作成

コマンド

“`
rails generate model 名前 [カラム名:型[:index]..] [オプション]
“`

結果

“`
invoke active_record
create db/migrate/20211230082754_create_<名前>s.rb
create app/models/<名前>.rb
invoke test_unit
create test/models/<名前>_test.rb
create test/fixtures/<名前>s.yml
“`

参考

Railsドキュメント

コントローラーの作成

コマンド

“`
rails generate controller 名前 [アクショ

元記事を表示

Ruby on Railsのcloud9環境の設定手順

Rails Tutorialより

Rubyドキュメントをスキップする設定を.gemrcファイルに追加するコマンド

“`
echo “gem: –no-document” >> ~/.gemrc
“`

Rails gemのインストール(今回は6.1.4を使用)

Railsバージョンアップ情報

“`
gem install rails -v バージョン番号
“`

bundler gemのインストール(今回は2.2.17を使用)

“`
gem install bundler -v バージョン番号
“`

Yarnのインストール、セットアップ

“`
source <(curl -sL https://cdn.learnenough.com/resize) source <(curl -sL https://cdn.learnenough.com/yar

元記事を表示

Heroku(PostgreSQL)のDBリセット方法

# はじめに
プログラミング初学者の[@kat_log](https://twitter.com/kat__log “Twitter”)と申します。

Heroku(PostgreSQL)で間違えたレコードを登録した時など、DBを一旦リセットする方法の共有です。
(学習中のため、自分へのメモ的な意味もあります?)

# 結論
下記コマンドの実行で可能です。

“`
heroku pg:reset DATABASE
“`

その後、

“`
heroku run rails db:migrate
“`

にて再びマイグレートできます。

# おわりに
お読みいただきありがとうございました。
自分と同じく初学者の参考になれば嬉しいです。
一緒に頑張っていきましょう〜?

元記事を表示

RailsでGraphQLサーバー構築体験??

一応 `RailsでWeb APIを作成する方法とメリット??` の記事の続きですが前回の記事を読んでいなくても構築可能です。

https://qiita.com/digitter/items/53f83ce50036b2773d55

RailsでGraphQLサーバーを立ち上げて基本的なQuery、Nutation機能を実装してみました!

# 前提

– GraphQLをある程度知っていないとコードの理解は困難です。m(_ _)m

– GraphQLが何なのかは説明しません。ある程度、GraphQLがどういうものかを知っている前提で進めます。

>ぜひ[公式サイト](https://graphql.org/)などで仕様をご参照ください。

– HTTP リクエストメソッドについては説明しません。

>MDNをぜひ (https://developer.mozilla.org/ja/docs/Web/HTTP/Methods)

– HTTPリクエストボディの説明はしていません。

>[「分かりそう」で「分からない」でも「分かった」気になれるIT用語辞典](https://wa

元記事を表示

OTHERカテゴリの最新記事