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

Rails関連のことを調べてみた2022年01月15日
目次

Rails+Reactで何か作る(パート1:Rails準備編)

## はじめに

rails と react で何か作ろうと思います。
やったことをメモ&共有します。

railsとreactは別プロジェクトとして作成します。

最終的に
rails app は herokuへデプロイ
react app は firebase hostingへデプロイ
の予定です。

今回は、RailsAppを作成してテスト用のAPIを作成するところまでを行います。

## 環境
| ツール | バージョン |
|:-:|:-:|
| ruby | 3.0.2p107 |
| sqlite3 | 3.36.0 |
| node | v17.3.0 |
| yarn | 1.22.17 |
| rails | 7.0.0 |
| git | 2.26.2 |

## Railsの準備

### Railsをnewする

APIモードでrails アプリを作成する

“`
$ rails new quiz_rails –api
“`

とりあえず、git で first commit しておく

“`
$ cd quiz_rails
$ g

元記事を表示

present?メソッドとnil?メソッドの使い方

#はじめに
 今回はpresent?メソッドとnil?メソッドについてまとめます。どちらも条件分岐の時に便利なメソッドです。条件分岐どうしようと悩んだ時に、このメソッドで解決できたのでまとめます。
この記事は学習備忘録です。

#present?メソッドとnil?メソッドの違い
 present?メソッドとnil?メソッドはどちらも、**変数の中身があるか否か**ということを判定するメソッドです。違いとしては変数に中身があるかないかで返す値が変わるということです。

present?メソッド→変数に中身がある時にtrueを返す

“`
@tests.present?
#実行結果
=> true
“`

nil?メソッド→変数に中身がない時にtrueを返す

“`
@tests.nil?
#実行結果
=> true
“`

このメソッドを利用して条件分岐を作る事ができます

#present?メソッドとnil?メソッドで条件分岐を作る
 present?メソッドとnil?メソッドの使用例として、変数に中身がある場合は商品を表示させて、中身がない場合は代わりの画像を表示させる実装

元記事を表示

【Rails】RSpecの導入手順(メモ)

## 1. 必要モジュールのインストール
* RSpecをRailsアプリで使用するためには`rspec-rails`というgemが必要です。
* また必須ではありませんが、RSpecのテストをより高速に実行するために`spring-commands-rspec`もインストールしておきます。
* インストールグループとしてtestだけでなくdevelopmentも追加することでテストファイルを作成するgeneratorを使用することができます。

“`ruby:Gemfile
group :development, :test do
gem ‘rspec-rails’
gem ‘spring-commands-rspec’
end
“`
* bundle installでGemfileに記載したgemをインストールします

“`
$ bundle install
“`

## 2. spring-commands-rspecの設定
以下を実行して`bin/rails`が使用できるように設定します

“`bash
$ bundle exec spring binstub

元記事を表示

【devise_token_auth】認証トークンの保存先について

## はじめに
 本記事は、プログラミング初学者が、学習を進めていて疑問に思った点について調べた結果を備忘録も兼ねてまとめたものです。
 そのため、記事の内容に誤りが含まれている可能性があります。ご容赦ください。
 間違いを見つけた方は、お手数ですが、ご指摘いただけますと幸いです。

## 今回の疑問点
 今回の疑問点は、

  _認証トークンの保存先について_
 
 です。 
devise-token-authを用い、認証機能を実装していた際に保存先について疑問を抱き、それぞれのメリット・デメリットについて調べました。

##認証トークン保存先のメリット・デメリット
###local storage
メリット

– 実装が簡単

デメリット

– XSS脆弱性があった場合、トークンを簡単に盗むことができる

###Cookie
メリット

– HttpOnly属性をtrueにすることでJavaScriptからのCookie操作を無効にできる

デメリット

– 実装が手間
– HttpOnly属性をtrueにしても完全に安全というわけではない

###In-Memory
メリット

元記事を表示

Railsチュートリアル(6版)の13章で_form.html.erbを使っていた場合の戸惑い解消

