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

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

[Rails]has_oneやbelongs_toをリロード!削除されたときの挙動がreload_associationとreloadで違うので注意!

ActiveRecordのアソシエーションは1度取得するとキャッシュしてくれるため、2度目からはSQLが発行されません。
この機能はとても便利なのですが、たまに最新の情報にリロードしたいときがあります。

例えば下記のようにuser.profile.addressが別で更新された場合です。

“`irb
irb(main):001:0> user = User.first

# profileは初回アクセスなので、SQLが発行される
irb(main):003:0> user.profile.address
Profile Load (0.9ms) SELECT `profiles`.* FROM `profiles` WHERE `profiles`.`user_id` = 2 LIMIT 1
=> “住所だよ”

# profileはキャッシュしているのでSQLは発行されない
irb(main):004:0> user.profile.address
=> “住所だよ”

# 別プロセスでprofile.addressを更新
irb(main):005:0> Profile

元記事を表示

Ruby on Railsのscaffoldを使ってみる

##はじめに
Ruby on Railsのscaffoldを使ってみました。
今までは勉強のために一つ一つ記述していたのですが、一度も使ってなかったのでお試しです。

###scaffoldとは
調べてみると、今まで一つ一つ記述していたモデル、コントローラー、ビュー、ルーティングを自動的に作成してくれるみたいですね。
すごく手間が省かれますね。めっちゃ便利!!

###使ってみた
まずはコマンドです。今回はモデル名は「Post」で作成します。

“`
$ rails g scaffold Post カラム名 データ型
“`

“`
            invoke active_record
create db/migrate/20211031145458_create_posts.rb
create app/models/post.rb
invoke test_unit
create test/models/post_test.rb
create test/fixtures/

元記事を表示

【422 Unprocessable Entity 】のバリデーションエラー、外部キー制約が原因でした。

コードを書いてテストを実行したら**「422 Unprocessable Entity」**というエラーが出ました。
ググってみたらバリデーションエラーみたいです。
そして、自分の場合は外部キー制約の書き方に問題がありました。

### 環境
– Ruby 2.6.3
– Ruby on Rails 6.0.1

#結果
:::note
modelの外部キー制約のチェックを任意にしてあげる。
:::

#前提
利用者(User)が車を1台持っていたり**持っていなかったりする**状況でした。

“`ruby
class User < ActiveRecord::Base has_one :car end class Car < ActiveRecord::Base belongs_to :user # ↑ここが違っていた。 end ``` この状況だとCarモデルに`user_id`がセットされていないとバリデーションエラーが発生します。 そのため、利用者が車を持っていない場合に422エラーが発生していました。 #解決 `optional: true`を追加して

元記事を表示

Rails+React+MySQL+nginx+puma on Docker

はじめまして。
初投稿です。
よろしくお願いします。

# 概要
Docker

# 自己紹介
初投稿なので軽く自己紹介します。
現在横浜の大学に通うB3で絶賛就活中です。

Qiitaの方々の記事に大変お世話になっているのでぜひ自分も書いて誰かの役に立てればと思い書いてみました。
誰かのtipsになれば幸いです。

承認欲求強めです。いいね、ストック、スター、フォローしてくれると飛び跳ねるくらい嬉しいです。
よろしくお願いします。

