- 1. 【Rails on Docker】Modelの全件取得(all)ができなくなって困った
- 2. N+1問題を解決ゾロリ
- 3. Active Storageで画像アップロード機能を実装や!
- 4. before_action
- 5. 【Rails】統合テストによるリンクのテスト【Rails Tutorial 5章まとめ】
- 6. 【Rails】ルーティングと名前付きルート【Rails Tutorial 5章まとめ】
- 7. resourcesメソッドについて
- 8. 【Rails】レイアウトの作成とパーシャル【Rails Tutorial 5章まとめ】
- 9. devise で認証キーを email から username に変更する
- 10. 【Rails】bootstrap導入【Rails Tutorial 5章まとめ】
- 11. eager_load/preload/includes/joinsの違いメモ
- 12. Rails +MySQLのプロジェクトをherokuへデプロイ
- 13. Rails + TypeScript + Swagger 環境をDockerで爆速で構築する
- 14. Herokuでデプロイした際にApplication error(エラーコードH10 (App crashed))が出た時の対処法
- 15. kaminariのlast_page?の動作に気をつけて!
- 16. ※Ruby on rails記事まとめ
- 17. 【Rails】Guardによるテスト自動化の設定【Rails Tutorial 3章まとめ】
- 18. Ruby on railsの基本箇所についての復習②(rake db:create)
- 19. RSpecのlet(let!)とは
- 20. APIキー・環境変数を設定したのにうまく反映されない時には.....
【Rails on Docker】Modelの全件取得(all)ができなくなって困った
# Problem
`rails console`でとあるモデルを`all`で全件取得しようとしたところ以下のエラーに遭遇。“`
[1] pry(main)> User.all
Member Load (9.3ms) SELECT “users”.* FROM “users” ORDER BY “users”.”created_at” ASC
less: unrecognized option: X
BusyBox v1.30.1 (2019-10-26 11:23:07 UTC) multi-call binary.Usage: less [-EFIMmNSRh~] [FILE]…
1 FROM ruby:2.6.5-alpine3.10View FILE (or stdin) one screenful at a time
-E Quit once the end of a file is reached
-F Quit if entire file fits on first screen
-I Ignore case in all searc
N+1問題を解決ゾロリ
#【結論】includesを使う
####データベースにアクセスする回数を減らそうデータを取ってくる際にSQLというものが発行されます。
アソシエーションを組んでいる場合、子要素のデータを取ってくる時もあるでしょう。
例えばこんな時“`ruby:index.html.haml
– @tweets.each do |tweet|
= tweet.text
= tweet.user.nickname
“`
tweetsテーブルとusersテーブルからデータを取ってきてます
この時SQLは通常(tweetsテーブル)+1回(usersテーブル)発行されてしまいます。SQLが多いと処理が重くなるので、1回で関連するデータを一気に持ってきちゃおうぜ!って話です。
UserモデルとTweetモデルが以下のアソシエーションを組んでいるとします。
“`ruby:user.rb
has_many :tweets
“`“`ruby:tweet.rb
belongs_to :user
“`###【tweetsコントローラーを編集】
`includes
Active Storageで画像アップロード機能を実装や!
#【その1】インストール
※Rails 5.2から搭載されています。“`:ターミナル
rails active_storage:install
rails db:migrate
“`#【その2】モデルに設定を追記
1つのファイルなら`has_one_attached :カラム名`
複数ファイルなら`has_many_attached :カラム名`“`ruby:モデル
has_one_attached :avatar
has_many_attached :images
“`実際にテーブルにカラムを追加する必要はありません。
#【その3】表示する
“`ruby:ビューファイル
user.avatar
“`
これを好きなところへ書いてください。
もちろんimage_tagなどを添えて。超参考
>https://railsguides.jp/active_storage_overview.htmlではまた!
before_action
#いつ使うの
before_actionを使えば、すべてのアクションのが実行される前に指定したメソッドを呼び、共通の処理を実行することができます。#使い方
“`ruby
before_action :メソッド名
“`これをコントローラーの一番上の書きます。
オプションとしてonlyとexceptがあります。
only: [:アクションA]
→アクションAのときのみexcept: [:アクションB]
→アクションB以外のとき#例
“`ruby:tweets_controller.rb
class TweetsController < ApplicationController before_action :move_to_index, except: [:index] def index @tweets = Tweet.all end def new end 中略 def move_to_index redirect_to action: :index unless user_signed_in?
【Rails】統合テストによるリンクのテスト【Rails Tutorial 5章まとめ】
link_toと名前付きルートで作ったリンクが正常に表示され、機能しているかどうかを統合テストで確認する。
統合テストはアプリケーションの動作をシミュレートするために使用される。“`
$ rails generate integration_test site_layout
“`##テストの手順
①ルートURL (Homeページ) にGETリクエストを送る
②正しいページテンプレートが描画されているかどうか確かめる
③Home、Help、About、Contactの各ページへのリンクが正しく動くか確かめる“`test/integration/site_layout_test.rb
test “layout links” do
get root_path
assert_template ‘static_pages/home’
assert_select “a[href=?]”, root_path, count: 2
assert_select “a[href=?]”, help_path
assert_select “a[h
【Rails】ルーティングと名前付きルート【Rails Tutorial 5章まとめ】
##ルートURL
rootを使い、ルートURLを指定する。“`config/routes.rb
root ‘static_pages#home’
“`
ルートURLは、root_pathまたはroot_urlで呼び出せる(名前付きルート)。“`
root_path -> ‘/’
root_url -> ‘http://www.example.com/’
“`前者はルートURL以下の文字を、後者はURLの全文を表示する。
基本的には前者を使い、後者はリダイレクトの場合に使用する。##そのほかのルーティング
“`config/routes.rb
get ‘static_pages/help’get ‘/help’, to: ‘static_pages#help’
“`前者の場合static_pagesコントローラのhelpアクションに自動で繋がる。
名前付きルートはstatic_pages_help_pathのようになる。とはえいURLが長いし自由度が無いので基本的には後者のようにして、任意のURLに対してコントローラとアクションを指定する。
resourcesメソッドについて
# resourcesメソッド
[わかりやすいと思ったサイト](https://www.pikawaka.com/rails/resources#%E3%83%8D%E3%82%B9%E3%83%88%E3%81%AE%E5%AE%9A%E7%BE%A9%E3%81%AE%E4%BB%95%E6%96%B9)
【Rails】レイアウトの作成とパーシャル【Rails Tutorial 5章まとめ】
アプリケーションのレイアウトを作成する。
“`app/views/layouts/application.html.erb
<%= full_title(yield(:title)) %>
<%= csrf_meta_tags %>
<%= stylesheet_link_tag 'application', media: 'all', 'data-turbolinks-track': 'reload' %>
<%= javascript_include_tag 'application', 'data-turbolinks-track': 'reload' %>
関連する記事
OTHERカテゴリの最新記事
-
- 2024.09.19
JavaScript関連のことを調べてみた
-
- 2024.09.19
JAVA関連のことを調べてみた
-
- 2024.09.19
iOS関連のことを調べてみた
-
- 2024.09.19
Rails関連のことを調べてみた
-
- 2024.09.19
Lambda関連のことを調べてみた
-
- 2024.09.19
Python関連のことを調べてみた