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

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

セレクターで投稿内容をカテゴライズ

#カテゴライズしたいModelを作成
“`terminal:terminal
$ rails g model Club name:string
$ rails db:migrate
“`
今回はGear ModelにClub(Driver, Iron…)属性
を追加するので、Club Model作成

#Gear Modelにclub_idを追加
“`terminal:terminal
$ rails g migration add_club_id_to_gears club_id:integer
$ rails db:migrate
“`

# Association追加
“`ruby:app/models/gear.rb
class Gear < ApplicationRecord belongs_to :club end ``` ```ruby:app/models/club.rb class Club < ApplicationRecord has_many :gears end ``` #gear_controllerのnew actionでclub

元記事を表示

【Rails】マイグレーションファイルを削除する

#参考対象者

– マイグレーションファイルの操作の仕方を知りたい方

#環境

“`
$ rails -v
Rails 6.0.3.1
“`
“`
$ ruby -v
ruby 2.7.0p0 (2019-12-25 revision 647ee6f091) [x86_64-darwin19]
“`

“`
$ mysql –version
mysql Ver 14.14 Distrib 5.7.29, for osx10.15 (x86_64) using EditLine wrapper
“`

#マイグレーションファイルを削除する

Add column to usersというファイルを削除したかったとします

– 削除したいファイルのマイグレーションIDを確認する

“`
$ rails db:migrate:status

Status Migration ID Migration Name
————————————————–
up 20200618162841

元記事を表示

resourcesでルーティングを設定する方法

#resourcesでルーティングを設定する
ルーティングは、個別に設定も可能です。
ただし、railsでの基本的な7つのアクションは開発の際によく使われるので、
そのたびに設定するのは効率的とはいえません。
こんなときは、resourcesメソッドを利用すると、ルーティングを1行書くだけで自動設定されます。

“`
Rails.application.routes.draw do
resources :blogs
end
“`

rails routesコマンドで確認。

“`
$ rails routes
“`

全てのurlが設定されていることを確認。

“`
$ rails routes
Prefix Verb URI Pattern Controller#Action
blogs GET /blogs(.:format)

元記事を表示

Railsのバリデーションの種類と使い方

#プログラミングの勉強日記
2020年8月1日 Progate Lv.226

#バリデーションとは
 不正なデータがデータベースに保存されないようにデータをチェックするシステムをバリデーションという。バリデーションに引っかかった場合(不正なデータの場合)にはデータベースに保存されない。

#基本的な書き方
 モデルクラスに`validates`メソッドを指定することで、バリデーションをかけることができる。(バリデーションはモデルで設定する。)このときに、validatesを用いてカルム名と内容を指定する。

“`ruby:model/ファイル名.rb
validates :カラム名(シンボルで指定),検証ルール(こちらもシンボルで指定)
“`

#バリデーションの種類

##空ではい(空のデータを登録できないようにする)
 {presence: true}を用いることでそのカラムの値が存在するかどうかをチェックできる。

“`ruby:models/posts.rb
class Post < ApplicationRecord

元記事を表示

ActiveHashについて

DB設計をしてる時に便利なgemを見つけたのでまとめてみたいと思います。

##ActiveHashとは

都道府県一覧やカテゴリーなど「基本的に変更されないデータ」(区分情報等)があったとします。基本的に変更されないデータであるため、データベースに保存する必要性がありません。

ですがビューファイルなどに都道府県のオプションを書くと見るに耐えないコードになってしまいます。

そういう悩みを解決するのに便利なのがactive_hash。
ハッシュデータをモデルとして定義することで、ActiveRecordと同じように使えることができます。

それでは定義の仕方を見ていきましょう。

まずGemfileにactive_hashを記載して、bundle installします。

“`ruby

