20210907のRailsに関する記事は17件です。

Fakerを利用したダミーモデルの作り方

Fakerとは ダミーデータを生成してくれるgem。 様々な種類が用意されている。 seeds.rbとは テーブルにデータを作成するファイル。ここにダミーデータを生成するコードを書く 導入方法 Gemfileに以下を記述してbundle install Gemfile gem 'faker' $ bundle install 例えばusersテーブルに10件、Boardテーブルに20件のダミーデータを追加したい場合。 app/db/seeds.rb 10.times do User.create!( last_name: Faker::Name.unique.last_name, first_name: Faker::Name.unique.first_name, email: Faker::Internet.unique.email, password: "12345678", password_confirmation: "12345678" ) end 20.times do |index| Board.create!( user: User.offset(rand(User.count)).first, title: "タイトル#{index}", body: "本文#{index}" ) end 書いた後は、 $ bundle exec rails db:seed を実行する事でseedで書いた内容がデータベースに反映される。 実装ポイント ①create!を使う seedの実行が失敗した場合にエラーを発生させるため。 createだと失敗した場合にエラーとならないため。 ②Faker::Name.first_name Fakerの中にあるNameのfirst_nameメソッドを使いますよ。という意味。 ③User.offset(rand(User.count)).first offset 指定した位置からレコードを取得する rand 疑似乱数を発生させる first 最初のレコードを発生させる User.count 今回はusersテーブルに10件分のダミーデータを作成しているので、10個 つまり、randメソッドにより0~9未満の整数を起点とし、そこから最初の1件を取得する ということ。 ではでは
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

railsのbutton_toメソットにfont Awesomeを適用する方法

はじめに railsでポートフォリオを作っていて、計画していた機能要件が一通り終わったので、少しデザインを整えてみようということになりました。 手始めにイイねボタンを整えようと思い、Font Awesomeを使うことにしました。 Font AwesomeはCSSでウェブアイコンを簡単に導入できるツールです。 Font Awesomeをhtmlファイルで使う方法 Font Awesomeを使う下準備です。 <head> <link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.9.0/css/all.css"> </head> headタグにこのように記述します。 hamlファイルで使うときは手順が異なるようなので、こちらの方の記事をご参照ください。 button_toメソッドに適用する まず、Font Awesomeのホームページに行き、使いたいアイコンを探し、コードをコピーします。 そして、このように記述します。 <%= button_to article_likes_path(@article),class: "btn btn-primary", method: :post do %> <i class="far fa-heart"></i>イイね <% end %> すると、こんな感じに少しは見た目が整ったイイねボタンが出来上がります。(bootstrapを導入しているので、class="btn btn-primary"で青くなっています") 抽象化するとこんな感じです。 <%= button_to URL, クラス, HTTPメソッドの指定 do %> <i class="使いたいアイコンのコード"></i>ボタンに表示する文字 #なくてもよい <% end %> ・button_toの後ろに、ボタンに入れたい文字を記入する ・button_toとURLの間にカンマを入れる などするとエラーになってしまうので気を付けてください。 おわりに button_toに適用する新しめの記事がヒットしなかったので、アウトプットとして書いてみました。 Font Awesomeは無料でも洗練されたデザインのアイコンがたくさんあるので、積極的に使っていこうと思います!
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

rails で `development?` を維持したまま新しい環境を追加したいとき

新しく環境を追加したい場合(staging とか)はこちらの方法でできるけど、 https://qiita.com/yusabana/items/a1f4fe2c37b20db2a3f6 Rails.env.development? とか Rails.env.staging? は method_missing で実装されてるので、 https://github.com/rails/rails/blob/v6.1.4/activesupport/lib/active_support/string_inquirer.rb#L28 例えば development と同等の環境を新しく development-foo-bar みたいに追加しようとしても、 Rails.env.development-foo-bar? とかやるとメソッド名にハイフンが使えないので syntax error になるし、 肝心の Rails.env.development? が false のままになってしまうので期待通りにいかない。 ので、こんな感じで extend してやるといいかも。 config/initializers/00_force-env-development.rb module ForceEnvDevelopment def development? true end end case Rails.env when 'development-foo-bar' then Rails.env.extend ForceEnvDevelopment end っていう話。
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

