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

Rails関連のことを調べてみた2021年08月03日
目次

[Rails]ransackを使った検索機能

今回は、`ransack`というgemを使った検索機能の解説をしていきたいと思います。

`ransack`を使うことで、検索機能をかんたんに実装することができます。
gemの素晴らしさを体感できる系ですねw

#開発環境

> ruby 2.6.3
> Rails 5.2.6

#前提

検索機能は、ユーザーの検索を例に出していくので、すでになんらかのアプリで、ユーザーが存在するものをご準備ください。

#手順

– gem ransackのインストール
– コントローラー
– ルーティング
– ビュー

#gem ransackのインストール

まずは、gem ransackをインストールします。

“`Gemfile
gem ‘ransack’
“`

を追加できたら

“`
$ bundle install
“`

#コントローラー

ではさっそく、検索の処理をコントローラーに記述していきます。

ここでは、usersコントローラーにsearchアクションには、検索の処理を、indexアクションでは検索結果を取得しています。

“`controllers/users_

元記事を表示

[Ruby on rails] ”undefined method `each’ for nil:NilClass”エラーが出た時の対処法

エラー画面

グループを作成後、一覧画面でグループ一覧を作成しようとしてたところ、
こんなエラーが出てきました。

こういうエラーは大体スペルミスに原因があるのではないかと思います!

![スクリーンショット 2021-08-03 9.49.48.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1633266/bacd570a-6c0c-5a9b-3fa0-3677aaa2fc45.png)

解決方法

コントローラー、モデルの記載を見直せど、スペルミスは見当たらず…
createコントローラーをよく見たのですが、わからず…
form_withでの送信がなんか、おかしいのかな~?と思ってみたら…

ここでした!

“`
<%= form_with model: group, local: true do |f| %>

<%=f.label"勉強会名"%

元記事を表示

【Rails】form_withを使って情報入力欄を実装する方法

#対象者

* form_withを使って入力項目の作成を考えている方

#目的

* form_withの基礎構文を学んで、実装手順を抑えること

#実際の手順と実例
###1.前提
Rails tutolialのsample appを参考にしています。

* ユーザー登録の新規登録フォームを作成しようとしています。
* UsersController、Userモデル、new.html.erbに実装していきます

###2.コントローラーの設定

下記のようにコントローラーに記載します。

“`users_controller.rb
class UsersController < ApplicationController def new @user = User.new end end ``` 以前メンターさんにご質問させていただいた際に、 「form_withが筆記用具だとしたらnewメソッドが紙みたいなもの」 的なニュアンスのこと仰っていて、すごくしっくり来た気がします。 つまり、コントローラーにnewメソッドを定義したインスタンス変数変数は必須

元記事を表示

しておくと便利かもしれないRailsの設定

備忘録。Railsのバージョンは6.1。環境はWSL

## 開発環境周り
### ログをターミナルに出力する
““config/environments/development.rb
config.logger = Logger.new(STDOUT)
““

### 編集を開発サーバーに即反映
““config/environments/development.rb
config.file_watcher = ActiveSupport::FileUpdateChecker
““

### js更新しても勝手にコンパイルしない
WSLだと重い

““config/webpacker.yml
development:
<<: *default compile: false ```` ### assets(css)のデバッグモードオフ 何故かcssが開発途中で反映されなくなるため ````config/environments/development.rb config.assets.debug = false ```` ## View周り ### f

元記事を表示

Railsで複数選択可能なselectタグを実装する

## したいこと
複数選択可能なドロップダウンセレクトタグをさくっときれいに実装したい。

## 使うもの
[bootstrap-select](https://developer.snapappointments.com/bootstrap-select/)
色々探した中で一番シンプルかつ高機能で良さげだった。因みに[MDBootstrap](https://mdbootstrap.com/docs/standard/)ってのでもほとんど同じかんじのが導入できるけど有料(1年で2万円とか。でもめっちゃ高機能だしBootstrap臭がしない)

## bootstrap-selectの導入
### Bootstrapの導入(※v5, ’21/08/03時点でv5対応バージョンはベータ版)
以下を参照
https://qiita.com/kazutosato/items/d47b7705ee545de4cb1a

その後に以下を追記(※正規版だと必要ないかも)

““config/webpack/environment.js
const webpack = require(‘webp

元記事を表示

GmailでAPIから署名付きでメールを送る方法

##メールに自動的に署名は付かない
gmailでAPI経由でメールを送信する際、署名を付ける方法がわからなかったので調査しました。
日本語の記事がほとんど見当たらず、結構詰まったので残しておきます。
railsでの書き方になりますが、gmailのAPIとして提供されている機能ですので、他言語でも対応する書き方が存在するはずです。

##結論
署名などのユーザー設定的なものを扱う**SendAs**なるクラスが存在するため、自身のメアドを指定してそれを取得します[1]。
取得できたsend_asの**signature**(署名)を参照すると、署名を文字列として取得できます。

“`ruby
require ‘google/apis/gmail_v1’

