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

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

【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.10

View 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カテゴリの最新記事