送信中の暗号化をtrueにしたredisにsidekiqから接続する

前提 sidekiqを導入するにあたり、privateネットワーク内ではあるがアプリとredis間の通信を暗号化しようとなった。 それにあたりredisへの接続ができない問題に当たったのでその修正を覚書 ※ redisにはElastiCache for redisを利用 結果 以下のように設定した上で以下を環境変数から注入 REDIS_URL=rediss://aaa.aaa.aaa.0000.apne1.cache.amazonaws.com:6379 REDIS_AUTH_TOKEN=**** # config/initializers/sidekiq.rb Sidekiq.configure_client do |config| config.redis = { url: ENV.fetch("REDIS_URL") { "redis://127.0.0.1:6379" }, password: ENV.fetch("REDIS_AUTH_TOKEN") { nil }, } end Sidekiq.configure_server do |config| config.redis = { url: ENV.fetch("REDIS_URL") { "redis://127.0.0.1:6379" }, password: ENV.fetch("REDIS_AUTH_TOKEN") { nil }, } end つまづきポイント 本番の環境では通信を暗号化したいがローカルでは暗号化せずさっと実装したい passwordのデフォルトをnilにすることでローカルでは非暗号化で対応可能 本番では rediss:// に指定する うまくいかなかったケース redisでパスワードなしで接続しようとした Redis::TimeoutError: Connection timed out が発生 何故なのかはいまいちわからないですがタイムアウト扱い port同じなので認証エラーとかになるのかなと思ったらタイムアウトでした rediss指定でパスワード追加していない Redis::CommandError: NOAUTH Authentication required. が発生
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

[Html/Rails]画像の大きさを調整をしたい

初めに この記事の対象者 ・画像を貼ったのはいいけど、大きすぎて/小さすぎてなんか見にくい。。。ヒト用 環境 ・Macbook Air (Retina, 13-inch,2019) ・プロセッサ 1.6GHz デュアルコアIntel Core i5 ・メモリ 8GB 2133 Mhz LPDDR3 ・MacOS Big Sur バージョン 11.5.2 記事の目次 1)cssを使って画像の大きさを変える方法 2)rubyを使って画像の大きさを変える方法 3)画面の大きさに応じて画像の大きさを変える方法 4)最後に cssを使って画像の大きさを変える方法** 1)html内に画像を添付 <img src ="画像の名前.png" src="画像のファイルの場所" class="sample"> 2)cssで画像のクラス名を指定して横幅、縦幅を設定 .sample{ width:50px; height: 50px; } rubyを使って画像の大きさを変える方法** 1)html内<%= image_tag>を使って画像を添付 <%= image_tag "ファイル名.png" %> 2)<%= image_tag>内にsize: "縦幅x横幅"を追加 <%= image_tag "ファイル名.png", size: "50px*50px" %> 画面の大きさに応じて画像の大きさを変える方法** 大きさの単位に気をつけて! ※幅の単位をpxにすると、その大きさに固定されるためユーザが画面の大きさを変えても画像の大きさはそのままとなる ※幅の単位を%にすると、html内は入れ子構造(親子関係)になっているため、親の幅より大きくなることはない=画面に応じて大きさが変わる 最後に もし自分のアプリに画像を使っているなら、見た目が悪いとユーザは使いたいと思わなくなると思うからレイアウトは大事だとおもう! ここまで読んでくださってありがとうございます!
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

(正常系)Rspec Userモデルの単体テストの手順