Gmail = Google::Apis::GmailV1 # Alias the module
service = Gmail::GmailService.new
send_as = service.get_user_setting_send_as(‘me’, ‘my-address@gmail.com’)
pp send_as.s

元記事を表示

【初心者向け】rails 投稿機能解説!form_withやストロングパラメータを図で理解!

# はじめに
form_withをつかった投稿機能は、Rails 初学者がつまづきやすいポイントかと思います!
本記事では **form_withを使った入力フォームの作成** 、**ストロングパラメータ**、**データの保存**までを解説していきます。

図を織り交ぜていますので、イメージをつかみつつ理解を深めていきましょう:sunny:

### 動作環境
– Ruby 2.6.7
– Rails 5.2.7 (動作としてはrails6系でも同様です)

### 実装する機能・仕様
フォームでタイトルと内容を入力し、データベースに保存する。
Blogモデルにtitle、bodyカラムを準備。

# form_withを用いて入力データを送信する
new.html.erbにてフォームを以下のように作成していきます。

“`ruby:blogs_controller.rb
def new
@blog = Blog.new
end
“`

“`erb:new.html.erb

Blogs#new

<%= form_with model: @blog, loc

元記事を表示

api/v1をエンドポイントにしたルーティング

#名前空間を使ったルーティング
最初から下の様にバージョンで名前空間を作成しておくことで今後のAPIのバージョン管理が簡単になる。

“`routes.rb

Rails.application.routes.draw do
namespace :api do
namespace :v1 do
resources :articles
# For details on the DSL available within this file, see https://guides.rubyonrails.org/routing.html
end
end
end

“`
rails routrs |grep api/v1で確認

“`
api_v1_articles GET /api/v1/articles(.:format) api/v1/articles#index

元記事を表示

binding.pryを使えるようになりたい!2

# はじめに
本記事は、昨日投稿した続きで、
「binding.pry」の使い方をまとめたものになります。
前回の投稿もご参照ください。

https://qiita.com/mkato1013/items/e7cbc21a4a03c9acf22c

# 「binding.pry」の目的
たとえ、「binding.pry」が万能だとしても、
確認できることは限られています。

“`
目的(私が思いつくものです。他にもあると思います。)

①paramsの中身の確認
②「binding.pry」の後に、if文があれば、true or falseの指示が出せているかどうか
③エラー内容の確認
④インスタンス変数の中身の確認
“`
結論としては、
`何かの中身や結果が期待するものかどうかを調べたい時`
`エラーの原因はどこにあるのかを探したい時`
が目的となります。

# 何ができる?

“`
ここのコードが間違えているため、このように修正しなさい!!
“`
という`直接的にエラーを解決できるものではありません`。

“`
ここではないかという目星をつけ、
「ここは間違えていない!

元記事を表示

Railsの環境構築

##はじめに
環境構築はPCを購入した後、一回やれば何度も毎回やる必要のない作業です。
ですので全く作業工程を覚えられる気がしないので、私が初めて行ったRailsで開発するための環境構築を忘れないうちに、ざっと書いておきます。

ちなみにMacでiOSはCatalina以降のやり方になります。

よろしくお願いします。

##Command Line Toolsをインストール
まず、Command Line Toolsを入れる前に下記のコマンドをターミナルで実行します。

“`terminal:ターミナル
# zshをデフォルトに設定
% chsh -s /bin/zsh