gem ‘active_hash’
“`

###モデル作成

今回はArticleモデルとgenreモデルを作りたいと思います。

“`
rails g model article
“`

“`
rails g model genre –skip-migration
“`

gen

元記事を表示

Railsのリクエストがルーティングにアクセスするまでの流れについて

# 概要
Railsアプリケーションでのリクエストからルーティングにアクセスするまでをまとめてみました。
# Railsのルーティングとは
##### 役割
『クライアントからのリクエストを判断し、どのプログラムに処理を渡すのか』を決める役割を担っている部分になります。
##### 処理に必要な情報
『リクエストURI』 と 『HTTPメソッド』 です。
##### つまり…
この2つの情報を持ったリクエストがクライアントから送信されていることになります。
## 今回のゴール
リクエストは
###### ・ 『どうやってRailsアプリにアクセスしているのか?』
###### ・ 『アクセス時にどのような情報を持っているのか?』
について、知ることです。
## <1> どうやってRailsアプリにアクセスしているのか?
#### 結論
クライアントはRailsアプリのあるWebサーバの所在を表す **URI** をもとにアクセスしている。
### URIとは
一般的にURLという意味で使われている
例)“`http://sample.com/samples“` といったもので

元記事を表示

Railsでkaminariを使う

#プログラミングの勉強日記
2020年7月31日 Progate Lv.226