雛形 前回の続きの雛形を使用して Userモデルの正常系テストについて書いていきます。  ここではバリデーションに関するテストを実装致します。 正常系テストとは、 ユーザーが開発者の意図する操作を行った時の挙動を確認するテストコードです。 ↓spec/models/user_spec.rb require 'rails_helper' describe User do before do @user = FactoryBot.build(:user) end describe 'ユーザー新規登録' do context '新規登録がうまくいくとき' do it "nicknameとemail、passwordとpassword_confirmationが存在すれば登録できる" do end it "nicknameが6文字以下で登録できる" do end it "passwordが6文字以上であれば登録できる" do end end context '新規登録がうまくいかないとき' do it "nicknameが空だと登録できない" do end it "nicknameが7文字以上であれば登録できない" do end it "emailが空では登録できない" do end it "重複したemailが存在する場合登録できない" do end it "passwordが空では登録できない" do end it "passwordが5文字以下であれば登録できない" do end it "passwordが存在してもpassword_confirmationが空では登録できない" do end end end end context '新規登録がうまくいかないとき' do のところは異常系テストになるのでまた次の記事で書こうと思います。 テストコードの記述 be_validマッチャを使用します。 itとendの中に記述していきます。 expectのインスタンスが正しく保存されることを確認できます。 expect(インスタンス).to be_validのように使用してください。 ↓spec/models/user_spec.rb it "nicknameとemail、passwordとpassword_confirmationが存在すれば登録できる" do expect(@user).to be_valid end it "nicknameが6文字以下で登録できる" do @user.nickname = "aaaaaa" expect(@user).to be_valid end it "passwordが6文字以上であれば登録できる" do @user.password = "000000" @user.password_confirmation = "000000" expect(@user).to be_valid end テストコードの実行 テストコードの実行にはこのコマンドを使用する。 今回はmodels/user_spec.rb の単体テストなので、こちらのコマンドを使用する。 ターミナルに表示された文字が緑色になれば成功。 ↓ターミナル % bundle exec rspec spec/models/user_spec.rb 明日は異常系について書きたいと思います、、、、、、
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

【RSpec】結合テストコードでセレクト要素を取得する

はじめに 今回は下記の画像のようにセレクト形式のフォームのテストコードの際にセレクト要素を取得する方法について記述します。 上記の画像であれば生年月日や居住地の入力欄がセレクト形式に当てはまります! 開発環境 Ruby on Rails バージョン2.6.5 セレクト要素を取得する方法 私は当初、下記のように"fill_in"を使って取得するのかと思い苦戦しておりました。 しかし、セレクト要素を取得する際の記述は以下のように実装する必要があります。 select'値', form:'取得するフォーム' なので、以下の書き方に変更したところ問題なくテストコードが実装されました! 終わりに 結合テストコードのセレクト要素の取得は今後頻繁に使用すると思い、 自分自身の学びのためにも本記事をまとめさせていただきました! 同じように躓かれた方の参考になれば幸いです?‍♂️
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

No route matches [GET] "/logout"の解決

誤り等ありましたらご指摘ください 前提 -Rails 6.1.4 -ruby 2.6.8 問題 rails tutorial 8章を学習中、ログアウト機能を追加したので試してみた所、下記エラーが発生。 No route matches [GET] "/logout" 調べても「jQueryがない!」と言った記事が多く、チュートリアルでは過程でインストールしている為、解決の糸口は見つからず、丸二日悩みに悩んで見つけたのが、"link_to"を"button_to"に置き換える事だった。 _header.html.rb <%= link_to "Log out", logout_path, method: :delete %> _header.html.rb <%= button_to "Log out", logout_path, method: :delete %> しかしこれではデザインが崩れてしまい、私の意に反する。 解決 これを app/javascript/packs/application.js require("@rails/ujs").start() require("turbolinks").start() require("@rails/activestorage").start() require("channels") require('jquery') こう app/javascript/packs/application.js import Rails from "@rails/ujs" import Turbolinks from "turbolinks" import * as ActiveStorage from "@rails/activestorage" import "channels" Rails.start() Turbolinks.start() ActiveStorage.start() application.jsの記述をRail6.1.3.2のデフォルトの仕様に合わせたら機能した。 心折れそう。 参考 Rails6でjqueryが読み込めない
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

