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

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

【Rails】マイグレーションコマンド

コマンド

「bundle exec rails」は「bin/rails」でもOK

# 新規モデル作成
“`
bundle exec rails g model モデル名 カラム名1:型 カラム名2:型
“`

例えば「nameというstringのカラムだけを持つuserモデル」を作成する場合↓
“`
bundle exec rails g model user name:string
“`
これだけで下記ファイルを自動生成してくれる
“`
create db/migrate/20220422143603_create_users.rb
create app/models/user.rb
create test/models/user_test.rb
create test/fixtures/users.yml
“`

気になるマイグレファイルの作成結果
“`db/migrate/20220422143603_create_users.rb
class CreateUsers < Activ

元記事を表示

【rails】image_tagで超簡単に画像を丸く(円形に)くり抜いて表示する方法

久々に、railsの`erb`を使う機会があり、画像を丸く(円形に)くり抜いて表示する要件があったので調べました。

左の画像を右のように表示したいです。


結論

“`erb
<%= image_tag "画像パス or URL", style: "border-radius: 50%; width: 200px; height: 200px; object-fit:cover;" %>
“`
※ `width`と`heihgt`は同じ値にしてくだ

元記事を表示

Rubyの基本的な知識(備忘録)

プログラム言語「Ruby」とは?
①入力する文字数が少ない。
②初心者でもわかりやすく、理解しやすい言語である。
③日本人により開発された言語であるため、日本語の情報が豊富に存在する。
④Ruby On Railsと言われる補助言語(フレームワーク)のようなものがあり、いろんな機能を素早く実装できる。
⑤スタートアップ等の企業で採用されることが多い。(とのこと。)

【主観】
個人的に他の言語「Python、Java」等の言語を調べたが確かに、Rubyの方が記述量は少なく理解しやすかった。

今後も学んだことを発信していきたいと思います。

元記事を表示

7-8億レコードを加工処理してS3へ連携した話

## はじめに

今まで一般的なWeb開発はしてきたけど高速化についてあまり考慮せずに実装してきたエンジニアの方に向けて、筆者のデータ ( **7億-8億レコード** ) 加工処理高速化の経験を基に、本番実行で何を目指すかということと、それまでに実際にどのようなアプローチがあるのかを提案できればと思います。
あくまで提案なので、「こうしたらもっと高速になるよ」的な箇所は多々あるかと思います。
コメントなどでご指摘いただければ幸いです。

## 本記事における前提条件

本記事における前提条件を筆者の経験した環境を参考に記載します。

### 本プロジェクトの背景及び要件

– 既存サービスで蓄積されたデータを外部のシステムに連携して有用活用するにあたってのPoVを実施する。
– 既存サービスで蓄積されたデータの一部を匿名化 (ハッシュ化) したものをCSVに書き出し、外部のシステムにPOSTする。
– 本番実行までの実装及び検証は短期間 (2-4週間程度) である。
– **加工処理はできるだけ早く完了させる**

### 採用したテクノロジー

– Ruby on Rails API

元記事を表示

Railsに簡単な検索フォームを作ってみた(Ransack)

自分の作成している掲示板サイトに簡単な検索フォームを作りたいと考え、Ransackというgemを使い、記事を参考にしながら作成しました。

参考記事

Railsアプリに簡単に検索フォームを実装する方法とは?

環境とver
ruby ‘2.7.5’
rails ‘6.1.4’
Docker

github
https://github.com/takoyan33/railsdock4

まず最初に
“`Ruby:Gemfile
gem ‘ransack’
#ransackを追加
“`

“`Ruby:ターミナル
bundle install
#dockerの場合、docker-compose run web bundle install
“`
これでransackを入れることができました。
次にコントローラーに記述します。
自分の場合、kaminariのgemを入れているのと、降順に表示したいので、
色々後ろについています。
普通に追加する場合は、.page(params[:page]).per(8).all.order(id: “DESC”)の後ろは消して大丈夫

元記事を表示

【Rails】Model名とControllerのModule名が重複してNoMethodErrorが発生した時の対応

備忘を兼ねて

## Moduleとモデル名が重複するとNoMethodErrorになる

ファイル構成

“`
app
├── controllers
│ └──user
│ └── hoges_controller.rb
└── models
└── users.rb
“`

“`rb:hoges_controller.rb
module User
class HogesController < User::ApplicationController def index User.where(id: ids) end ## その他メソッド省略 end end ``` ```:エラー内容 NoMethodError in User::HogesController#index undefined method `where' for User::Module ``` ## エラーの原因 モデル名とコントローラー側で定義したモデュール名が重複しており、`User