#概要
 [こちらの記事](https://qiita.com/mzmz__02/items/61423e7259c4624f3010)で扱ったgemのkaminariを説明する。kaminariは1つのページに掲載するコンテンツが増えたときに複数ページに分けて表示させるページネーションを簡単に実装することができる。

0731.png
 ページネーションを使うことで、情報量の多いサイトをまとめられるということだけではなく、表示される項目が一定数を超えると自動的に次のページへ内容を移行することもできるので便利である。

#使い方
 kaminariを使うためにGemfileを編集す

元記事を表示

Railsアプリで日時の取得にはどのクラスを使うべきか(Time, DateTime, TimeWithZone)

## 日時の取得はどのクラスを使うべきか

– Timeクラス
– DateTimeクラス
– TimeWithZoneクラス

Railsでは、特別な理由がない限り、
TimeクラスやDateTimeクラスより、TimeWithZoneクラスで統一した方が良い。

## タイムゾーンについて

タイムゾーンを設定する場所は3箇所あります。

– システム
– 環境変数 `ENV[‘TZ’] `
– application.rb

application.rbにどのタイムゾーンが設定してあるか確認するには、`Time.zone.name`を使います。

“`ruby
# application.rb
config.time_zone = ‘Tokyo’

Time.zone.name
=> “Tokyo”
“`

## どのタイムゾーンが使われるのか
ややこしいことに、クラスやそのクラスに関連するメソッドによってどのタイムゾーンが使われるか変わります。
例えば、
Timeクラスに関連するメソッド`now`を使った`Time.now`は環境変数のタイムゾーンを使い、
Timeクラ

元記事を表示

Ruby on Railsの木構造Gemのacts_as_treeで、N+1を消し去る

# 手元動作環境
当然、サービスインしているコードを乗せるわけにはいかないので、手元環境で似たようなコードを書いて動作検証しています。

– ruby 2.7.1p83
– Rails 6.0.3.2
– acts_as_tree (2.9.1)

# 木構造
古いコードを見ると、アンチパターンが多いですね。今回も同様にアンチパターンの一つである隣接リストが使われていました。さらに、N+1問題が放置され、パフォーマンス的に悪いということで対応することになりました。
今回は、たった2階層だったので、隣接リストでもあまり問題がなさそうです。

## GitHub
https://github.com/amerine/acts_as_tree

## 使い方
https://github.com/amerine/acts_as_tree#example 引用

“`rb
class Category < ActiveRecord::Base acts_as_tree order: "name" end root = Category.create("name" => “ro

元記事を表示

Controllerに定義するアクション一覧

#Controllerに定義するアクション一覧
RailsではWebアプリケーションの基本となる以下の7つの役割を持つアクションを用います。

| アクション名 | 役割 |
|:–|:–|
| new | データを新規作成する |
| create | データを追加(保存)する |
| index | データの一覧を表示する |
| show | データの内容(詳細)を表示する |
| edit | データを更新するためのフォームを作成する |
| update | データを更新する |
| destroy | データを削除する |

元記事を表示

hamlのヘルパーメソッドの使用例

#link_toの使い方
link_toを使用する際、

“`
link_to “テキスト”,”リンク先のパス”
“`

などで使われることが多いが、テキスト等であればそこに表示したいテキストを記入すればよいが、ロゴを指定しないととなると少し書き方が変わってくる。

例えば
VScodeのimageの中に”logo.png”というロゴを入れてそれを指定する場合は

“`
= link_to root_path do
= image_tag src =”logo.png”,size”140×40″
“`

と記入してあげるとlogoを表示することができる。

#submitでのロゴの使い方

form_forなどでlogoボタンを使用する際、f.submitだとlogoが表示できず
例えばbutton_tagを利用すると

“`
= button_tag type:’submit’, class: ‘submit_btn’ do
= icon(‘fas’,’search’)
“`

と使用することで、ロゴのボタンを使用することができる。
またこちらのロゴを使用する

元記事を表示

NoMethodError: undefined method `paginate’ for を解決する (Railsチュートリアル 10章)

#発生しているエラー

Railsチュートリアル10章 10.3.3 ページネーション

“`:Gemfile
gem ‘will_paginate’, ‘3.1.6’
gem ‘bootstrap-will_paginate’, ‘1.0.0’
“`

“`
$ bundle install
“`
そしてチュートリアルの指示通りにコードを追記し、

“`
$ rails test
“`
を実行すると、

“`
Error:
UsersIndexTest#test_index_including_pagination:
NoMethodError: undefined method `paginate’ for #
app/controllers/users_controller.rb:6:in `index’
test/integration/users_index_test.rb:14:in `block in
“`

というエラー

元記事を表示

【初学者向け】Route53でドメイン取得してポートフォリオに紐つける手順

# 前提条件
EC2でアプリをデプロイしている事
→もしまだデプロイ出来ていないのなら[こちら](https://qiita.com/naoki_mochizuki/items/5a1757d222806cbe0cd1#nginx%E3%81%AE%E8%A8%AD%E5%AE%9A)の記事を参考にしてください。私も同じ様にやってきました。

# 手順
他にも沢山の参考記事がある為そちらを参考にしましたが、ドメイン取得に関しては[こちら](https://qiita.com/nakanishi03/items/25278fb4dfad60ebfac4)の記事で問題なく出来ます。
ただしこの記事にもある様にnginxで確実にエラーが出ます。
![nginx.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/431966/01253118-0605-16d3-e27e-754f63575a08.png)

なので、デプロイの時と同様に

“`
[name(自分の名前)|~]$cd /etc/nginx/con

元記事を表示

resourcesとresourceを組み合わせて使う時の注意点についてまとめてみた

先日、resourcesとresourceの違いについてまとめてみましたが、組み合わせて使う際の注意点もあったのでまとめてみました。
違いについてはこちら → [resourcesとresourceの違い – Qiita](https://qiita.com/oga_4528/items/34383126264ca0263338)

## resourcesとresourceを組み合わせて使う場合
resourcesとresourceを組み合わせて使うと、下記のようなルーティングが簡単に生成できます。

– 全ユーザーの一覧表示
– 全ユーザーの詳細表示
– 自ユーザーの詳細表示
– 自ユーザー情報の編集

全ユーザー一覧、各ユーザーの詳細については、誰でも表示できるが、ユーザー情報の編集は自分のものしかできないという状態。

“`:config/routes.rb
resources :users, only: [:index, :show]
resource :user, only: [:show, :edit, :update]
“`

`rails routes`で

元記事を表示

Rails 本番環境で画像が読み込まれないエラー

##この記事について
本番環境でbackground-imageの画像を読み込む時にはエラーが出ないのに、image_tagのところだけでエラーが出てしまっていたので、そのエラー解決方法について

##環境
・Ruby 2.6.6, Rails 6.0.3.2
・Docker,Docker-compose(開発環境)
・AWS/本番環境(EC2, RDS, VPC, EIP, Route53, IAM, S3)

##参考URL
https://stackoverflow.com/questions/49440304/rails-asset-is-not-present-in-asset-pipeline-when-using-image-tag
この人と全く同じ現象になってました。

##出ていたエラー
“`ruby:qiita.rb
ActionView::Template::Error (The asset “chat_example.jpeg” is not present in the asset pipeline.):
“`
asset へのパイプラインがうまく

元記事を表示

Controller作成と同時にアクションとviewファイルを作成(rails)

#Controller作成と同時にアクションとviewファイルを作成
railsではcontrollerを作成する際、同時にアクションとviewファイルを作成することができます。
実際に手動でアクションやviewファイルを作成する手間を省くことができます。
以下がコマンドの型です。

“`
$ rails g controller コントローラ名 アクション名
“`

例えば、book controllerを作成し、newアクションを追加したい場合、、、

“`
$ rails g controller book new
“`

こんな感じになれば、成功。

“`
[vagrant@localhost sample_app]$ rails g controller books new
Running via Spring preloader in process 25819
create app/controllers/books_controller.rb
route get ‘books/new’
invoke erb

元記事を表示

カラムの追加と削除

#カラムとは?
カラムとはデータベースの中のテーブルが持つ要素です。
例えば、ユーザーというテーブルの中の「名前、生年月日、住所」などの項目をカラムと言います。

#カラムの追加
新たに別のカラムを追加したいということはよくあると思います。
そんなときは以下のコマンドでカラムを追加です。

“`
$ rails g migration Addカラム名Toテーブル名 カラム名:型名
“`

例えば、「User」というテーブルに「name」というカラムを追加したい場合、

“`
$ rails g migration AddNameToUsers name:string
$ rails db:migrate
“`

ここで「rails db:migrate」を忘れてしまうと、テーブルへ反映されませんので、
気をつけてください。

#カラムの削除
カラム名を間違えて登録した時など、カラムを削除したいこともあると思います。
カラムを追加する時とあまり変わりません。

“`
$ rails g migration Removeカラム名Fromテーブル名 カラム名:型名
“`

「Us

元記事を表示

[Rails] ActiveModel::Attributesの使い方(配列化やネストしたhashの取り扱いなども)

ActiveModel::Attributesの使い方について使い方をまとめてみたいと思います。他の方の記事も少しだけありましたが、配列の作り方とか、ネストしているhashをオブジェクト化するやり方があまりまとまってなかったので初投稿してみることにしました。

## サマリ
記事の下まで読むと、ネストしているhashをActiveModel::Attributesを使ってきれいにオブジェクト化することができます。こんな感じです。

“`ruby
hash = {name: “徒然草”, price: 1000, authors: [{name: “兼好法師”, age: 35}, {name: “健康男児”, age: 20}]}
book = Book.new(hash)
book.name
# => “徒然草”
book.authors.class
# => Array
book.authors.first.class
# => Author
book.authors.first.name
# => “兼好法師”
book.authors.first.age
# => 35
`

元記事を表示

【Rails】エラー解決 Unsupported argument type: 1 (Integer)

###はじめに

今回は
`Unsupported argument type: 1 (Integer)`
こんなこと言われた時の対処方を記述します
お決まりのタイプミスによって発見したエラー文です笑

###解決策

***intger型の1という引数は期待してません***、という感じのエラー文です。

という事は違う物を期待してるところで整数の1を渡してしまっているという事です。

“`rb
User.find_by(session[:user_id])
“`
犯人はこれでした!

`find`と書くべきところを間違えて`find_by`と書いてますね、なので`find_by`のカラム名を書くところに`session[:user_id]`が入っているせいで、今回は[1]という整数が入ってるのでそのまんま[1]って名前のカラムを探しに行こうとしてしまった、そんな感じみたいですね。

>↓こんな感じの事ですね!

>“`rb
>User.find_by(1)
>“`

という事で

“`rb
User.find(session[:user_id])
“`
`find`に書

元記事を表示

herokuのエラー

##今まで出たherokuのエラー
その1

“`
error: src refspec master does not match any
“`
解決方法

pushするブランチを間違っていた。作業しているブランチがdevelopだったのでdevelopと書きその後に:masterとつけるのが決まりみたい。

“`
$ git push heroku develop:master
“`

元記事を表示

OTHERカテゴリの最新記事