【Rails】includesメソッドと部分テンプレートを繰り返しrenderにする事によってN+1問題を回避する

N+1問題とは? SQLが必要以上に実行されてしまいパフォーマンスが落ちる問題のことです。 それぞれのモデルに (Userモデル) has_many :boards (Boardモデル)belongs_to :user といった定義を施すことで、関係性を定義することができます。 N+1問題はアソシエーション有りの時に生じる問題であり、上記の例で言うと掲示板の一覧を表示する際にユーザーの名前を取得するために掲示板の数だけSQLが発行されてしまいます。 具体的には次のようなコードになります。 app/controllers/boards_controller.rb class BoardsControllere < ApplicationController def index @boards = Board.all end end app/views/boards/index.html.erb <% @boards.each do |board| %> <%= render partial: 'board', locals: { board: board } %> <% end %> 上記の書き方では「Boardモデルから掲示板一覧情報」を1回取得し、「紐ついたuser_idをuserの数だけ」(n回)取得しています。 そしてview画面でパーシャルを呼び出し、@boardsをeach文によって繰り返し表示しています。 この方法でも表示はされますが、SQLが多く発行され、遅くなったりパフォーマンスが下がるんですね。 includesメソッドで関連付けを一括読み込みをする includesは、関連付いたモデルのデータを先に取得するメソッドです。このメソッドを使うことで、Boardモデルからデータを取得する際に、関連するUserモデルのデータもまとめて取得してくれます。 app/controllers/boards_controller.rb class BoardsController < ApplocationController def index @boards = Boards.all.includes(:user).order(created_at: :desc) end end 部分テンプレートを繰り返しrenderにする 上記のコードではパーシャルを呼び出し、each文によって繰り返し表示されていました。 そこを下記のように変更します。 app/views/boards/index.html.erb <%= render @boards %> だいぶスッキリしましたね。 これは@boardsというふうに複数形にすることによって、Railsが「_board.html.erb」を自動的に探してくれています。 【コラム】部分テンプレートの省略形 実は単数形インスタンスを渡す場合と複数形インスタンスを渡す場合では書き方が少し異なります。 それらの書き方を順番に見ていきます。 単数形インスタンス変数を渡す boardsフォルダ内の_board.html.erbを呼び出すとします。そして、@boardをテンプレート内で変数boardとして使用するとします。 ①基本形 render partial: 'boards/board', locals: { board: @board } 「partial: 」以下でファイル名を指定し、「locals: 」以下の記述で、@boardを部分テンプレート内で変数boardとして使用しています。 board = @board ということですね。 ②省略形パターン1 render 'boards/board', board: @board 単に「partial」と「locals」を省略しただけの形となります。 ③省略形パターン2 render @board インスタンス変数とファイル名が同じ場合、上記のような省略形にすることができます。 かなりスマートな記述になりました。 複数形のインスタンスを渡す ②省略形パターン1 render partial: 'boards/board', collection: @boards collectionオプションは、渡されたインスタンスの要素をそのテンプレートを繰り返し表示する事ができるオプションです。 つまりコレクションの中のインスタンスが部分テンプレートに呼ばれる変数となるため、each文を使用せずに繰り返し処理ができます。 ③省略形パターン2 render @boards ファイル名と複数形sを除いたインスタンス名が一致しており、かつeach文のように繰り返し表示したい場合は、上記のように省略することができます。 今回の場合だと_board.html.erbと@boardsなので、一致しているということになります。 さらに表現を変えると、 render @boards という省略形は、 <% @boards.each do |board| %> <%= render partial: 'board', locals: { board: board } %> <% end %> 上記の形に書き換える事もできます。 少しややこしいと思いますが、renderの書き方にはいろいろあるので整理してみてください。 ではでは
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Railsのredirect_toで直前のページに戻りたい

