- 1. 【初心者向け】Railsでテストコードを書くときにテストデータにidをベタ書きするのはやめよう
- 2. jbuilderでjson.statusとして返却しようとするとrspecでhttp response statusが0で返却された問題
- 3. letter_opener_web設定
- 4. CSVファイルを検証する
- 5. プロを目指す人のためのRuby入門を読んで
- 6. rails7.1 + MySQLの環境構築をdockerで行う
- 7. Docker で rails のプロジェクトを作成する手順(PostgreSQL)
- 8. 【Rails】カラムにNOT NULL制約を追加する方法
- 9. docker-compose環境のrailsをpry-byebugを使ってデバッグする
- 10. 【Rails】delegateの使い方
- 11. 【Rails】カラムのデフォルト値を変更する
- 12. 【Ruby on rails】boolean型って便利!
- 13. 【Ruby on rails】戻るボタンの実装
- 14. RailsでCSV出力機能の実装時にハマったポイント
- 15. 【個人開発】身近な人への孝行を投稿するサービスを作りました。
- 16. 【Rails】i18n化する時のymlファイルの構成について
- 17. Rails DeviseのReply-Toを消す
- 18. 【超簡単!】RailsアプリでOGPを動的に変更する方法
- 19. コメントを投稿機能の流れと注意点
- 20. ぼっち演算子について(&.)【self, レシーバについても触れてみる】
【初心者向け】Railsでテストコードを書くときにテストデータにidをベタ書きするのはやめよう
## はじめに:idはベタ書きするな!
テストコードを書くのに慣れていない初心者の方のコードレビューをしていると、次のような方法でテストデータを作っているのをよく見かけます。
“`ruby
# これはNGなコードです!!
alice = FactoryBot.create(:user, id: 1)
alice_report = FactoryBot.create(:report, user_id: 1)bob = FactoryBot.create(:user, id: 2)
bob_report = FactoryBot.create(:report, user_id: 2)# 以下、テストコードが続く
“`上のコードは何がまずいかわかるでしょうか?それは`id: 1`や`user_id: 1`のように、直接idをベタ書きしている点です。
## なんでidをベタ書きしちゃダメなの?
初心者さんの気持ちをエスパーすると、idをベタ書きするのはモデル同士のデータの関連を指定したいからだと思います。
たとえば、上のコードではaliceというユーザーとaliceが書
jbuilderでjson.statusとして返却しようとするとrspecでhttp response statusが0で返却された問題
原因は分かっていないが、rails, grape, jbuilderを利用している際にresponse.statusだけ0になってしまう問題に直面した。
jsonのresponse等は問題無かった。“`ruby
# grape apiclass Api::V1::Order < Grape::API get "/status", jbuilder: "v1/order/status.jbuilder" do @status = true end end ``` ```ruby: v1/order/status.jbuilder json.status @status ``` ```ruby: order_spec.rb describe Api::V1::Order, type: :request do describe '#status' do subject { get "v1/order/status", header: header } let(:header) { ... } it 'true' do su
letter_opener_web設定
railsを使ってメールを送信するまでの手順です。
## 環境
`rails 6.1.7.6`
`ruby 3.0.6`
`letter_opener_web 2.0.0`## 手順
1. `letter_opener_web`インストール
1. Mailer設定
1. mailerジェネレーター実行
1. ビュー編集### `letter_opener_web`インストール
devleopment環境だけしか使わないので環境を限定してインストールします。“`ruby:Gemfile
group :development, :test do
gem ‘letter_opener_web’, ‘~> 2.0’
end
“`### routes編集
`letter_opener_web`のUIを確認できるパスを設定します。“`rb:config/routes.rb
if Rails.env.development?
mount LetterOpenerWeb::Engine, at: “/letter_opener”
end
“`
CSVファイルを検証する
# 背景+まとめ
CSVデータを使って、データ登録・更新を行う機能をRSpecでテストする場合にちょっと工夫が必要だった箇所をメモしてます。
例えば、CSVデータの値で更新されているか?をチェックする場合、更新後のデータの比較にCSVデータ自体を用いることで後の変更が容易な記述にすることができます。# CSV.table
`CSV.table`が使いやすくて便利だった。
“`:users.csv
code,email,gender,status
“001”,test@example.com,1,1
“002”,test2@example.com,1,2
“`
“`ruby
file_path = “users.csv”
users_csv_table = CSV.table(file_path)# 配列で出力
users_csv_table.to_a
=> [[:code, :email, :gender, :status], [1, “test@example.com”, 1, 1], [2, “test2@example.com”, 1, 2]]# hea
プロを目指す人のためのRuby入門を読んで
# はじめに
今回はRubyの定番参考書、
**プロを目指す人のためのRuby入門(通称チェリー本)** を読了したのでその感想を書かせていただきます。https://www.amazon.co.jp/%E3%83%97%E3%83%AD%E3%82%92%E7%9B%AE%E6%8C%87%E3%81%99%E4%BA%BA%E3%81%AE%E3%81%9F%E3%82%81%E3%81%AERuby%E5%85%A5%E9%96%80-%E6%94%B9%E8%A8%822%E7%89%88-%E8%A8%80%E8%AA%9E%E4%BB%95%E6%A7%98%E3%81%8B%E3%82%89%E3%83%86%E3%82%B9%E3%83%88%E9%A7%86%E5%8B%95%E9%96%8B%E7%99%BA%E3%83%BB%E3%83%87%E3%83%90%E3%83%83%E3%82%B0%E6%8A%80%E6%B3%95%E3%81%BE%E3%81%A7-Software-Design/dp/4297124378/ref=sr_1_2_sspa?_
rails7.1 + MySQLの環境構築をdockerで行う
# 本ページは
rails + MySQLをコンテナ上で動かせるようにする。railsはweb単体では動かせないので、今回構築するのが最小限の環境になる。
* rails: 7.1.1
* ruby: 3.1.4
* MySQL: 5.7案件で開発環境を0から作る機会なんてそうそうないと思うので、1回自分のPCでやってみましょう。色々と学びが深いはず。
# ローカル環境
* mac(proの中では最弱)
![スクリーンショット 2023-10-15 1.53.34.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/948431/0eed060c-fb83-24f7-37ca-4c84581ea498.png)
* docker-compose: v2.22.0-desktop.2
* docker-engine: 24.0.6dockerさえ入っていれば、linuxでもwindowsでも手順は基本同じ。windowsの場合は適宜コマンドを読み替えて下さい。
# 流れ
1. ディレクトリ、各種設定フ
Docker で rails のプロジェクトを作成する手順(PostgreSQL)
Docker で rails プロジェクトを作成して起動できるまでの手順です。
WEB で調べると何種類かやり方が出てくるのですが、作成されるプロジェクトのバージョンが意図したものが作れなかったり、手順通りにしてもすんなり起動できなったりとしっくりくるものがありませんでした。手順通りにしてもすんなり起動できない場合にエラーを理解して自分で対処することもできず困っていました。
そもそも Docker や rails についても初学者であるため、まずは基本的な構築方法を習得し、そこからカスタマイズして理解したいと思ったので基本的な状態でのプロジェクトの起動手順をまとめました。この手順の目的は rails プロジェクトを新規作成し、その状態で起動確認できるところまでなので、この手順通りに作成したプロジェクトをそのまま使うのではなく、あくまで基礎としてプロジェクトに合わせてカスタマイズするためのものです。
最初からプロジェクトに合わせた設定をして構築できればいいのですが、そもそも起動できる状態のものがなければカスタマイズできないので、その素体として使用します。
### 作成するプロ
【Rails】カラムにNOT NULL制約を追加する方法
カラムにNOT NULL制約を追加するにはマイグレーションファイルに以下のように記述します。
“`rb
def change
change_column_null :テーブル名, :カラム名, false
end“`
`users`テーブルの`is_sample`カラムにNOT NULL制約を追加する場合は以下のようになります。
“`rb
def change
change_column_null :users, :is_sample, false
end“`
docker-compose環境のrailsをpry-byebugを使ってデバッグする
## はじめに
docker-composeを使ったrails環境のデバッグ方法のメモです。## 環境
`rails 6.1.7.6`
`ruby 3.0.6`
`pry-byebug 3.10.1`## 手順
1. `pry-byebug`インストール
1. docker-compose.yml編集
1. binding.pry挿入
1. docker-compose up
1. docker attach### `pry-byebug`インストール
development環境にインストールします。“`ruby:Gemfile
group :development do
gem ‘pry-byebug’
end
“`### docker-compose編集
以下の2行をdocker-compose.ymlに追記します。“`yml:docker-compose.yml
tty: true
stdin_open: true
“`編集したらデバッグしたい場所に`binding.pry`を挿入し、`docker-compose up`です。
###
【Rails】delegateの使い方
# はじめに
Railsで便利な書き方をおしえてもらったので記録に残します。# やりたいこと
usersテーブルとuser_profilesテーブルが存在
一対一の関係。
`User`クラスからuser_profilesのnameカラムを参照したい場合に
、最初は以下の書き方をしていました。“`user.rb
class User < ApplicationRecord has_one :user_profile def name user_profile.name end end ``` ```sample.rb # 以下でよびだせる @user = User.new @user.name ``` # 結論 ```user.rb class User < ApplicationRecord has_one :user_profile delegate :name, to: :user_profile end ``` ```sample.rb # 以下でよびだせる @user = User.new @user.name ``` 呼び出
【Rails】カラムのデフォルト値を変更する
カラムのデフォルト値を変更するにはマイグレーションファイルに以下のように記述します。
“`rb
def change
change_column_default テーブル名, カラム名, from: 元のデフォルト値, to: 変更後のデフォルト値
end“`
`users`テーブルの`is_sample`カラムのデフォルト値を`false`から`true`に変更する場合は以下のようになります。
“`rb
def change
change_column_default :users, :is_sample, from: false, to: true
end“`
【Ruby on rails】boolean型って便利!
# はじめに
プログラミングを勉強して2か月ほどです。
初心者なので間違っているところがあれば、ご指摘いただけると幸いです。# そもそもboolean型ってなに?
この型は、二つの値しか持たないことが特徴です。boolean型では、値を「真 (true)」または「偽 (false)」で表示します。真は通常1や真の値(true)、偽は通常0や偽の値(false)と表現されます。boolean型の詳しい内容については、@mmaumtjgj(kamin_k)さんの記事で記載されています。
分かりやすく解説されているので、ぜひ読んでみてください。https://qiita.com/mmaumtjgj/items/b9b04ea64e30a16569fe
# boolean型を使ってできること
boolean型は上記の通り、「true」か「false」で表します。例えるなら、スイッチの「オン」と「オフ」同じような機能です。
この機能と条件分岐を組み合わせることで、見た目上でもスイッチのようにオンとオフを表すことができます。それでは、実際にboolean型を使用して実装してい
【Ruby on rails】戻るボタンの実装
# はじめに
プログラミングを勉強して2か月ほどです。
初心者なので間違っているところがあれば、ご指摘いただけると幸いです。# 戻るボタンを実装したい
戻るボタンを実装するとなった時にまず思いつくことが、
`<%= link_to 'Back', root_path %>`のようにパスを指定することで実装すると思います。しかし、このパス指定では、今表示されているページから一つ前のページに戻ることはできません。
こんな時に便利なのが下記の記述です。
`<%= link_to '戻る', 'javascript:history.back()' %>`
ブラウザの履歴を記憶し、前のページに戻ってくれます。どのページからでも飛べるページがあり、そこに戻るボタンを表示したい場合はこの記述が有効になると思います。
# 終わりに
分かりづらい点が多かったと思いますが、最後まで読んでいただきありがとうございました!!
すごく便利な機能だと思うので、みなさんのアプリでも使ってみてください!
RailsでCSV出力機能の実装時にハマったポイント
# はじめに
RailsでCSV出力機能は定番化されているが、少しハマったポイントを整理していく# 実装内容
“`:controller
require ‘csv’def export
reports = (APIにリクエストしてデータを取得)
generate_csv(reports)
endprivate
def generate_csv(reports)
csv_data = CSV.generate(encoding: Encoding::SJIS, row_sep: “\r\n”, force_quotes: true) do |csv|
csv << reports[0].keys reports.each do |report| csv << report.values end end filename = "reports_#{Ti
【個人開発】身近な人への孝行を投稿するサービスを作りました。
# はじめに
はじめまして、hibi_toshi([@hibi_toshi](https://twitter.com/hibi_toshi))と申します。WEBエンジニアへの転職を目指して学習しています。
今回はポートフォリオとしてサービスを開発しましたので、それについてアウトプットします。
コンセプトは **「孝行をもっと身近に、手軽に、カジュアルに。」** です。## 作成したサービス
**サービス名: [Cocoaer](https://web.cocoaer.net/) (Chromeのみ対応しています。)**
![Cocoaer_logo.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2918286/bf70f6bc-e6c3-c662-6982-a497794fcfa2.jpeg)サービスURL: https://web.cocoaer.net/
GitHub URL: https://github.com/hibi6toshi/cocoaer# サービスについて
## 開
【Rails】i18n化する時のymlファイルの構成について
## はじめに
現在、プログラミングスクールRUNTEQで未経験からWebエンジニア転職を目指して学習中のyushiと申します。
Railsについて学ぶ中でi18n対応をするためのymlファイルの構成について腑に落ちない部分があったので詳しく調べてみました。
:::note warn
プログラミング初学者のため、内容に誤りがある可能性がございます。
もし間違いがあればご指摘いただけると幸いです。
:::まずはざっくりとi18nについて抑えておきたいと思います。
## i18nとは?
アプリケーション内で使われる文字列を抽象化して言語ごとに訳文を定義してあげることで、動作する言語環境に応じてアプリケーション側で自動で翻訳するための仕組みです。
ビューに記載する文字列が特定の言語に依存せずに済むようになり、複数言語での開発や実行環境による差分を用意する手間を減らすことができます。
「internationalization」という単語が語源になっていて、最初の「i」と最後の「n」の間に18文字あることから「i18n」と呼ばれているそうです。
Railsにはデフォルトで
Rails DeviseのReply-Toを消す
# DeviseのデフォルトだとFromがReply-Toになる
デフォルト設定のままだとReply-ToにFromのアドレスが入ってしまう。
邪魔だなあ。どうにかしたいなあ。そんなあなたへの解です。![スクリーンショット_2023-09-06_16_39_48.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/147005/795c839c-4a46-244e-c55f-c12072ab89d0.png)
この状態のinitializerはこちら
“`config/initializers/devise.rb
Devise.setup do |config|
# ==> OmniAuth
# Add a new OmniAuth provider. Check the wiki for more information on setting
# up on your models and hooks.
google = Rails.application.secrets.goog
【超簡単!】RailsアプリでOGPを動的に変更する方法
# はじめに
こんにちは、プログラミングスクールRUNTEQにて、未経験からエンジニア転職を目指して学習中の[すずゆー](https://twitter.com/suzuyu_0115)と申します。今回はRailsでのWebアプリ開発において、OGPをページ毎に変化させる方法について説明していきます!
「SNSシェアする時に、投稿やページに応じて画像が変化するようなアプリを作りたい」「でもやり方がわからない…」
そんな方に初心者目線で分かりやすく伝わるように書かせていただきました。今回は解説にあたって、私の作成したWebアプリをベースに説明させていただきます。
https://meshitelog.com
[GitHubはこっち](https://github.com/suzuyu0115/meshitelog)
また、上記のサービスについて詳しくまとめている記事もございますので、お暇な方は拝見していただけると大変嬉しいです✨
https://qiita.com/suzuyu0115/items/6ca6ce071d0379467459
# OGPとは
###
コメントを投稿機能の流れと注意点
## はじめに
投稿した内容に対してコメントをつける機能を導入する時のRuby on railsの流れがわかりづらかったので、まとめてみました。
スクール初学生さんも同じところで悩まれる方も多いと思いますので参考にして頂ければなと思います。## 解決したい内容
投稿内容の詳細ページにコメントをつけるまでの流れを解説### 前提条件
今回は
投稿したツイートを prototype
投稿に対するコメントを comment
とします。## 全体の流れ
①まず初めにprototypeコントローラーのshowアクションにて@commentに空のインスタンスを生成“`ruby
def show
@prototype = Prototype.find(params[:id])
@comment = Comment.new
@comments = @prototype.comments.includes(:prototype)
end
“`
※ @prototypeは詳細画面を表示する情報があらかじめ入っていってshowのviewファイルに渡されるて
ぼっち演算子について(&.)【self, レシーバについても触れてみる】
## はじめに
現在、プログラミングスクールにて、主にRubyやRuby on Railsを勉強している者です。
Railsのコードの中で、ぼっち演算子を見かけた際に、調べれば調べるほどRubyへの理解が乏しいと感じたため、記事にさせていただきました。## ぼっち演算子とは
ぼっち演算子(セーフナビゲーション演算子とも呼ばれる)とは、「&.」という記号で表されるRubyの演算子となります。この演算子を使用することで、オブジェクトがnilの場合にメソッド呼び出しを安全にスキップすることができます。
ちなみに、ぼっち演算子はRubyの2.3から実装された機能です。## 安全にスキップできるとは?
Rubyでは、オブジェクトに紐づいたメソッドを呼び出そうとしたとき、そのオブジェクトがnilだった場合にNoMethodErrorという名前のエラーが発生します。
ぼっち演算子を使用することで、そのオブジェクトがnilだった場合に、紐づいたメソッドを実行することなく、nilを返すことができ、NoMethodError になることを防いでくれます。### NoMethodErrorの例(