- 1. Rspecのrequest specにて値の削除や更新、作成などのテストをする際の注意点
- 2. インスタンス変数の簡略化メモ
- 3. 【Rails】redirect_backとは
- 4. devise_token_auth使用時のRspecの認証処理のやり方
- 5. Railsの起動時のメッセージ対処
- 6. gemを比較するサイトを作ってみた。ついでにRails7の所感を少々
- 7. 豆知識:「present?」や「blank?」などの末尾にある「?」について
- 8. Rails7を構築してみる
- 9. 【Ruby on Rails】データベースを削除する方法
- 10. Ruby on Railsを基本からまとめてみた【1】【概要と特徴】
- 11. railsチュートリアル rails serverでエラー Blocked host:〜
- 12. Railsプロジェクトの作成からHerokuにデプロイするまで
- 13. 【Rails7】Railsで数値を3桁で区切る
- 14. [個人開発] 普段コンビニ食品を食べているが、成分が気になる方へ向けてのサービス 「healthy-combi」を開発しました。
- 15. 【Rails】ページ毎にタイトルを変更する方法
- 16. Web3層構造とWebサーバー・アプリケーションサーバーについて
- 17. 【Rails】rails sができなくなった時の対処
- 18. 【 Rails】30分で作る定期通知LINEbot
- 19. 【Rails】コメント機能のparamsにmergeの意味を調べた
- 20. rails7へのバージョンアップを安全に行うために使用するnew_framework_defaults_7_0.rbの各項目をさらっと解説
Rspecのrequest specにて値の削除や更新、作成などのテストをする際の注意点
## 概要
Rspecのテストで、値を更新や削除などのデータ変更が加えられた際に
テストの記述の仕方について多少手間取ったので備忘録としてアウトプットします。## 環境
Ruby ‘3.0.1’
rails ‘6.1.4’
rspec-rails ‘5.0.2’## テストコード
### 前提
今回のテストはpostコントローラーにdeleteリクエストを送った際に、
該当する投稿データが削除されるといったテストを想定します。
__なお、実際のコードについては説明に重点を置くため簡易的に表記します。___*controllers/posts_controller.rb*_
“`ruby
class PostsController < ApplicationController def destroy post = Post.find(params[:id]) # 左記のコードでは誰の投稿でも削除が可能になってしますので、 post.destory # ユーザー自身の投稿のみ削除可能にするための条件分岐等を行ったほうが
インスタンス変数の簡略化メモ
●インスタンス変数
3段活用
以下、全て出力結果は同じになる“`:①基本の書き方
class Test
# セッター
def name=(name)
@name = name
end# ゲッター
def name
@name
end
end“`
“`:②セッターとゲッターをそれぞれ簡略化
class Test
# セッター
attr_writer :name
# ゲッター
attr_reader :name
end“`
“`:③全て簡略化
class Test
attr_accessor :name
end“`
【Rails】redirect_backとは
redirect_backを使うと、“直前のページにリダイレクト“をしてくれる。
“`使い方.
redirect_back fallback_location: 直前のページに戻れなかった際のパス#使用例
redirect_back fallback_location: root_path
“`redirect_backを使う際は、直前のページに戻れなかった際のパスの記述が必要。
devise_token_auth使用時のRspecの認証処理のやり方
## 概要
Railsで`devise_token_auth`を使用して認証機構を実装しております。
Rspecを利用してテストを書いている際に、テスト内でトークン認証をさせるのに手間取ったので
備忘録としてアウトプットしたいと思います。## 方法
ここでは、`devise_token_auth`を使用してトークン認証をしている場合と、
`devise`を使用してトークンを使わない認証の場合に分けて記載します。
使用例としてはログインしたユーザーが投稿を作成するというテストを考えていきます。
__なおここからは認証のやり方を示すことに重点を置いているためすべて簡易的にコードを記載していきます。__#### deviseを使用した場合
通常`devise`を使用した場合は`sign_in`というヘルパーメソッドを使用してテスト内でログイン認証を行います。
まず、下記の投稿に関するcontrollerがあるとします。
またコード中に出てくる`authenticated_user!`、`current_user`、`sign_in`などはdeviseを導入すると
使用できるヘルパーメ
Railsの起動時のメッセージ対処
### 環境
“`markdown
・ ruby-3.1.0
・ rails-6.1.4.4…他依存ライブラリ
“`#### Rails起動時
> Calling `DidYouMean::SPELL_CHECKERS.merge!(error_name => spell_checker)’ has been deprecated. Please call `DidYouMean.correct_error(error_name, spell_checker)’ instead.
Railsは起動し動作はするが毎回出力されると気になる
#### プロジェクト内Gemfileに下記を追加
“`markdown
gem ‘thor’
“`> bundle update
_起動時に、did_you_meanのメッセージは消えている。_
[RubyGems_thor](# https://rubygems.org/gems/thor?locale=ja) / [GitHub_rails_thor](https://github.com/rails/thor
gemを比較するサイトを作ってみた。ついでにRails7の所感を少々
## 作ってみた
Railsのリハビリついでに欲しかったサイトを作りました。
簡単に言うと、[npmtrends][npmtrends-url]を~~パクっ~~リスペクトしたサイトです。サイト:[rubytrends.net][site-url]
ソースコード:[github][repository-url]## こんな感じ
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/188872/8bea6cc4-38a8-10a1-2d0a-0d4ebcce1ed9.png)
過去一年分のダウンロード数をグラフ化し、重ねて表示しただけです。
次は期間を変えれるようにする予定です。また、裏で検索履歴をカウントしているので、皆さんが使ってくだされば、いずれは本家のようによく比較されている関連gemを表示できるようになるはずです。
需要がありそうなら機能強化していきます。
## Rails7を使ってみた感想
この記事にRailsタグを貼り付けた以上、Railsに関して何も書かない
豆知識:「present?」や「blank?」などの末尾にある「?」について
#「present?」や「blank?」などの末尾にある「?」について
Rubyでは慣例的に、trueやfalseを返すメソッドには「?」をつける傾向にあります。
Rails7を構築してみる
Rails7がリリースされたので、ざっくり立ち上げまで試してた。
https://edgeguides.rubyonrails.org/7_0_release_notes.html
## Rail7をインストール
“`bash
$ mkdir trial-rais7
$ cd trial-rais7/# rubyのバージョンを2.7以上にする
$ rbenv local 2.7.2
$ ruby -v
ruby 2.7.2p137 (2020-10-01 revision 5445e04352) [x86_64-darwin19]$ touch Gemfile
“`Gemfileを以下のように作成する
“`txt:Gemfile
source “https://rubygems.org”
ruby “2.7.2”
gem “rails”, “~> 7.0.0”
“`“`bash
$ bundle install$ rails -v
Rails 7.0.0
“`## Rails7プロジェククトを構築
“`bash
# mysql2のイン
【Ruby on Rails】データベースを削除する方法
こんにちは!安田駿介です!
今回は「Railsでデータベースを削除する方法」というテーマで解説していきます。
# ターミナルで「rails db:migrate:reset」と入力する
これだけですね。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1903726/74424c26-09c3-a93b-1a9a-d9846f44a29b.png)
という結果になります。
#開発環境
・Cloud9
・Ruby 3.0.0
・Rails 6.1.3.1
・MySQL2
Ruby on Railsを基本からまとめてみた【1】【概要と特徴】
##Ruby on Railsとは
Ruby on Railsはプログラミング言語「Ruby」で利用される代表的なフレームワーク。
##フレームワークとは
システムを開発するために必要な機能がまとまったものをフレームワークと呼ぶ。
文字通り「枠組み」を表し、システム開発がより簡単に行えるように便利なプログラムがひとまとまりとなったシステムを指す。##Ruby on Railsの特徴
####MVCアーキテクチャー
Ruby on Railsは、MVCアーキテクチャーの基づいたフレームワークである。
データベースとのやり取りやビジネスロジックなどを担当するモデル(Model)、ブラウザへの表示を担当するビュー(View)、モデルやビューへの指令を与える役割としてのコントローラー(Controller)それぞれの頭文字を取ってMVCアーキテクチャーと呼ばれる。MVCアーキテクチャーによって、機能毎の独立性が高く、開発効率・保守性ともに高いアプリケーションを構築することが可能である。
####CoC
Convention over Configurationの略称で、日本語
railsチュートリアル rails serverでエラー Blocked host:〜
#railsチュートリアルの1.3.2rails serverのところで一瞬詰まったのでメモ
まずこの1.3.2ではrails serverというコマンドを実行するだけでRailsアプリを実行できるよーというお話。
コマンドを実行する前にローカルWebサーバーへの接続を許可する必要があるので
config/environments/development.rb
のconfig.file_watcherの下の行に“`
config.hosts.clear
“`
を追加別ターミナルを開いてrails serverを実行しプレビューで確認すると
Blocked host:〜
というプレビュー画面が表示されてしまった。#解決方法
ターミナルの画面で“`
$ rails server
Could not find gem ‘puma (= 4.3.6)’ in rubygems repository https://rubygems.org/ or installed locally.
The source contains the following vers
Railsプロジェクトの作成からHerokuにデプロイするまで
Rails newコマンドによって新しく作成されたアプリケーションをHerokuにデプロイするだけなのですが、ハマったので備忘録として記載します。
かなり基本的な所からの内容になりますが、エラーに振り回されながらでしたので、同じ過ちを繰り返さないように起きたことをそのまま順序立てて書いていきます。
基本的にはRailsチュートリアルの順序通りですが、そのままこなそうとするとエラーになったりするので、工夫します。
開発環境
mac OS バージョン11.6
エディタ
VScodeデスクトップに空のファイルを用意し、VScodeにドラッグ&ドロップ。ファイル名は何でもいいですが、ここではport-forioにしました。
ここからはVScodeのターミナルで操作します。
“`
$ Rails new アプリ名
“`これでRailsプロジェクトが作成されます。ここではアプリ名をsampleとします。
“`
$ cd sample
“`
プロジェクトが作成されたら、まずはコミットしておくといいです(以降に変更を加えたときに、どの部分が変更されたのかわかるため)“
【Rails7】Railsで数値を3桁で区切る
Rails で数値を3桁区切りにする際のメソッド名が変更された。
### before
“`ruby
to_s(:delimited) # TypeError: no implicit conversion of Symbol into Integer
“`### after
“`ruby
to_formatted_s(:delimited)
“`変更の理由としては、Ruby 3.1では `to_s` のカスタム実装がない場合に高速化がされるが、Railsは多くのコアクラスで `to_s` をオーバーライドしており高速化が無効になってしまうため。
## 外部リンク
### 変更のPR
[Deprecate to_s(format) in favor of to_formatted_s(format)](https://github.com/rails/rails/pull/43772)
### 検索上位記事
https://qiita.com/wacker8818/items/cc213ba3ce72891dfb23
https://qiita.com
[個人開発] 普段コンビニ食品を食べているが、成分が気になる方へ向けてのサービス 「healthy-combi」を開発しました。
## サービス概要
コンビニ食品をよく摂取するが、炭水化物・脂質・塩分が気になる人へ。組み合わせ食品を共有するアプリです。
URL: https://www.healthy-combi.com/
GitHub: https://github.com/takuya178/healthy-combi[![Image from Gyazo](https://i.gyazo.com/ca8957b0455b3b00f02595e053678469.jpg)](https://gyazo.com/ca8957b0455b3b00f02595e053678469)
炭水化物、脂質、塩分から控えたい成分を選び、麺類とご飯類から食べたいジャンルを選んでいただきます。
選んでいただいた条件から組み合わせ一覧が表示され、控えたい成分とカロリーの値が表示されます。## サービスを作成した背景
薬局の従業員の健康改善を目的に作成させていただきました。
そのため薬局の従業員の方達にMVPを定期的に見ていただき、サービスの修正や機能の追加を実装することができました。(本当にありがとうございました
【Rails】ページ毎にタイトルを変更する方法
##content_forを使ってタイトル名を変えていく
“content_for“というヘルパーを使って**「ログイン(ページ名) | SAMPLE BOARD APP(固定タイトル)」**と出力するやり方を見ていく。**手順**
①application_helperにヘルパーメソッドを記入
②viewにタイトルを入れていく##①application_helperにヘルパーメソッドを記入
“`application_helper.rb
module ApplicationHelper
def page_title(page_titlle = ”)
def page_title(page_title = ”)
base_title = ‘SAMPLE BOARD APP’page_title.empty? ? base_title : page_title + ‘ | ‘ + base_title
end
end
end
“`“page_t
Web3層構造とWebサーバー・アプリケーションサーバーについて
# Webアプリケーションの3層構造
> Webアプリケーションはユーザインターフェースとなるプレゼンテーション層(Webサーバーが担う)、業務処置を行うアプリケーション層(APサーバーが担う)、データ処理や保管を行うデータ層(DBサーバーが担う)の3層構造となっている。
https://qiita.com/mk185/items/e914683410fd4ecaf0af– [WEBサービスとWEB3層構造について](https://nari104.hatenablog.jp/entry/2016/06/05/000004)
– [Web技術の基本 ~Webアプリケーションの構造~](https://qiita.com/mk185/items/e914683410fd4ecaf0af)
– [なぜ、Webサーバが必要か説明できますか?](https://qiita.com/gen10717913/items/a2620579e61449acae3e)
– [ミドルウェア(Web、AP、DB)について知ろう](https://thinkit.co.jp/article/11837)
【Rails】rails sができなくなった時の対処
##背景
“rails s“実行中にエラーが起き、“⌘+C“で終了出来なかったため、“⌘+Z“で強制終了し、再度起動すると“`ターミナル.
=> Booting Puma
=> Rails 5.2.3 application starting in development
=> Run `rails server -h` for more startup options
A server is already running. Check /Users/ユーザー名/projects/test/tmp/pids/server.pid
Exiting
“`と上記のようなものが出た。
“/Users/ユーザー名/projects/test/tmp/pids/server.pid“はサーバー起動する際に使用しているID。本来であればサーバーを終了したら、このIDも削除されるはずだが、今回のような強制終了により、IDが残ってしまうことがある。##解決策
本来は自動で削除されるであろうこのIDを手動で消してあげれば、解決する。**手順**
①server.pi
【 Rails】30分で作る定期通知LINEbot
##はじめに
決まった時間に任意のメッセージを送信するLINEbotを作っていきます。
こちらが返事をすると、さらにメッセージが送られてきます。####使用技術
– Ruby
– Rails5
– PostgreSQL
– Heroku
– LINE Messager API##手順
まずLINE Developersコンソールで各種設定を済ませます。
次にRailsで新プロジェクトを立ち上げます。
ローカルで動作が確認できたら、Herokuでデプロイします。
最後に定期実行の設定をして完了です。##LINE Developers
ログインしたらプロバイダとチャンネルを作成します。
ユーザーIDとチャネルシークレット、チャネルアクセストークンを控えておきます。
最初の二つはチャンネル基本設定、あとの一つはMessaging API設定の項目にあります。
詳しいやり方は[ドキュメント](https://developers.line.biz/ja/docs/line-developers-console/)で確認できます。##Rails
####アプリを作る
通常のアプリ
【Rails】コメント機能のparamsにmergeの意味を調べた
コメント機能の実装する際に、comments_controllerにて以下の記述を行なった。
“`comments_controller.rb
class CommentsController < ApplicationController def create comment = current_user.comments.new(comment_params) if comment.save redirect_to board_path(comment.board),success: t('.success', item: Comment.model_name.human) else redirect_to board_path(comment.board),danger: t('.fail', item: Comment.model_name.human) end end def destroy comment = current_user.comments.find_by(id: param
rails7へのバージョンアップを安全に行うために使用するnew_framework_defaults_7_0.rbの各項目をさらっと解説
# new_framework_defaults_7_0.rbとは
railsバージョンアップの工程で、`rails app:update`コマンドを実行すると、`config/initializers/new_framework_defaults_7_0.rb`と言うファイルが作成されます。
このファイルにはrails6.1から7.0へのバージョンアップにおいて変更されるアプリケーションの設定値が書かれています。
設定値毎にコメントアウトを外していくとその箇所だけ新しい設定に変更できるので、部分的に変更を行うことが可能です。# 使い方
**1. `config/application.rb`で`config.load_defaults`を`6.1`に指定しておく**
railsのgem自体は7.0をインストールしておきますが、`config.load_defaults`を`6.1`に指定しておくことで設定は6.1の値を読み込む様にしておきます。
**2. `config/initializers/new_framework_defaults_7_0.rb`のコメントアウト