redirect_back(fallback_location: root_path) で直前のページに遷移します。
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

[Rails]render(部分テンプレート)について

初めに 記事の対象 ・フロントサイドで同じプログラムを何度も書きたくないヒト用 環境 ・Macbook Air (Retina, 13-inch,2019) ・プロセッサ 1.6GHz デュアルコアIntel Core i5 ・メモリ 8GB 2133 Mhz LPDDR3 ・MacOS Big Sur バージョン 11.5.2 記事の目次 1)renderってなんだ? 2)部分テンプレートの使い方 3)部分テンプレートの場所によってrenderの仕方が違う renderってなんだ? イメージは、別の場所にプログラムを配置して、使いたい場所に移す。 フロントサイドでどのページへ遷移しても同じ見た目があるようなところに使います。(例えばqittaの上の部分と下の部分) 部分テンプレートの使い方 1)_oooo.html.erbというファイルを作り、配置したいファイルと同じ階層に作成したファイルが入っているファイルを置く。(今回は部分テンプレートが入っているファイル名をshared、配置したいファイルをindex.html.erbとする) 2)作成したファイル内に同じ見た目のプログラムをcopy&pasteをする。 3)同じ見た目である場所のファイルにコピー&ペーストして部分を削除してrenderメソッドを書く。 <%= render "ファイルの場所" %> 今回使いたい部分テンプレートのファイルの場所は< views/products/shared/_header.html.erb>なので <%= render "shared/header" %> ※部分テンプレートの場所によってrenderの仕方が違う 同じファイル内に部分テンプレートがある場合 配置場所(views/products/index.html.erb) 部分テンプレート(views/product/_header.html.erb) <%= render "header"> 別のアプリの部分テンプレートを使いたい場合 配置場所(project/chat-app/app/views/products/index.html.erb) 部分テンプレート(project/program_sample/app/views/product/index) 配置したい場所のコントローラに(今回はindexを配置させたいのでindexアクションに置く) def index render file: "project/program_sample/app/views/product/index" end 最後に ・今回の記事を書いて、テキストばかりではなくてexcelとか使ってイメージしやすいように画像を入れてみようと思った! ・最後まで読んでくださいましてありがとうございますb
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

ruby on rails6のdeviceで登録ページに名前を追加する方法

gem "devise" bundle install deviceをインストール後 rails g devise:views でapp/views/deviseに生成されます <h2>Sign up</h2> <%= form_for(resource, as: resource_name, url: registration_path(resource_name)) do |f| %> <%= render "devise/shared/error_messages", resource: resource %> <div class="field"> <%= f.label :email %><br /> <%= f.email_field :email, autofocus: true, autocomplete: "email" %> </div> <div class="field"> <%= f.label :password %> <% if @minimum_password_length %> <em>(<%= @minimum_password_length %> characters minimum)</em> <% end %><br /> <%= f.password_field :password, autocomplete: "new-password" %> </div> <div class="field"> <%= f.label :password_confirmation %><br /> <%= f.password_field :password_confirmation, autocomplete: "new-password" %> </div> <div class="actions"> <%= f.submit "Sign up" %> </div> <% end %> <%= render "devise/shared/links" %> あとは下記のコードを上記へ貼り付ければOK <div class="field"> <%= f.label :name %> <br /> <%= f.text_field :name %> </div> ※データベース設定マイグレーション作業などもする必要があります。
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

送信ボタン/登録ボタンを押した後、ローディングアイコンを表示させる(二重送信防止)