# はじめに
プログラミング初学者の[@kat_log](https://twitter.com/kat__log “Twitter”)と申します。

Railsチュートリアル(Rails6版)の13章「13.3.2マイクロポストを作成する」の「リスト 13.43、13.44」で戸惑った部分について共有です。

## 戸惑ったポイント
10章の「10.1.1編集フォーム」の演習2をやった場合、`new.html.erb`と`edit.html.erb`の一部を`_form.html.erb`としてパーシャルにするため、テキストと違いが出て、どの部分を`f.object`にするか戸惑いました。

# 結論
`new.html.erb`と`edit.html.erb`は書き換え不要で、`_form.html.erb`を1箇所変えるとOKです。

“`ruby:_form.html.erb
<%= form_with(model: @user, local: true) do |f| %>
<%= render 'shared/error_messages', object: f.ob

元記事を表示

Ruby 中級者になるために絶対に理解しておかなければならない知識

こんにちは!石田佳介です!

今回の記事では、RoR初心者が中級者になるために絶対に抑えておかなければならないことを記事にします。

それは、オブジェクト、インスタンス、インスタンス変数、クラス

この4つを人に説明できるようになるくらい理解していないと絶対に更なる高みにはいけません。

それはなぜか?理由は、めちゃくちゃ大事な基礎であり、RoRの根幹になるものだからです。いくら多くのメソッドをおぼえても、上の4つを完璧に理解していなければ、実務に入ってもいつか頭打ちがきます。

こんな言っている僕ですが、ぼくも最近理解したので、心配しないでくださいね(笑)

今回使用する言語はrubyを使うので、ご了承ください

それでは本題に入りましょう

そもそもオブジェクトって?

この言葉よく聞くとおもいますが、そんな難しいことを言っているわけではありません。よく「モノ」と表現されます。現実世界でイメージしてみるとよく分かると思いますが、世の中には、モノであるあふれてますよね。スマホ、パソコン、本、等々あげたらキリがありません。

それはわかったけど、プログラミングの話をしてくれよ!っていう

元記事を表示

Railsでコメント機能のajax化

##コメント機能のajax化
[前回のajax化の記事](https://qiita.com/mmaumtjgj/items/ef494de60a36f2e769b1)にてどんなものかある程度理解したので、この記事ではお気に入りボタンの実装を例としてしたが、今回はコメント機能の投稿と削除のajax化の備忘録として記載。

**手順**
①コントローラーの修正
②“remote: true“の追加や“class“、“id“の指定
③“js.erbファイル“の追加

##①コントローラーの修正
“redirect先“を削除

“`修正前comments_controller.rb
class CommentsController < ApplicationController def create comment = current_user.comments.build(comment_params) if comment.save redirect_to board_path(comment.board), success: t('

元記事を表示

【Rails】Routingのカンペ(scope / namespace / module / action / as / コロン / constraintsの意味)

# はじめに

routesの読み方で不安になった時用のカンペです。
scope / namespace / moduleの根本の動作が知りたい方はこちらが参考になります。
https://qiita.com/ryosuketter/items/9240d8c2561b5989f049

# 目次

1. [まとめ](#まとめ)
1. [scope](#scope)
1. [module](#module)
1. [namespace](#namespace)
1. [as](#as)
1. [コロン](#コロン)
1. [constraints](#constraints)



# まとめ

## scope
scopeに指定した文字が**urlにのみ**影響する

## module
moduleに指定した文字が

元記事を表示

docker compose環境のrailsでDB関連のエラーが出たら確認することまとめ

# 環境
docker compose
mysql
rails6
rails初心者が色々迷走しているうちに様々なエラーに出会ったのでまとめてみます。

# エラー
データベースがない時に出るエラーです。

“`error.rb
ActiveRecord::NoDatabaseError: Unknown database
“`
## 対応
データベースがあるかを確認します。

“`checkdb.sh
#execコマンドでrailsコンテナの中に入ります。
$ docker exec -it xxxxxxxxxx bash
#railsコンテナの中からmysqlコンテナに接続しつつmysqlを立ち上げます。
root@xxxxxxxxxx:/app# mysql -u root -p -h db
#ここでmysqlが立ち上がらない場合そもそもdockerコンテナ同士の通信がうまく行っていないので下の「dockerコンテナ間の通信を確認する」を見てください。
#mysqlが立ち上がった場合はshow databasesでデータベースがあるか確認します。データベース名はrailsアプ

元記事を表示

【Rails】メソッド名を付けるときに気をつけること

最近、1つのメソッドで色々なことをしてしまってるメソッドのリファクタリングをしていて、
その過程で処理ごとにメソッドに切り出すことが多く、
メソッド名の付け方で迷うことがあったのでまとめてみる。

###オブジェクトを別の形に変換するメソッド名はto_hogeにする

“`ruby
# hashにして返すメソッド
# 悪くはない例
def convert_to_hash
end

# より良い例
def to_hash
end
“`

###否定形のメソッド名はなるべく作らない
判定が複雑になると可読性が下がってしまうこともある。
否定形のメソッドを作りたくなったときは、逆の意味(肯定)のメソッドを作って“`!hoge“`の形にして使う。

“`ruby
# 良くない例
book.not_published?

# 良い例
!book.published?
“`

###判定形のメソッドの末尾には疑問符?をつける
trueかfalseを返すメソッドの末尾にだけ「?」をつける。それ以外にはつけない。

“`ruby
shop.open?
“`

メソッド名に疑問符をつけら

元記事を表示

{Rails}ERROR 1045 (28000): Access denied for user ‘root’@’localhost’ (using password: NO)が出た場合の対処法

①やりたいこと
MySQLにログインしたい。
Modelを作成し、rails db:migrateを実行した後の出来事でした。(この2つは問題なく実行できました)

②エラー内容

“`
% sudo mysql -u root
Password:
ERROR 1045 (28000): Access denied for user ‘root’@’localhost’ (using password: NO)
“`

ちなみにsudo mysql -u rootと打つとEnter password:と出てくるので、パスワードを打った後に出てきたのがこのエラー文です。

③原因

④解決策
下記の記事を参考にしました。
https://ja.getdocs.org/mysql-error-1-45-28-access-denied-for-user-rootlocalhost-using-password-no/

引用すると >ユーザ ‘root’は、MySQLサーバにログインするためのパスワードが必要です。 ** これを解決するには、MySQLサーバーに接続する際

元記事を表示

【2022年最新】Rails6にBootstrap5を導入する方法

※ 本記事はRails6でBootstrap5を導入したい方向けの記事です!
※ Rails5やBootstrap4など、バージョン違いのものを導入する場合とは手順が異なります!

## 開発環境&前提条件
Ruby 3.0.2
Rails 6.1.4.4
導入したBootstrap 5.1.3
Rails6でrails newしてある状態

## Bootstrap5のインストール
“`terminal:terminal
% yarn add bootstrap
“`
上記コマンドでBootstrapの最新バージョンがインストールされます!
バージョンを指定する場合?

“`terminal:terminal
% yarn add bootstrap@バージョン番号
“`

ドロップダウンなどのポップアップ要素をいい感じにしてくれるpopper.jsもインストールします!

“`terminal:terminal
% yarn add @popperjs/core
“`

## application.html.erbに追記
“`erb:app/v

元記事を表示

{VScode} 「Implicit keys needs to be on a single line」と出た場合

VScodeでdatabase.ymlをいじっていると、下の「問題」となっているところに「Implicit keys needs to be on a single line」と出ました。
何やら問題が発生しているらしく、その対象の文が赤線で引かれています。(画像)
https://gyazo.com/e934bd8d247577458c145c7bf9b64fb1

よくわからなかったので、この状態のままrails sコマンドでページを開こうとしました。すると、、
https://gyazo.com/b6efd3ee3abadd7aa9435a93c209e2a9

何やらエラーが出て、ページが表示されません。
Please note that YAML must be consistently indented using spaces. Tabs are not allowed.

Google先生に和訳してもらうと、「YAMLはスペースを使用して一貫してインデントする必要があることに注意してください。 タブは許可されていません。」とのこと。
非常に単純な問題でしたが、単純ゆ

元記事を表示

カラム型の種類

| 型 | 意味 |
|:-:|:-:|
| string | 文字列(1〜255文字) |
| text | 長い文字列(1〜4294967296文字) |
| integer | 整数(4バイト) |
| bigint |整数(8バイト)
|float| 浮動小数|
|decimal |精度の高い小数|
|numeric |数値|
|datetime |日時|
|timestamp |タイムスタンプ|
|time |時間|
|date |日付|
|binary |バイナリデータ|
|boolean| 真偽値型|

元記事を表示

GraphQL RubyのDataloaderを使ってみる

GraphQL Rubyを使っているときにSQLのN+1問題を解決するためにバッチロードを利用すると思います。
有名なgemとしては [GraphQL::Batch](https://github.com/Shopify/graphql-batch) や [BatchLoader](https://github.com/exAspArk/batch-loader)、 [Dataloader](https://github.com/sheerun/dataloader)などがあります。
個人的には使ったことがあるのは[Dataloader](https://github.com/sheerun/dataloader)なのですが、2018年から更新されていないようなのと、去年GraphQL Ruby自体にDataloaderが入ったので今回はこちらを触ってみました。

## GraphQL::Dataloader の概要

ドキュメントはこちらです。

https://graphql-ruby.org/dataloader/overview.html

GraphQL::Dataload

元記事を表示

(愚痴)renderやredirect_toの後に書かれた後続処理がケアしないと実行されちゃうってセンス悪いと思う

Slack通知とか非同期処理やページレンダリング後にやって良いことを書けるようにすることは必要だけど、その仕組みは使いたいときに使える仕組みのほうが良いと思う。

なぜならrenderやredirect_toを複数書いたり先に書くケースなんて早期リターンみたいなケースがデフォルトだから。
早期リターン時は後続処理をしてほしくないからその記載をしている。

それにもかかわらず、非同期とかをできるようにするために、多数派の早期リターン的なことを実現するために`redirect_to and return`とかを書かなければいけない、手続き的にデフォルト以外の記法を求められるのはセンスが悪い。
それも呼び出されたコントローラーのpublicメソッドの中で(=切り出された関数で書いてはいけない)書かなければならないのは辛い。
Controller内のrenderやredirect_toなんて、raise並の優先度なんだから。

非同期とかできるようにするなら、デフォルトではなく、メソッドの引数に特殊な引数設定するとか、そのメソッドだけインスタンス変数とかヘルパーの変数でtrueにするとか、特殊

元記事を表示

rails db:migrateを実行すると、Warning: the running version of Bundlerと警告が出る

データベースを更新し、usersデータモデルを作成するために下記を実行したところ、、

“`
% rails db:migrate

Warning: the running version of Bundler (2.2.32) is older than the version that created the lockfile (2.2.33). We suggest you to upgrade to the version that created the lockfile by running `gem install bundler:2.2.33`.
“`

と警告が出る。


“`
% gem install bundler:2.2.33

Fetching bundler-2.2.33.gem
Successfully installed bundler-2.2.33
Parsing documentation for bundler-2.2.33
Installing ri documentation for bundler-2.2.33
Done inst

元記事を表示

【Rails】ツイートを作成順ではなく、いいねした順に表示したい

# 概要
ツイート投稿機能とツイートへのいいね機能を持つアプリケーションを開発中、
いいねした順番にツイートを取得する方法について調べたのでメモ。

## 環境
ruby 3.0.2
rails 6.1.4
mysql 8.0.26

## やりたいこと
**ツイートの作成順**がデフォルトの時に、
**ツイートの作成順**ではなく**ユーザーがいいねした順**にツイートを取得したい。

## 先に結論
reorderを使用し、中間テーブルのカラムを直接指定する

“`ruby:users_controller.rb
# ユーザー詳細画面で表示したい場合
def show
@user = User.find(params[:id])
@favorites = @user.favorite_tweets.reorder(‘favorites.created_at DESC’)
end
“`

以下、詳細

### 関連するモデル

“`ruby:user.rb
class User < ApplicationRecord has_many :tweet

元記事を表示

Codecov × SimpleCov × RSpec × CircleCI で README にカバレッジを表示させる

# この記事を読むとできること
* GitHub の README に RSpec のカバレッジのバッジを表示させることができる
* バッジをクリックするとカバレッジの詳細やグラフを確認することができる

# はじめに
GitHub のリポジトリを見ていると、テストのカバレッジ (全アプリケーションのコードに対するテストコードのカバー率) が表示されたバッジをよく見かける。あれを自分もやってみたいと思い設定をしてみたのだが、思っていた以上に躓くポイントが多かった。そのため、導入方法をここに残しておく。

Codecov も SimpleCov も CircleCI もメジャーなツールではあるのだが、この 3 つを組み合わせた場合の導入方法を紹介している記事がほとんどなかった。この記事が、同じことを実現しようとしている人の役に立てば幸いである。

なお、この記事では、Git のホスティングサービスには GitHub、Ruby のテストツールには RSpec を使用することを想定している。ただ、基本は同じはずなので、異なる部分は適宜、読み替えること。

# Codecov

元記事を表示

管理者権限もどき

# はじめに
今回は新規登録した時の情報を使って、***表示するかしないか***を判別していこうと思います。

# 前提
この機能を実装するに当たって、***deviseを使用したマイページ機能***の実装はしてあるものとします。

# 実装

これから実装していきます。

### deviseにカラムの追加

“`
rails g migration AddAdminToUsers admin:string
rails db:migrate
“`

上記のコードを打ち込んで、adminカラムをstring型で追加します。

### parameterに記述します

“`app/controllers/application_controller.rb
def configure_permitted_parameters
devise_parameter_sanitizer.permit(:sign_up, keys: [:name, :admin#ここに追加])
devise_parameter_sanitizer.permit(:account_update, ke

元記事を表示

OTHERカテゴリの最新記事