# ログインシェルを表示
% echo $SHELL
# 以下のように表示されれば成功
/bin/zsh
“`

もしパスワードを求められたら、PCのパスワードを入力します。

さあ、Command Line Toolsをインストールします。Command Line ToolsとはWebアプリケーション開発に必要なソフトウェアをダウンロードするために必要となる機能です。

下記のコマンドをターミナルに打ち込みま

元記事を表示

[Ruby on rails]タグ付け機能② タグをリンクにしてタグで検索(複数タグ)

やりたいこと

①投稿に対して複数タグを付けれるようにする(別記事で実装済)

②タグをリンクにして、検索できるようにする。リンクになってるタグを押すと、
そのタグを付与してる記事一覧が表示される

:fist:複数タグの投稿
![スクリーンショット 2021-08-02 14.02.51.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1633266/d4dbb3f1-e343-c84e-9bf0-62e85deb1d82.png)
:fist:投稿一覧画面でタグの一覧と、記事数の表示
![スクリーンショット 2021-08-02 14.02.12.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1633266/8445fd36-0244-02c4-bc88-0fc446c80fa4.png)
:fist:タグを押すと、検索ができ、そのタグがついてる投稿を検索できる
![スクリーンショット

元記事を表示

[Ruby on rails]タグ付け機能① 複数のタグ付け

やりたいこと

①投稿に対して複数タグを付けれるようにする
②タグをリンクにして、検索できるようにする。リンクになってるタグを押すと、
そのタグを付与してる記事一覧が表示される

:fist:複数タグの投稿
![スクリーンショット 2021-08-02 14.02.51.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1633266/d4dbb3f1-e343-c84e-9bf0-62e85deb1d82.png)
:fist:投稿一覧画面でタグの一覧と、記事数の表示
![スクリーンショット 2021-08-02 14.02.12.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1633266/8445fd36-0244-02c4-bc88-0fc446c80fa4.png)
:fist:タグを押すと、検索ができ、そのタグがついてる投稿を検索できる
![スクリーンショット 2021-08-02 14.02.2

元記事を表示

【Rails】コントローラーのリファクタリング

# はじめに
ポートフォリオで、コントローラーのリファクタリングをやったので、備忘録として記事を書きます。

#環境
・Ruby 2.6.3
・Ruby on Rails 5.2.5

# リファクタリング1つ目 concemsを使う
共通記述を複数のコントローラーで使う時にやる
app/controllers/concernsにファイルを追加し、必要箇所で読み込ませる

“`ruby:controllers/concerns/search.rb
module Search
extend ActiveSupport::Concern

def search
@keyword = params[:word]
redirect_to request.referer, notice: “検索文字を入れて下さい” if @keyword.blank?
searcher = Searcher.new(params[:word].split(/[[:blank:]]+/))