概要 Railsアプリを例として、ローディングアイコンのgifファイルとJSを使って実装します。 実装するのは、「送信ボタンをクリック後、送信ボタンを非表示にし、代わりにローディングアイコンを表示させる」というシンプルなものです。 事前準備 事前準備として、ローディングアイコンのgifファイルを用意し、loading.gifという名前でアプリ内に保存し使えるようにしておきます。 「ローディングアイコン ダウンロード」等でググればフリーのものが見つかるでしょう。 実装 このような一般的なフォームがあるとします。 <%= form_with url: "パス" do |form| %> <%= f.button '登録', class: 'btn' %> <% end %> div要素を以下のように追記します。 <%= form_with url: "パス" do |form| %> <%= f.button '登録', class: 'loading_btn' %> <div class="loading"> <%= image_tag 'loading.gif' %> </div> <% end %> 下記のようなJSを適用させます。 $(function() { $('form').on('submit', function() { $('.loading_btn').hide(); $('.loading').show(); }); }); 以上で完了です。 必要なら、CSSで適当にレイアウトを整えてください。
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

本番環境にてGmailを送信する【Rails】

本日の内容 今回の記事のですが、本番環境(EC2)にてGmailを送る実装になります。 開発環境でも参考になると思います!(記述する場所を変えるぐらいなので) 環境・前提 ruby 2.6.5 本番環境EC2 ◇Gmailメール実装 こちらでは、本番環境にてgmailからユーザーにメールを送っていきます。 流れ ①Gmailアカウント/アプリパスワード取得 ②コードに記述 Gmailアカウント/アプリパスワード取得 gmailのアカウントのアプリパスワードが必要です。(通常のログインパスワードだとエラーが出ます) 今回は、gmailアカウントの2段階認証をオンにして、アプリパスワードを取得ます。 ① 送信用に利用するgmailのアカウントで ログイン ② [セキュリティ]設定  画面左のメニューから[セキュリティ]を選択し、セキュリティの設定画面を開きます。 ③ 2段階認証を有効化  [Googleへのログイン]にある[2段階認証プロセス]を選択し、画面に沿って設定を完了させてください。  ※既に有効な場合は、手順をスキップしてください ④ アプリで利用するためのパスワードを取得します。  [Googleへのログイン]にある[アプリパスワード]を選択し、パスワードを発行してください。 ※上記の後に出てくる、アプリパスワードを生成するアプリとデバイスを選択してください、のアプリ選択は「その他」で大丈夫です。 ⑤ パスワード取得完了  発行完了すると、16桁の番号が払い出されます。  この番号をこの後コードに記述します。 コードに記述 config/environments/product.rbに下記の記述を行えば完了です! 開発環境の場合は、config/environments/development.rbに記述すればOKです config/environments/product.rb config.action_mailer.default_url_options = { host: "Elastic IP アドレス" } #ECの本番アドレス config.action_mailer.raise_delivery_errors = true config.action_mailer.delivery_method = :smtp config.action_mailer.smtp_settings = { :enable_starttls_auto => true, :address => 'smtp.gmail.com', :port => '587', :domain => 'smtp.gmail.com', :authentication => 'plain', :user_name => '自身のGmail', :password => 'アプリパスワード'#先程発行した16桁のパスワードを記述 } 以上になります。
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

【RSpec】KeyError: Factory not registered:を解決した方法