元記事を表示

railsで新規プロジェクトを作成する手順

備忘録。
railsで新規プロジェクトを作成する。

### ツール
– SourceTree

### 環境

“`
ruby -v
#=> ruby 2.6.5p114 (2019-10-01 revision 67812) [x86_64-darwin19]

rials -v
#=> Rails 6.0.2.1
“`

### rails new

“`
rails _6.0.2.1_ new appname –database=postgresql –skip-bundle
“`

– `\_6.0.2.1_`
railsのバージョンの指定

– `appname`
アプリケーションの名前を記述する

– `–database=postgresql`
データベースの指定

– `–skip-bundle`
Gemfileを読み込まないようにする

:::note
「なぜGemfileを読み込まないようにするのか?」
Gemfileには、railsのバージョンに関する記述がある。その記述は、railsの最新版をインストールするように指定している。
この環境だと、

元記事を表示

[Rails] PG::ConnectionBad: local user with ID 502 does not existが出た時の対処法

# はじめに
データベースで操作で`PG::ConnectionBad: local user with ID 502 does not exist`というエラーが発生した行った対処法を記事に残したいと思います。

# エラーの発生
以下のコマンドを実行した時に
“`console:コンソール
bundle exec rails db:migrate:status
“`
このようなエラー文が出ました
“`
=> Running via Spring preloader in process 74769
rake aborted!
ActiveRecord::ConnectionNotEstablished: local user with ID 502 does not exist
/Users/mouriyuka/runteq/pf/shere-lerning-video/vendor/bundle/ruby/3.0.0/gems/activerecord-
6.1.5/lib/active_record/connection_adapters/postgresql_adapt

元記事を表示

Rubyでスマートに+09:00を出したかった

皆さんはアプリケーション開発中に、タイムゾーンを意識することはどれくらいあるでしょうか?

普段の開発だと、一度設定してしまえば中々意識しにくいものですが、たまたま今回こちらに関して触る機会があったので記事にすることにしました。

## 今回やりたかったこと
UTCからの時差を`+09:00`のような、`±xx:yy`(xxが時間、yyが分)の形式で取得することです。
というのも、Elasticsearchに時差を考慮した日程の絞り込み検索を行いたい、と考えていました。
Elasticsearchでcreated_atが2022年4月のドキュメントを探したい、という場合以下のような絞り込みを行います(下記はクエリの一部を抜粋)。

“`json
{“filter”:{“range”:{“created_at”:{“gte”:”2022-04-01″,”lt”:”2022-05-01″}}}
“`

しかし、これではタイムゾーンが何も配慮していないため、時間の絞り込みはUTC基準で行われ、日本時間だと9時間ずれてしまいます。
この場合、そもそもcreated_atを9時間ずらして入

元記事を表示

【Rails】レコードを配列の順番に並び替える

# 初めに

## 環境

Rails 7.0.2
Ruby 3.1.1

## やりたいこと

配列の順番にレコードを並び替える。

# 本文

通常 where に配列を渡して、レコードを取得すると id 順に並び替えられて取得されます。
ですが`in_order_of`を使用することで配列の順番に並び替えられます。

“`ruby
arr = [11,2,4,6,8,1]

users = User.where(id: arr)
# puts users.ids -> [1,2,4,6,8,11]

users = User.where(id: arr).in_order_of(:id ,arr)
# puts users.ids -> [11,2,4,6,8,1]
“`

ちなみに `Rails 7.0.0`になってから追加されたメソッドでデータベースが `Mysql` や `postgresql` でも関係なく動きます。

# 参考

[in_order_of – Rails ドキュメント](https://railsdoc.com/page/in_order_of)

元記事を表示

Herokuへのデプロイがfatal: the remote end hung up unexpectedlyで失敗した件

いつも通りRailsアプリをHerokuにデプロイしようとすると、以下のようなエラーが出た。

“`
>> git push heroku master
Enumerating objects: 67, done.
Counting objects: 100% (67/67), done.
Delta compression using up to 16 threads
Compressing objects: 100% (50/50), done.
Writing objects: 100% (54/54), 23.86 MiB | 311.00 KiB/s, done.
Total 54 (delta 17), reused 22 (delta 4), pack-reused 0
error: RPC failed; HTTP 504 curl 22 The requested URL returned error: 504
send-pack: unexpected disconnect while reading sideband packet
fatal: the remo

元記事を表示

Railsのエラーではまったらやること

### 結論
1. エラー文を読む
2. デバッグツールを使いながらエラー解消を試みる
3. それでも解消できなければ誰かに質問する

です。

### エラー文を読む
エラーにはまっている人はエラー文をしっかり読んでいない印象があります。しっかりエラー文を読みましょう。エラーをきちんと読んでなかった人はこれするだけで大分変わります。また、エラーを直せない原因として単純に知識不足の場合もあるのでその場合は公式ドキュメントを読んで勉強し直しましょう。

### デバッグツールを使いながらエラー解消

putsなどを使ってデバッグしていないでしょうか?デバッグツールを使った方が変数の中身など覗きやすいので利用していきましょう。デバッグツールのイメージがつかない方もいると思うので簡単な使用例を出します。

gem pry-byebugを用いて変数のuserの中身を覗きます。

まず覗きたい変数の近くにbinding.pryを差し込みます。

“`ruby
def show
user = User.find(42)
binding.pry
render json: user,

元記事を表示

まとめてレコードを作成する時はトランザクションを使おう

# トランザクションとは

**トランザクション**とは…コンピュータ システムにおける、永続的なデータに対する不可分な一連の処理

**ロールバック**とは…データ更新などで障害が起こったときに、その前の状態にまで戻ることをいう

# トランザクションの具体例

例えばTwitterでフォローしてる人のツイートを通知ONにしている時、

・ツイートの作成
・通知の作成

の二つはセットで作成されるべきです。ツイートだけ作成に成功する、または通知だけ作成に成功するというのはよろしくないですね。そういう時に、処理をトランザクションとして書くことで一連の処理を確実にすることができるようになります。もし、エラーが発生した場合はロールバックされ元の何も手を加えられていない状態に戻ります。

個人開発やポートフォリオの作成ですとこういった守りの開発(他にもエラーハンドリングとか)が疎かになりがちかと思いますが実務では必須なので日頃の開発から癖づけておくと良いかもです。

Railsですとトランザクションはこんな感じに書けます。

“`ruby
def create
Act

元記事を表示

Railsアプリで時々あるServiceディレクトリの役割

# はじめに
Serviceを今まで、なんとなくで利用してきていたので「Serviceとはなんだ?」というのを調べてみました。

# 事前知識

ファットモデル…ビジネスロジックが大量に書かれているモデル

ビジネスロジック…業務システムの中で、具体的な業務で扱う様々な実体(商品、顧客、在庫など)を表現し、また、それらの関係や処理の方法、業務の流れなどをデータモデルやプログラムコードなどとして実装した部分。

# Serviceとは?

僕はServiceを「ファットモデルになることを回避し、コードを読みやすくするためのコード分割先」という意味だと理解しました。

具体的にServiceに置かれる処理は

・外部サービスを利用する処理
・複数のモデルに渡る複雑な処理

になります。

Serviceを活用することでコントローラーもモデルもすっきりしコードの可読性が上がるというわけです。

# Serviceはどのように書く?

書き方はどうやら多岐にわたるようです。そのため逆にどこにでも共通しているのが書き方の規約をプロジェクトで決めてるということです。

例えば

・クラス

元記事を表示

【rails】chartkick導入ガイド

# はじめに
個人開発の過程でkickchartを利用する機会があったのですが、日本語の記事でわかりやすいものがあまり見つからなかったので公式ドキュメントを日本語化&個人的に役に立った内容を記載しておきます!kickchartを利用する際の参考にしてください!!

# 導入

まずはkickchartの導入からです。rails のバージョンによって導入方法が違うので注意してください!
どのバージョンであってもまずはgemファイルに以下の記述を書き加えてください!!

“`ruby:gemfile.rb
gem “chartkick”
“`

## rails7の場合

configのimport.rbに以下の記述を追加してください。

“`ruby:config/importmap.rb
pin “chartkick”, to: “chartkick.js”
pin “Chart.bundle”, to: “Chart.bundle.js”
“`

また、app/javascript/application.jsに以下の記述を追加してください。
“`ruby:app/j

元記事を表示

【Ruby】あるメソッド内で別のメソッドを呼び出す時に意識すること

こんにちは。
早く駆け出したい @iloveomelette です。

突然ですが、みなさんはあるメソッド内から別のメソッドを呼び出したい時のインスタンスメソッドとクラスメソッドの使い分けはできますでしょうか。
恥ずかしい話ではありますが、私はあやふやでよく`NoMethodError`を出していました。

今回、勉強したことをここにアウトプットしていきますので、
私と同じく使い分けが曖昧な方はサラッとでも良いので、参考にしてくださると幸いです。

尚、ご指摘箇所がございましたら
ご教授いただけますと幸いです。

## 問題

いきなりですが、問題です。
以下の`Actress`クラスにある`yoshioka`メソッドはブロック内にある`arimura`メソッドを呼び出すことはできるでしょうか。

“`ruby
class Actress
def self.yoshioka
arimura
end

def arimura
puts ‘Hello World!!’
end
end

Actress.yoshioka
“`

正解は…

“`zs

元記事を表示

Rails Tutorial の後に何をする?

前置き

※前回の投稿後( Rails Tutorialを終えて)の経過記録になります。

本文

前記事で設定した課題であるDocker, MySQLを利用した環境を構築し、Rails Tutorialを作り直しました。docker関連のコマンドが自然と身につきました。
環境構築のテンプレートとして【Rails6】Docker+Rails6+puma+nginx+mysql【環境構築*初心者必見】の記事を利用しました。
また、開発を進める中でgitコマンドの理解を深められたことで、間違えても修正できるという安心感に結びつきました。

  • 課題(短期)

  • * 完成したRails TutorialのCSSをいじることでCSSの仕様に慣れる。

    元記事を表示

    画面要素出し分けのABテスト時のRSpec(Capybara)の記述

    ABテストで画面要素の出し分け時、画面表示のspecを書く際の記述を思い出すのに時間がかかったのでメモ

    “`show.html.slim
    – case @ab_test_pattern
    – when ‘existing_question’
    – f.select :do_you_like_mushroom_mountain, id: ‘mushroom_mountain’
    – when ‘new_question’
    – f.select :do_you_like_bamboo_grove, id: ‘bamboo_grove’
    “`

    “`show_spec.rb
    # TODO: ABテスト決着後、条件分岐削除
    # ref: https://github.com/xxx/issues/yyy
    it ‘should have correct fields’ do
    if page.all(‘#mushroom_mountain’).empty?
    expect(page).to have_selector ‘select#bamboo_grove’
    e

    元記事を表示

    新規アプリケーション作成からdeviseを導入するまで

    めちゃくちゃ基礎ですけど、今カリキュラム見ながら一個一個やってるので纏めときます。(今後も使うので)

    # ターミナルからrails newでアプリを新規作成
    “`ruby
    % cd ~/projects
    % rails _6.0.0_ new “アプリ名” -d mysql
    % cd “アプリ名”
    “`

    # データベースを作成

    config/database.yml
    “`ruby
    default: &default
    adapter: mysql2
    encoding: utf8 #mb4を消す!
    pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
    username: root
    password:
    socket: /tmp/mysql.sock
    “`

    ターミナル
    “`
    % rails db:create
    “`

    ここで rails sしてサーバー再起動しておく

    ↓以下deviseの導入なり

    Gemfile
    “`ruby
    gem ‘devise’
    “`
    ターミナル
    “`
    % bundle i

    元記事を表示

    minitestでE2Eテストをする

    # はじめに

    rspecの実装例はたくさんあるのですが、minitestがなかったので備忘録。

    # 前提条件

    – rails7でrails newした直後の状態を想定
    – docker-composeを利用
    – capybara + selenium-webdriverの組み合わせ

    # Goal

    – bin/rails test:systemがエラーなく動作する
    – テスト中のブラウザの動きを確認することができる

    # 修正箇所

    ## 1. Gemfileの修正

    下記のように `selenium-webdriver` を追加してbundle installしてください。

    “`ruby:Gemfile
    group :test do
    # Use system testing [https://guides.rubyonrails.org/testing.html#system-testing]
    gem “capybara”
    + gem “selenium-webdriver”
    end
    “`

    ## 2. application_system_test_case.

    元記事を表示

    OTHERカテゴリの最新記事