Rails関連のことを調べてみた2020年07月12日

Rails関連のことを調べてみた2020年07月12日
目次

【Rails】RspecでCapybaraを使用した際に「undefined method `visit’」というエラーが出た場合の解決方法

# 開発環境 ・Ruby: 2.5.7 ・Rails: 5.2.4 ・rspec-rails: 4.0.1 ・Capybara: 3.32.2 ・Vagrant: 2.2.7 ・VirtualBox: 6.1 ・OS: macOS Catalina # 前提 下記実装済み。 ・[Slim導入](https://qiita.com/matsubishi5/items/b639ffddecc626856039) ・[Bootstrap3導入](https://qiita.com/matsubishi5/items/b117c95f4dd71340cc80) ・[Font Awesome導入](https://qiita.com/matsubishi5/items/a4c72f436e64ad106ee8) ・[ログイン機能実装](https://qiita.com/matsubishi5/items/5bd8fdd45af955cf137d) ・[投稿機能実装](https://qiita.com/matsubishi5/items/1a5aeab651b5822d1f2c) #
元記事を表示

booleanのvalidateについて

booleanのカラムについて、バリデーションをかけたがvalid?がtrueにならず、期待していた実行とは違うものになってしまった! そこで、booleanのカラムについて調べたことを備忘録としてまとめておく! ダメなパターン:Notnull制約でfalseが入っているので、presence: trueをすれば良いと思い下記のようにした! “`ruby: validates :check, presence: true “` しかし、これだとcheck=falseの時にエラーが出てしまう! 調べてみると、下記のようにする必要があることがわかった! “`ruby: validates :check, inclusion: {in: [true, false]} “` 参考資料 https://qiita.com/mktakuya/items/a13c2175f0f0d9871038
元記事を表示

[Rails]No route matches [GET] “/users/sign_out”の対処法

## はじめに ログアウトを実行するとルーティングエラーが発生したのでアウトプット ## 環境 Rails 5.0.7.2 ruby 2.5.1 devise ## 問題点 deviseのアカウント編集機能を実装し、ログアウトをリクエストすると、 **No route matches [GET] “/users/sign_out”**とエラー発生 ## 原因 sign_out時のメソッドが**DELETE**から**GET**に変更されているので(いつなったのかは把握できていない)、変更すれば解決しそう。 ## 対処方法 config/initializers/devise.rbを編集▼ “`devise.rb #省略 config.sign_out_via = :delete #省略 “` 上記の記述を**get**に変更▼ “`devise.rb #省略 config.sign_out_via = :get #省略 “` サーバーを再起動して、**rake routes**をターミナルにて実行すると▼ “` destroy_user_sessi
元記事を表示

all_month が気になって ActiveSupport DateAndTime::Calculations を読んでみた

# これ何 先輩にレビュー中に、 all_month 使った方がいいんじゃない?と言われたので、気になって調べてみた。 ActiveSupport の [DateAndTime::Calculations](https://api.rubyonrails.org/v5.1/classes/DateAndTime/Calculations.html) に定義されていたので、周りのmethodも読んでみる # 範囲指定のmethod all_monthの内部実装を眺めてみた。rails/railsの内部実装だが、読めるコードでわかる。 “`ruby def all_month beginning_of_month..end_of_month end “` ref: [activesupport/lib/active_support/core_ext/date_and_time/calculations.rb](https://github.com/rails/rails/blob/fc72d6815ad6ed447f1aea2dd98579305ea1cca4/activesu
元記事を表示

未経験が受託企業に入って1年経ったので、学んだスキル全部書いてみる

#はじめに  2019年6月にキャリアをスタートさせました。 Railsエンジニアとして1年でいろいろなことを学んできたので、簡単にまとめていきます。 いろいろなキャリアの積み方があるのでどれほど成長できてるのかは不明ですが、ほんの一例としてご参考ください。 ※表現のおかしい点等ありましたら、ご指摘頂けますと嬉しいです。 前回:[未経験が受託企業に入って半年経ったので、学んだスキル全部書いてみる](https://qiita.com/wann/items/2ccbe77ba7939b03ba9c) #簡単な経歴 ・一般大卒  パソコンスキルはitunesで音楽入れる程度 ・某アパレルチェーンで3年勤務  内2年管理職  パソコンスキルはWordで毎週報告書を書く程度 ・2018/12〜  Mac購入        某オンラインスクールで勉強開始 ・2019/3〜 独学開始、都内もくもく会に週1参加、Menta契約、アプリ作成 ・2019/6〜 就職 ・2020/7 現在(2年目) #半年〜1年で学んだこと ##1)技術関連 ###Ruby/Rails 4ヶ月くらいは毎
元記事を表示