@users = Kaminari.paginate_array(searc

元記事を表示

Dockerコンテナ内でmysqlコマンドが使えなかったときの話

はじめに

Docker環境で開発中に、コンテナ内で「rails g model ~」や「rails db:migrate」により、テーブルを作成したので、作成したテーブルなどを確認するために、MySQLを起動させようとしたところ、以下のとおり、起動しませんでした。

“`
$ mysql -u root -p
bash: mysql: command not found
“`

あれ、MySQL入っているはずなのに、なぜだろう?

開発環境

・Ruby on Rails 6.1.4
・MySQL 8.0.25
・Docker 20.10.7
・docker-compose 1.29.2

原因と対応

私はrailsコマンドを使用するために、Dockerをバックグラウンドで起動させた後、次のコマンドによりコンテナに入って作業をしていました。

“`
$ docker-compose exec web bash
“`

そうです、webコンテナ(=railsのコンテナ)の中で、mysqlコマンドを実行しようとしていたのです。

元記事を表示

[Rails]N+1問題を対処する

N+1問題って聞いたことはありますか?

N+1問題はかなり怖い問題で、ぼくはポートフォリオ作成のときに、N+1問題に直面しました。

そのときに、調べた内容をぼくの理解の範囲で、アウトプットしていきます。

#N+1問題とは

そもそもN+1問題とはどんな問題のことをいうのでしょうか?

`データベースからデータベースを取り出すときに、大量のSQLが発行されて、動作が重くなる問題`のことです。

たとえば、usersテーブルとpostsテーブルで、下記のようなアソシエーションがあったとします。

“`models/user.rb
class User < ActiveRecord::Base has_many :posts end ``` ```models/post.rb class Post < ActiveRecord::Base belongs_to :user end ``` で、投稿の一覧を表示していきます。 Postモデルから全データ取得して、それをeach文で回していきます。 ```controllers/posts_controller.rb cla

元記事を表示

~part2~【FC版】React + Rails API + axios + react-router-domでCRUDを実装する

こんにちは!スージーです。
前回書いた[こちら](https://qiita.com/suzy1031/items/cc708fc705158b774fd6)の続きです

### やりたい事

– モデルを1対1で関連付け
– CRUDを実装

React × Rails APIで関連付けをしたモデルのCRUDを実装するにはこんな感じでやるんだなーって感じで見ていただけると幸いです

### 開発環境

Ruby 2.7.1
Rails 6.0.4
MySQL
node.js 14.8.0
React 17.0.2

### 参考

– [【Rails】モデルの関連付けで用いられるbuildメソッドまとめ](【Rails】モデルの関連付けで用いられるbuildメソッドまとめ)

### やらないこと
– rails
– トランザクションの説明
– リレーションの説明
– エラーハンドリング

### まず`gem foreman`を入れる
毎回ローカルサーバを立ち上げる時に、`rails s`と`yarn start`をするのが面倒くさいので

“`term

元記事を表示

【Rails】サンプルユーザーを増やす!Fakerの導入でサクラを作る方法

#対象者

* 作成したサイトにテストユーザーを大量に導入したい方

#目的

* Gem「Faker」を使用してデータを増やすこと

#実際の手順と実例
###1.Fakerとは

Fakerとは実際にいそうなユーザー名(ユーザー以外も行ける??)を作成するGemです。

これの導入によって手作業で1人ずつユーザー登録をしていくという作業や手間をカットできます。

###2.Faker導入方法

#####1.gemに導入

“`Gemfile
:
:
gem ‘rails’, ‘6.0.3’
gem ‘bcrypt’, ‘3.1.13’
gem ‘faker’, ‘2.1.2’
gem ‘will_paginate’, ‘3.1.8’
:
““`

この後**bundle install**を実行します

#####2.サンプルユーザー作成

seedファイルに作成していきます。

まずメインとなるユーザーを1人作成します

““`db/se

元記事を表示

Rails deviseの導入方法と仕様・仕組み

# deviseとは

ユーザー管理機能の実装を補助してくれるRubyのgem(ライブラリ)です。
新規登録・ログイン・ログアウトやメール認証・SNS認証等の機能を実装でき、セキュリティ的にも安全なものが作れます。

# devise導入

Railsのアプリケーションディレクトリ直下にある`Gemfile`の末尾に以下を追記します。

“`Gemfile
gem ‘devise’
“`

ターミナルでRailsのアプリケーションディレクトリに移動し、以下コマンドを実行してインストールします。

“`zsh
bundle install # gemインストール
rails g devise:install # deviseの設定ファイル生成
“`

# 認証用のモデルを作成

認証用のモデルを作成します。以下ではuserモデルを作成していますが`customer`や`mail_user`、`admin`等好きなモデル名でOKです。

“`zsh
rails g devise user
“`

migrationファイルやmodelファイルが生成されます。
`rails g

元記事を表示

[Rails]パンくずリストの実装方法

# はじめに
パンくずリストを一ページごとに挿入するのは面倒で管理がしにくいです。webサービスに関しても遷移が多くなるので、パンくずリストを実装していないと希望のページに飛びにくくなってUI的に下がります。そこで、パンくずリストを簡単に導入できるGemを紹介します。是非つかっていただけたら記事を書いた甲斐があって嬉しいです。

# 紹介するGem

## gretel
パンくずリストのためにつくられたGemで、スター数は少ないものの簡易的にパンくずリストを実装できます。
多少使いにくい部分も出てきましたので改善の余地があります。最新アップデートが一か月前なので、まだ期待はできるかなと。(自分でプルリク出すのはニッチすぎる部分なので控えます?)

https://github.com/kzkn/gretel

# 使い方

## 1.Gemをインストール

“`ruby:Gemfile
gem “gretel”
“`
“`
bundle install
“`
## 2.Configファイルを作成
“`
rails generate gretel:install
“`
上記の

元記事を表示

部分テンプレートで初歩的なエラー

# ActionView::MissingTemplate エラーが起きました!
ポートフォリオが完成してきたので、可読性の向上、見た目を整えようと思ってheaderを部分テンプレートにしようと思い、取り組もうとコードを書き始めましたが・・・・。
![エラー.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1719458/37caaac1-5c2e-9175-5b5f-4c393971e917.jpeg)

# 結論
フォルダの階層を間違えておりました!
お手本にしているのでは、sharedファイルは、viewファイルの階層にあったのですが、deviseを使っていた為、deviseファイルの階層(1階層下)に潜り込んでいたが故に怒ったエラーだったんですね。

# 反省点
エラーが出てググってみるも、同じエラーでも原因の種類もたくさんありました。
とりあえず今回は数分で気づくことができたので、自分の中ではよしとしましょう・・・。

元記事を表示

OTHERカテゴリの最新記事