# すぐはじめたい方へ
完成版
[github](https://github.com/nakanoi/react_rails_nginx_docker)
`clone`後`setup.sh`を実行すればコンテナが立ち上がります。

# 構成
## バック
| | version |
|——————|———|
| Ruby | 2.6.2 |
| Rails(API モード) | 6.1.4 |
| nginx | 1.20.1

元記事を表示

【個人開発】チーム開発にしてみたらメリットいっぱいな話

## 結論

個人開発の目的が
`楽しみたい` or `勉強のために`ならチーム開発するべき

### ターゲット

– 1人で個人開発をしてる人
– 駆け出しエンジニア
– マネジメント力をつけたいと思っている人


### 筆者経験

2ヶ月かけて[個人開発アプリ](https://www.ideee.tech/)を作った
現在、計6人体制でチーム開発を行なって2ヶ月目!

### 作ってるアプリ

アイデアとエンジニアのマッチングアプリ

https://qiita.com/naruqiita/items/f8773efc49651c457cb3

## これまでの背景

駆け出しエンジニアは増えている
`一番の鬼門である就職の難易度UP`
→ お金を払ってでも実務経験を得るサービスなんてのが出てきた。。?

https://gimejob.com/

正直な感想?

`うわ〜、きち〜`です

#### ツイートからの募集

【RSpec】Railsチュートリアル第6版 第8章

#はじめに
Railsチュートリアル第6版のテストをRSpecで書き直していく。

###目次
– [第3章](https://qiita.com/supyolo888/items/35081ead2cfafb40a995)
– [第4章](https://qiita.com/supyolo888/items/939b670b62eb18467f6d)
– [第5章](https://qiita.com/supyolo888/items/42234ac2ed3919b14586)
– [第6章](https://qiita.com/supyolo888/items/bd10e64c77fe391cf203)
– [第7章](https://qiita.com/supyolo888/items/d2824ced26402b5f58d1)
– 第8章(本記事)

#事前準備
Gemfileにテストデータ作成用のFactory Botを追加

“`rb:Gemfile
group :development, :test do
gem “factory_bot_rails”
end

元記事を表示

【Ruby silver】範囲式 フリップフロップ演算子

次のコードを実行するとどうなりますか。 

“`
10.times{|d| print d == 3..d == 5 ? “T” : “F” }
“`

解説文

d == 3..d == 5の部分は条件式に範囲式を記述しています。
この式は、フリップフロップ回路のように一時的に真偽を保持するような挙動をとります。
詳細は、Rubyリファレンスに詳しい説明がありますのでそちらを参照してください。

  • https://docs.ruby-lang.org/ja/latest/class/Range.html
  • 初めて見た時に混乱しました。
    どうゆう順番で評価するか整理して考える必要があったのでまとめます。

    **⑴Rangeの復習**

    “`ruby
    # ..の場合
    a = (1..5).to_a
    => [1, 2, 3, 4, 5]

    # …の場合
    a = (1…5).to_a
    => [1, 2, 3, 4]
    “`
    ?
    ..の場合は5を含む1〜5の範囲になる。
    …の場合は4.9999…までは対象になるが5は範囲に

    元記事を表示

    細かいつまずいたことをメモしておく(10月編)

    # はじめに

    2021年10月も仕事や勉強でつまづいたことをまとめて自分用のメモとしてあげておきます。
    調べればすぐわかる程度で私が記事にする必要はないなと思ったもです。

    今月は仕事の繁忙期を乗り切り(来月再来予定)、比較的落ち着いた1か月となりました。

    しかし、Windows11が始まるなどのトラブルが起きており、それに関連した問題に対処しました。

    # 問題

    ## 1. GoogleColabratoryでMeCab+Neologdを使いたい

    https://qiita.com/jun40vn/items/78e33e29dce3d50c2df1

    こちらの記事を参考にした。

    インストールは以下のコマンド

    “`
    !apt-get -q -y install sudo file mecab libmecab-dev mecab-ipadic-utf8 git curl python-mecab > /dev/null
    !git clone –depth 1 https://github.com/neologd/mecab-ipadic-neologd.git > /

    元記事を表示

    Progate Ruby on Rails5 VI ~ VII 個人的ざっくりまとめ

    # emailの重複がないかチェック

    バリデーションで`uniqueness: true`を指定

    “`rb:models/user.rb
    class User < ApplicationRecord validates :email, {uniqueness: true} end ``` # マイグレーションファイルのみ作成 データベースに変更を加えるが、モデルは必要ないとき `rails g migration ファイル名`をターミナルに入力 ```terminal:ターミナル $ rails g migration add_image_name_to_users ``` # マイグレーションファイルの仕組み テーブルの変更を加えるには、マイグレーションファイルのchangeメソッドの中に処理をかく ```rb:20170427053118_add_image_name_to_users.rb class AddImageNameToUsers < ActiveRecord::Migration[5.0] def change # 変更内容 e

    元記事を表示

    rails6 bootstrap5導入方法

    #はじめに

    railsチュートリアルを進めるに当たってbootstrap3を導入することがあるのですが、2周目でローカル環境で進めていることもあり、bootstrap5を使用してみようと思い、導入できるようになるまでの備忘録です。
    詳しいことは分かりませんが色々な記事を参照して自分にできそうな方法で導入しました。

    railsチュートリアル同様、gemを入れてsassにインポートするやり方です。

    #筆者の環境

    `Macbook Air(M1, 2020)`
    `macOS Big Aur バージョン11.4`

    `ruby 3.0.2p107 (2021-07-07 revision 0db68f0233) [arm64-darwin20]`
    `Rails 6.1.4.1`

    #①gemを入れる
    bootstrap3では’gem bootstrap-sass’を入れていましたが、bootstrap5では2つ入れるそうです。

    “`ruby:Gemfile
    gem ‘bootstrap’, ‘~> 5.1’
    gem ‘jquery-rails’
    “`

    #②cssファイルをscs

    元記事を表示

    【コードリーディング】Rails 1.0 ActiveRecordのソースコードを読んでみた

    #はじめに
    Railsポートフォリオ作成でActiveRecordを使っており、作成当時は正直内部処理がどうなっているのか分かっていませんでし、気にもしていませんでした笑

    そういった中、実務案件で直接SQLを書く機会があり、ActiveRecordって実際どういう風にSQLに置換して実行しているのか気になりはじめました。

    そこで、ActiveRecordのソースコードでSQLに置き換えている仕組みの部分のコードを読んで理解した部分を書き留めたいと思います。

    #今回読んだソースコード
    今回はコードの流れをシンプルに見たかったので最新のソースコードではなくRails v1.0.0のソースコードを読みました。とは言ってもコードは約1800行もあり、読むのになかなか骨が折れました笑

    その中でもController部分でよく使用するfindメソッドに絞って読んだものを記載します。
    ソースコード元は[こちら](https://github.com/rails/rails/blob/v1.0.0/activerecord/lib/active_record/base.rb#L378)

    #そ

    元記事を表示

    【RSpec】Railsチュートリアル第6版 第7章

    #はじめに
    Railsチュートリアル第6版のテストをRSpecで書き直していく。

    ###目次
    – [第3章](https://qiita.com/supyolo888/items/35081ead2cfafb40a995)
    – [第4章](https://qiita.com/supyolo888/items/939b670b62eb18467f6d)
    – [第5章](https://qiita.com/supyolo888/items/42234ac2ed3919b14586)
    – [第6章](https://qiita.com/supyolo888/items/bd10e64c77fe391cf203)
    – 第7章(本記事)

    #Minitest

    ###ユーザー登録に対するテスト

    “`rb:test/integration/users_signup_test.rb
    require ‘test_helper’

    class UsersSignupTest < ActionDispatch::IntegrationTest test "invalid signup info

    元記事を表示

    【RSpec】Railsチュートリアル第6版 第6章

    #はじめに
    Railsチュートリアル第6版のテストをRSpecで書き直していく。

    ###目次
    – [第3章](https://qiita.com/supyolo888/items/35081ead2cfafb40a995)
    – [第4章](https://qiita.com/supyolo888/items/939b670b62eb18467f6d)
    – [第5章](https://qiita.com/supyolo888/items/42234ac2ed3919b14586)
    – 第6章(本記事)
    – [第7章](https://qiita.com/supyolo888/items/d2824ced26402b5f58d1)

    #Minitest

    ###Userテスト

    “`rb:test/models/user_test.rb
    require ‘test_helper’

    class UserTest < ActiveSupport::TestCase def setup @user = User.new(name: "Example User", email:

    元記事を表示

    【RSpec】Railsチュートリアル第6版 第5章

    #はじめに
    Railsチュートリアル第6版のテストをRSpecで書き直していく。

    ###目次
    – [第3章](https://qiita.com/supyolo888/items/35081ead2cfafb40a995)
    – [第4章](https://qiita.com/supyolo888/items/939b670b62eb18467f6d)
    – 第5章(本記事)
    – [第6章](https://qiita.com/supyolo888/items/bd10e64c77fe391cf203)
    – [第7章](https://qiita.com/supyolo888/items/d2824ced26402b5f58d1)

    #事前準備
    Gemfileにsystem spec用のcapybaraを追加

    “`rb:Gemfile
    group :test do
    gem ‘capybara’
    end
    “`

    ファイル内容の変更

    “`rb:spec/support/capybara.rb
    RSpec.configure do |config|
    config.before

    元記事を表示

    【RSpec】Railsチュートリアル第6版 第4章

    #はじめに
    Railsチュートリアル第6版のテストをRSpecで書き直していく。

    ###目次
    – [第3章](https://qiita.com/supyolo888/items/35081ead2cfafb40a995)
    – 第4章(本記事)
    – [第5章](https://qiita.com/supyolo888/items/42234ac2ed3919b14586)
    – [第6章](https://qiita.com/supyolo888/items/bd10e64c77fe391cf203)
    – [第7章](https://qiita.com/supyolo888/items/d2824ced26402b5f58d1)

    #Minitest

    ####StaticPagesコントローラーのテスト

    “`rb:test/controllers/static_pages_controller_test.rb
    require ‘test_helper’

    class StaticPagesControllerTest < ActionDispatch::IntegrationTe

    元記事を表示

    【Ruby on Rails】アソシエーション先のデータを `create_テーブル名` メソッドで作成する。

    ### 環境
    – Ruby 2.6.3
    – Ruby on Rails 6.0.1

    #できること
    `has_one` でアソシエーションしている場合、
    アソシエーション先のデータを`create_テーブル名`メソッドで作成できる。

    #前提
    Authorモデルに対してBookモデルがhas_oneアソシエーションしています。
    一人一冊、本を書いている状況です。

    “`ruby
    # author.rb
    class Author < ActiveRecord::Base attr_accessor :name :age has_one :book end # book.rb class Book < ActiveRecord::Base attr_accessor :title belongs_to :author end ``` # 実例 ```ruby author = Author.create(name: 'John', age: 30) author.create_book(title: 'cooking book') ``` # 最後に 上記書いておい

    元記事を表示

    deviseについて

    ## はじめに
    RubyのライブラリであるGemの「devise」のまとめです。
    「device」ではなくて「devise」なので注意。

    ### deviseでできること
    「devise」は簡単に認証機能を作成することができます。
    認証機能は新規登録画面とかログイン画面とかのことで、
    ユーザー登録が必要なサイトでは必須ですよね。

    ### 導入してみる

    #### deviseのインストール
    “`ruby:Gemfile
    gem ‘devise’
    “`
    を追加して

    “`
    $ bundle install
    “`
    をターミナルに入力。

    ####初期設定
    設定ファイルをインストールするために

    “`
    $ rails g devise:install
    “`

    これでdeviseを使用する準備は完了。

    config/initializers/devise.rb
    config/locales/devise.en.yml

    の設定ファイルが作成されているはずです。

    ####テーブルの作成
    今回はモデル名は「User」で作成します。
    「devise」はユーザテーブルを自動的に作成

    元記事を表示

    【Ruby on Rails】migration index too long なエラーを解決

    ### 環境
    – Ruby 2.6.3
    – Ruby on Rails 6.0.1
    – **PostgreSQL 10**

    # 発生状況
    今回のエラーが起きたマイグレーションファイル

    “` ruby
    class CreateFooBarExampleRegistrations < ActiveRecord::Migration[6.0] def change create_table :foo_bar_example_registrations do |t| t.references :parent_example_table_name, null: false, foreign_key: true t.timestamps end end end ``` **長いテーブル名&カラム名に外部キー制約を設定しようとしていました。** # エラー文 実行すると... ```ruby Index name 'index_foo_bar_example_registrations_on_parent_example_table_na

    元記事を表示

    DockerでMailcatcherを使ってRuby on Rails開発環境のメールを受信する

    Mailcatcherの概要は公式サイトで色々記載されています:https://mailcatcher.me

    letter_opener も Ruby on Rails 開発環境のメールがテストできるが、個人的には Mailcatcher の方が便利で使いやすいので、よく使います。

    # docker-compose設定

    “`yaml:docker-compose.yml
    mailcatcher:
    image: schickling/mailcatcher
    container_name: mailcatcher
    ports:
    – ‘1080:1080’
    – ‘1025:1025’
    “`

    Dockerを起動したら「localhost:1080」で管理画面にアクセスできます。

    ![スクリーンショット 0003-10-30 22.10.33.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/35605/6e67d721-a5c9-7f9c-d759-e70853ffd5c

    元記事を表示

    Ruby on RailsアプリでAWS SESを使ってメールを送信する方法(設定から実装まで)

    前はずっとSendGrid経由でメール送信機能を使っていましたが、せっかくAWSでアプリケーションをデプロイするのでAWSのサービスを使いたかったです。その為メール送信機能をSendGridからAWS SESに移動しました。

    では、簡単に言うと Amazon Simple Email Service (SES) は、デベロッパーが任意のアプリケーションでメールを送信できるようにする、費用対効果の高い、柔軟でスケーラブルなメールサービスです。

    # SES設定

    ## sandboxから移動

    新規AWSアカウントではSESの制御があるます、確認済みのアドレスしか送信できなくて、1日最大200メールや1秒にあたり1メールなどの制限があります。
    なので本番で使用できるにはリクエストをしなければなりません。

    リクエスト方法はまずこのリンクにアクセス:http://aws.amazon.com/ses/fullaccessrequest

    自分の場合は画像のように入力したら半日後で承認されました。

    ![スクリーンショット 0003-10-30 11.54.00.png](https://

    元記事を表示

    OTHERカテゴリの最新記事