対象者 RSpecテストを実施した際にKeyError: Factory not registered:というエラーが出ている方 目的 上記エラーを解消して、テストを正常に作動させる 実際の手順と実例 1.結論(解決策) aliasを用いて、「spec/factories/user.rb」内のuserに「,aliases: [:follower,:followed] 」と追加して解決 2.エラー内容と前提 フォロー機能のテスト実行時に出たエラーが下記の通り Factoryに"followed"が登録されていないと予想 下記 model/relationship.rb class Relationship < ApplicationRecord # followerがフォローした人、followedがフォローされた人 belongs_to :follower, class_name: "User" belongs_to :followed, class_name: "User" end model/user.rb class User < ApplicationRecord has_many :reverse_of_relationships, class_name: "Relationship", foreign_key: "followed_id", dependent: :destroy has_many :followers, through: :reverse_of_relationships, source: :follower has_many :relationships, class_name: "Relationship", foreign_key: "follower_id", dependent: :destroy has_many :followings, through: :relationships, source: :followed end spec/factories/relationships.rb FactoryBot.define do factory :relationship do association :followed association :follower end end spec/factories/users.rb FactoryBot.define do factory :user do name { Faker::Lorem.characters(number: 4) } nickname { Faker::Lorem.characters(number: 4) } email { Faker::Internet.email } introduction { Faker::Lorem.characters(number: 20) } password { 'password' } password_confirmation { 'password' } end end spec/models/relationship_spec.rb require 'rails_helper' RSpec.describe Relationship, type: :model do let!(:relationship) { FactoryBot.create(:relationship) } describe "モデルのテスト" do it "有効なRelationshipの場合は保存されるか" do expect(build(:relationship)).to be_valid end end end 3.エラー原因 Relationship.rbで belongs_to :follower, class_name: "User" belongs_to :followed, class_name: "User" と記述しているように,アソシエーションに別名をつけている場合はFactoryの方にも別名を付ける必要があります。 なので、users.rbを上記の内容を追加します。 spec/factories/users.rb FactoryBot.define do factory :user, aliases: [:follower,:followed] do :   #上記を追加 (中略) : end aliasとは既存のメソッドに対して別名をつけることができるRubyメソッドのひとつです。 Rubyのaliasとalias_methodでメソッドに別名を付ける方法【初心者向け】 これで解決しました!
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

method(メソッド)について

・復習+学習始めたての方に method(メソッド)とは? プログラミングにおける処理をまとめたもののこと 定義の仕方 def say_hello puts "Hello"  メソッドの定義の部分 end say_hello    メソッドの実行 実行結果 Hello と出ます! 初投稿なので、簡単なのを簡単にまとめてみました。 これからどんどん分かりやすく楽しみめるような投稿していきます!
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

rails g controller 実行時にDeprecation Warningになった。その対処法。

結論 Gemfile内の thor のバージョンを 0.19.1に指定した。 背景  涼しくなってきたのでようやくキーボードを触れるようになった。Railsの個人開発を再開した。rails g controller ... とコントローラーを作ったら、以下のエラー文章が出た。 $rails g controller plans Running via Spring preloader in process 1645 Deprecation warning: Expected string default value for '--template-engine'; got false (boolean). This will be rejected in the future unless you explicitly pass the options `check_default_type: false` or call `allow_incompatible_default_type!` in your code You can silence deprecations warning by setting the environment variable THOR_SILENCE_DEPRECATION. なんだこれは。一応このメッセージの後にファイルは生成されているようだが、この警告は気になる。少し調べると、海外のサイトがあたった。 Meaning of "Expected string default value for ..." on Ruby on Rails It has nothing to do with either Rails or Ruby, but was instead caused by the upgrade of the thor gem (which is a dependency of jquery-rails, among others) from 0.19.1 to 0.19.4. なるほど。thorというGemが関連しているらしい。そういえばrailsガイドにも何か書いてあった。 初めてジェネレータを作成する-Railsガイド Rails 3.0以降のジェネレータはThorの上に構築されています。Thorは強力な解析オプションと優れたファイル操作APIを提供しています。 rails g はthorの上にあるので、thorがエラーを吐けばこいつもうまく動かなくなるらしい。 もうちょっと探るとGithubのissueにも書いてあった。2017年からあった問題らしい。 Rails generating error after gem update #538 やっていこう Gemfileに記載しよう。 Gemfile # rails gのときの Deprecation warning 対策 gem 'thor', '0.19.1' これだけだとGemfile.lockと異なる!というエラーが出るので、Gemfile.lockの内容を修正する。thorが書いてある行を削除する。 Gemfile.lock → 削除 thor (>= 0.20.3, < 2.0) ... → 削除 thor (1.1.0)  あとはbundle update thor を実行した。  できるようになった。 おわり よかった。
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む