Railsでのorderメソッドの説明

ツイート機能やタイムライン機能をwebアプリケーションに実装した時、新しく投稿すると下に表示されてしまいます。

その順序を並び替えるのに「orderメソッド」を使用します。その使い方を説明します。

orderメソッド


テーブルから取得してきたインスタンス群を並び替えることができるメソッドです。

引数に「テーブルカラム名、並び替える順序」を記述して変化させる。


書き方例


def index
  @tweets = Tweet.order("created_at DESC")
元記事を表示

Rails 6 + Vue(単一コンポーネント) + vue-router + Vuetify だけどMPA(SPAではない) - Multi SPA

# 構成 ひとつのRailsアプリケーション上に、単一コンポーネントで構成されたSPAを配置します。 まずはひとつのSPAをおくことを目標にしますが、同様に複数のSPAを置くことを意図しています。(よって完全なSPAではありません。またMulti-SPAとなります。) 構成のイメージ: - /shared - /private - /private/episode/:id/schedule - ここをSPAにする # Rails Rails は、MVCなMPAアプリケーションをつくります。 Rails 6 webpacker を利用して vue を用います。webpacker と Vue の導入については説明を省きます。 ## Layout SPA 用の layout を設けて、コントローラ(あるいはアクション)で切り替えます。ここでは `application_spa` とします。 application_spa は後述します。コントローラ#アクション schedule で layout を指定すると下記のようになります。これで episode_controll
元記事を表示

高卒フリーターから、Web系自社開発企業のエンジニアになるまで

# はじめに 一浪して入った大学を中退し、webエンジニアを目指して学習を開始してから約半年間、 晴れて__web系自社開発企業様からサーバーサイドエンジニア__として内定を頂けたので、学習過程や、就職活動で得た知見を共有したいと思います。 就職活動中の方のご参考になれば幸いです! 僕のスペックは以下の通りです。 __今年23歳/高卒/フリーター/社会人経験なし__ 謙遜ではなく、どう考えても高スペックではありません。 こんな僕が内定を得るためには、そう選択肢はありません。やるべきことは決まっていました。 __モダンな技術を使用したポートフォリオを作ること。__ 以下、学習手順と、就職活動内容を書きます。 # 目次 0. ポートフォリオ紹介 1. ProgateにてHello World (2020/1月) 2. ドットインストールを貪る (2020/2月) 3. モダンな技術にチャレンジ(Docker,AWS) (2020/3月) 4. ポートフォリオ作成 (2020/4月~6月) 5. いざ、就職活動へ (2020/6月~7月) 6. 就活を終えての所感 Ruby on Rails 遷移元によって条件を変更させる2パターン
プログラミングスクールのチーム開発でECサイトを作成している際、 どこのリンク先から遷移したかでインスタンス変数を変えたい・・・ というような場面がありました。 その時に2パターンの方法があったので、備忘録として残します。 【環境】 Ruby: 2.5.7 Rails: 5.2.4 使用した中で関係するgem:devise(顧客、管理者を作成) # 前提条件 - 管理者側のページで注文一覧を表示する際、下記のように設定したい。 - トップページから遷移 => 本日作成された注文一覧 - 顧客の詳細ページから遷移 => その顧客の注文一覧 - ヘッダーの注文一覧ボタンから遷移 => 全ての注文一覧 ## テーブル ```rails:schema.rb create_table "orders", force: :cascade do |t|    t.integer "user_id", null: false (略) t.datetime "created_at", null: false t.datetime "updated_at", null:
元記事を表示

TECH CAMP学習 個人アプリ作成③

# ユーザー情報編集機能の追加 まずはターミナルにて以下のコードを入力します。 ```terminal. $ rails g controller users ``` 続いてルーティングで下記を入力します。 ```routes.rb devise_for :users root "photos#index" resources :users, only: [:edit, :update] ``` resourcesの意味は日本語では資源をいう意味で、usersの中で編集と更新の機能を利用するという解釈でよいと思います。 続いてコントローラーを編集します。 ```users_controller.rb def edit end def update if current_user.update(user_params) redirect_to root_path else render :edit end end private def user_params params.require(:user).permi
元記事を表示

Rails5でECサイトを作る⑦ ~Address、Genreモデル編~

# はじめに 架空のベーカリーで買い物できるECサイトを作るシリーズ、[Rails5でECサイトを作る⑥](https://qiita.com/GreenFingers_tk/items/876bd51eb79acaa2bc5a)の続きです。 今回はアプリ本体の実装に戻り、購入したパンの送り先住所を管理するAddressモデルと、商品をまとめるGenreモデルの周辺を作っていきます。 # ソースコード [https://github.com/Sn16799/bakeryFUMIZUKI](https://github.com/Sn16799/bakeryFUMIZUKI) # Modelのアソシエーション ![association.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/647951/438eabf6-8470-61bf-4901-cc89eb67b248.jpeg) # Address ### controller ```ruby:app/controllers/addresses_c
元記事を表示

[翻訳]開発者が避けるべき8つのRailsのよくあるミス

原著者[Hunny Jummani](https://medium.com/@jummanihunny)氏の許諾を得て翻訳・公開しています。 記事: [The 8 Most Common Rails Mistakes Developers Should Avoid](https://medium.com/@jummanihunny/top8-common-mistakes-avoided-by-ruby-on-rails-developers-1786e70266f0) 原文公開日: 2020年4月22日 ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/406773/d809ce40-46a4-8cd1-4b90-577610567771.png) Ruby on Railsはスケーラブル可能なパワフルなWebフレームワークで、完全なフロントエンドのサポートを持ったエンタープライズ対応のアプリケーションです。設定より規約やMVCパターンのようなRuby on Rails開発のシンプルな
元記事を表示

Webpacker::Manifest::MissingEntryError

#画像のエラーを解決するのに手間取りすぎたから、備忘録メモです。 スクリーンショット 2020-07-10 16.38.40.png ##先に結論 僕の場合は`docker-compose run --rm web yarn install`したら解決した ##環境 【環境】 ・Ruby 2.6.6 ・Rails 6.0.3.2 ・Docker ##Dockerfile ```ruby:qiita.rb FROM ruby:2.6 # install package to docker container RUN apt-get update -qq && apt-get install -y build-essential libpq-dev \ && apt-get install apt-t
元記事を表示

[Rails] link_toのリンク先を別タブで表示させたい

Railsでlink_toを使うときに別タブで表示させたいと思い、実装したのでメモとして残しておきます。 # 手順 まず `link_to` で表示させたい文字列とリンク先URLを指定。 ```rhtml <%= link_to "文字列", "リンク先URL" %> ``` 別タブで表示させるため、`target: :_blank` を追加 ```rhtml <%= link_to "文字列", "リンク先URL", target: :_blank %> ``` これで別タブで開けるようになる。 しかし、これだとパフォーマンスとセキュリティの面で問題が。。。 - [グーグルのエンジニアが警告、「別タブで開く」リンクは実はヤバいんだって!?【SEO情報まとめ】](https://webtan.impress.co.jp/e/2020/03/13/35510) - [実はヤバい?危険な「別タブで開く(target=”_blank”)」](https://wwg.co.jp/blog/3807) この問題を回避するためには `rel="noopener noreferr
元記事を表示

新規登録時、ActionMailerでメール送信機能

#概要 ActionMailerを使って新規登録時にwelcomeメールを送ります。 #前提 deviseを用いての、ログイン機能の実装。 #導入手順 ###1. ActionMailerを利用する設定 welcomeメールの送信元はGmailを使う記載方法。 `config/environments/development.rb`にてActionMailerの設定方法の記述。 ```ruby:development.rb Rails.application.configure do #---中略---#  config.action_mailer.raise_delivery_errors = true config.action_mailer.delivery_method = :smtp config.action_mailer.smtp_settings = { port: 587, address: 'smtp.gmail.com', domain:
元記事を表示

Rails ✕ PostgreSQLで既定のIDをUUIDに設定する方法

# 動作環境 - Ruby 2.7.0 - Rails 6.0.3.2 - PostgreSQL 12.3 # 準備 1. PostgreSQLデータベースを使用してRailsアプリケーションを作成します。 ``` $ rails new blog -d=postgresql ``` 2. `config/database.yml` でデータベース名を変更できます。 ``` default: &default adapter: postgresql encoding: unicode pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %> development: <<: *default database: blog_development test: <<: *default database: blog_test ``` 3. 下記のrailsコマンドで `config/database.yml` の内容でデータベースを作成してくれます。 ``` $ rails db:create Cre
元記事を表示

[Rails]DBにデータが登録されない場合の対処法

## はじめに フォーム入力内容をDBに保存したいがハマったのでアウトプット ## 環境 Rails 5.0.7.2 ruby 2.5.1 mysql 14.14 ## 問題点 フォーム入力内容を保存しようとすると、パラメータに保存されているがDBに保存されない。 ## 対処方法 保存するメソッドの後ろに!をつけて原因を確認。 すると、**validation failed:User must exist**(エラー内容は異なる場合がありそう) ## 原因 アソシエーションが組まれている際に、該当の外部キーが入っておらず、バリデーションで弾かれているのが原因。 **optional: true**を記述。 ```goal.rb class Goal < ApplicationRecord validates :name, presence: true, uniqueness: true validates :time, presence: true, uniqueness: true validates :days, presence: true, uni
元記事を表示

Rails6・unicorn、nginx、postgresのdockerコンテナを別々で立てる

## 紹介する内容 - dockerコンテナを三つ(Rails6とunicorn一緒に、nginx、postgres)にして立てます - nginxのUNIX-domain socketとdocker composeのvolume活用します ## 結論 ### Rails6コンテナはunicornをforegroundで起動、nginxのUNIX-domain socketをdocker composeのvolumeマウントしたら動きます - Rails6コンテナはunicornをforegroundで起動させて、nginxの通信を待ちながらコンテナが落ちない(exit 0)ようにします - nginxのUNIX-domain socketをdocker composeのvolumeを使って、Rails6コンテナのunicornに共有させます - UNIX-domain socket使いますからportはnginxとpostgresだけ開けば十分です ### AWS ECSなどに活用できます - dockerコンテナを別々に立てる予定のECSに`このコンテナ構成動くか?`の
元記事を表示

rake routesでDevise.secret_key was not set. Please add the following to your Devise initializer:がでる

## 環境 ``` ruby 2.5.1 Rails 5.0.7.2 ``` ## やろうとしたこと 1)`rake routes` 早速ターミナルがエラー吐き出しています。 ターミナルを見ます。 ``` rake aborted! Devise.secret_key was not set. Please add the following to your Devise initializer: config.secret_key = 'e9216d77fb79ef05XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX’ Please ensure you restarted your application after installing Devise or setting the key. ``` 2)ここの文に注目します。 `installing`の`Devise`の`setting the key`に注目しなよ
元記事を表示

[Rails]carrierwaveを使って画像を保存する

タイトルの通りになります。 ゴールは画像を表示させるまでとなります。 ## gemを導入 初めはgemを入れます。 バージョンを指定しなければ最新のものがインストールされます。 ```:Gemfile gem 'carrirewave' ``` ターミナルでいつものよろしくお願いします。 ``` $ bundle install ``` ## アップローダファイルの生成 次にアップローダファイルを作成しましょう。 ``` $ rails generate uploader Image create app/uploaders/image_uploader.rb ``` これで`app/uploaders`の中に`image_uploader.rb`が生成されていると思います。 ちなみに`Image`の部分はマウントするモデル名だとか, わかりやすい名前。私はよくImageで生成しています。 ```ruby:image_uploader.rb class ImageUploader < CarrierWave::Uploader::Base # Inclu
元記事を表示