- 1. 最近思うrspecをシンプルにする書き方(オレ流)
- 2. 【Ruby on Rails】rails-latexを利用してPDFを作成
- 3. 私の新人研修はこんな感じでした。
- 4. rails モデルとは何か 初心者向け
- 5. 【ActiveRecord】JOIN したテーブルに条件を指定するときは merge を使おう【Tips】
- 6. devise_token_authを用いたユーザ登録時の「Unpermitted parameter: :registration」の対処
- 7. 【Ruby on Rails】ransackの関連を調べる方法
- 8. Rails及びDocker環境でのpry-railsのデバッグ方法
- 9. 【Ruby on Rails】検索結果のレコードを並び替える
- 10. Railsを久しぶりに触ったので整理してみた
- 11. バリデーションが発火するタイミングについて
- 12. 【Ruby on Rails】deviseの導入から実装するまで
- 13. 【Rails】Simple Calendar gem を使ってカレンダー機能作成
- 14. コントローラ#アクションとHTTPメソッド・ルーティングヘルパーの対応表
- 15. 【Rails】いいね機能index追加(resourceからresoucesへの変更)
- 16. 【ドメイン駆動設計】なぜ値オブジェクトそのものを比較できるようにしなければならないのか?
- 17. 【日付計算】Rubyで◯時間前、◯日前、◯ヶ月前、◯年前と計算するメソッド
- 18. Rails7でHelloWorld
- 19. Cloud9でRails7の環境構築を行う
- 20. GitHub を登録
最近思うrspecをシンプルにする書き方(オレ流)
# rspec書き方指南ではない
最近自分でやってみて、テストが意外に楽に書けるのではないかと思うやり方をまとめてみた。
ベストだとか唯一の書き方だとかそういう事を言いたいわけではない。各自自分の好きなやり方で書けばいいと思う。最終的には自分の書いたクラスがちゃんとテスト出来ていれば目的は達成している。個人的な主観としてテストは出来るだけシンプルにしたい。そうじゃないと個人的にテストを書くのが嫌になるし、テストが間違ってて、そもそも何をテストしてるのか?という事になりたくない。
と言うことを解決できるのではないかという投稿。### 要点
– クラス内のメソッド(処理)は出来るだけシンプルにしたい
– 一度しか呼ばれないようなロジックでもメソッドに落とし込みたい
– メソッドが増える分、内部のメソッドと外部向けのメソッドをちゃんと意識する
– itに説明は要らない
– テスト中に使用する変数内容は実際の条件を意識しない
– `subject`と`allow`をよく使う
– `expect(…).to have_received(…)`をよく使う
– `expect{.
【Ruby on Rails】rails-latexを利用してPDFを作成
# はじめに
Ruby on Railsで個人開発をした際に、gem [rails-latex](https://github.com/amagical-net/rails-latex)を使って、ユーザーが入力したTeXコードをコンパイルしてPDFを作成する機能を実装しました。
関連する記事があまりなかったので、どのようにしたのかを残そうと思います。# 設定
PDF作成には `LatexToPdf.generate_pdf(code, config)`メソッド([rubydoc](https://www.rubydoc.info/gems/rails-latex/2.3.0/LatexToPdf.generate_pdf))を利用するので、gemをインストール後、その設定を行います。初期設定は以下の通りです。
(注)「・・・」の部分は、`Users/・・・/(appのルートディレクトリ)`が入ります。“`
LatexToPdf.config
=>
{:recipe=>[],
:command=>”pdflatex”,
:arguments=>[“-ha
私の新人研修はこんな感じでした。
プログラミング未経験の新卒2人が、開発期間4週間で
「社員間で本を貸し借りできるアプリ」を作成しました!
このアプリは、社内の課題を解決するアプリを作成するという新人研修の成果なのですが、この開発の道中には多くの学びがありました。ここでは、この新人研修がどのように進んだのか、そして各段階で私が何を考えていたのかを書いていこうと思います。
# 目次
[1.研修の概要](##1-研修の概要)
[2.研修前の準備](##2-研修前の準備)
[3.テーマ決め](##3-テーマ決め)
[3.UI・UX設計](##3-UI・UX設計)
[4.計画立て](##4-計画立て)
[5.実装](##5-実装)
[6.リファクタリング](##6-リファクタリング)
[7.おわりに](##5-おわりに)##
rails モデルとは何か 初心者向け
# 始めに
現在プログラミング初学者でポートフォリオ作成中です。Modelの理解が曖昧なため自分の様な初心者にもわかりやすいようにまとめてみた。## まずは頑張って公式資料を見てみる
初学者にとって、本当に公式資料は読みにくい。流し読みではまず内容が理解することはできないだろうし、よく読んだとしても独特な言い回しと、見慣れない言葉で説明を受け頭の中はショート寸前となる。そのため、単語ひとつずつ丁寧に噛み砕いていこうと思う(私のために)。
[Ruby on Rails公式ページ](https://railsguides.jp/active_record_basics.html
)# モデルの説明の前に、、、
### `Active Record`とは、、、
`Active Record`とは
`Active Record`は簡単にデータベースとのやり取りを実現するための道具である。
私たちがよく作るモデル、例えばこれとか(Postモデル)
“`rb:Postmodel
class Post < ApplicationRecord end ``` よくみると`Post`は`A
【ActiveRecord】JOIN したテーブルに条件を指定するときは merge を使おう【Tips】
例として次のようなクラスがあると想定します。
“`ruby
class User < ApplicationRecord has_many :comments end class Article < ApplicationRecord belongs_to :user has_many :comments end class Comment < ApplicationRecord belongs_to :user belongs_to :article end ``` `item_type` が `"Article"` の `Comment` を持つユーザーを取得したい場合、 `joins` と `where` を使うと以下のようになります。 ```ruby User.joins(:comments).where(comments: { item_type: "Article" }) ``` これを `merge` を使って書き換えると次のようになります。 ```ruby User.joins(:comments).merge(Comment.wh
devise_token_authを用いたユーザ登録時の「Unpermitted parameter: :registration」の対処
# はじめに
vue.js + Ruby on Rails(apiモード)でユーザ登録機能を作成中に、以下のエラーが発生。
“`ruby
Processing by DeviseTokenAuth::RegistrationsController#create as HTML
Parameters: {“name”=>”dd”, “email”=>”dd@dd.com”, “password”=>”[FILTERED]”, “password_confirmation”=>”[FILTERED]”, “registration”=>{“name”=>”dd”, “email”=>”dd@dd.com”, “password”=>”[FILTERED]”, “password_confirmation”=>”[FILTERED]”}}
Unpermitted parameter: :registration
Unpermitted parameter: :registration
Unpermitted parameter: :registration
“`ユーザ登録時には、
【Ruby on Rails】ransackの関連を調べる方法
## やり方
rails consoleを開く。
“`ruby
[8] pry(main)> Gorira.ransackable_associations
=> [“corporation”, “user”, “articles”, “schools”, “shool_goriras”]
“`
こんな感じで“.ransackable_association“というものを使用すると関連を確かめることができる。
Rails及びDocker環境でのpry-railsのデバッグ方法
## なぜ記事を書こうと思ったか
Rails及びDocker環境でpry-railsでのデバッグをおこなったので、そのやり方を記載致します。
これまで、行っていたデバッグよりもより細かくコードを確認でき、すごく便利に感じたので、多くの方が使ってくれると嬉しいです。## Rails及びDocker環境でpry-railsでのデバッグ手順
**※Dockerは構築して、起動してある事を前提として記載致します。**
### デバッグ手順
1.Railsのコードで動作を止めて、確認したいコードの直後に`binding.pry`を追加します。
今回は例として、createメソッドのコードに付け足したいと思います。
“`
def create
permit_parameters = params.permit(:name, :age, :sex).to_h
binding.pryuser = User.create!(
name: permit_parameters[:name].to_i,
age: permit_para
【Ruby on Rails】検索結果のレコードを並び替える
# はじめに
レコードの検索・並び替え、それぞれを単独に行うのであれば容易にできますが、**検索結果のレコードを並び替える**となると、検索結果をどのように次のリクエストに引き継ぐのかが問題になります。個人開発で検索・並び替え機能を実装した際にこの点に悩んだので、誰かのお役に立てればというのと、自分の実装に問題があればご指摘いただけると嬉しいなということで、自分がどのように解決したかを残したいと思います:bow_tone1:# 前提
## どのように問題を解決するのか
HTTPはステートレスなプロトコルなため、複数のリクエスト間で状態を保持するためには何らかの方策が必要です。代表的なものにセッションとDBの利用がありますが、
– セッションを利用すると、ユーザーがアプリケーションから離脱した時なども検索条件が残り、次回検索・並び替えのときに条件が引き継がれるなど、個人的に気持ち悪い。
– 検索条件のような一時的なものをDBに保存するのは違和感がある。じゃあどうするか。
小森裕介(2010)『プロになるためのWeb技術入門』講談社の 「3.4 Webサーバーへの要求をどのように
Railsを久しぶりに触ったので整理してみた
## 概要
開発時に使用するメモを整理しました。## Rail APIモードでの始め方
1. `bundle init`
2. `gemfileを修正`
3. `bundle install`
4. `rails new . -d postgresql`
5. `gibo dump Rails macOS >> .gitignore`
6. `rails db:create`5番のgiboは.gitignoreを簡単に充実してくれるパッケージ。
`vendor/bundle`や`.DS_store`などをよしなに設定してくれる
`brew`経由でinstallした気がする 興味があれば調べてみてください## Model
DB関係の処理を担う## 新しいモデル・テーブルを作成
“`rb
# 引数を与えてmigrationの中身を埋める
rails g model User[任意のモデル名] name:string age:integer# Modelを作成
rails g model user(任意のモデル名)# 間違えたら下記で削除
rails d mod
バリデーションが発火するタイミングについて
RailsのActiveRecordにはDBの正しいデータだけを保存するためにバリデーションを行うための機能がああります。
通常はmodelにてバリデーションを実装するが、発火するタイミング、シチュエーションが曖昧だったので改めて調べてみました。# バリデーションが発火するタイミング
バリデーションはモデルを作成したから行われるわけではありません。
「**通常はSQLのデータベースへの送信前に行うもの**」です。railsで何かしらのクエリを発行して、SQが生成され、DBへの保存が行われるタイミングでバリデーションが発火します。# バリデーションが発火するシチュエーション
では、バリデーションはどのクエリを発行したら実行されるのでしょうか。[Rails Guide](https://railsguides.jp/active_record_validations.html)では以下のメソッド実行時にベリデーションが発火すると明記されています。– create
– create!
– save
– save!
– update
– update!railsのクエリには他に
【Ruby on Rails】deviseの導入から実装するまで
## 目標
deviseを導入し実行できるまで## 開発環境
ruby ‘3.1.2’
rails ‘7.0.3’## 実装
devise導入から、実装までの一連の流れ### deviseをインストール
“`Gemfile.
gem ‘devise’
“`
“`ターミナル.
% bundle install
“`% rails g devise:install
rails g deviseコマンドは、deviseによるユーザー機能の対象を指定することで、モデルとマイグレーションの生成やルーティングの設定などをまとめて処理します。実行すると、モデルが生成され、routes.rbにはdeviseに関連するパスが追加されます。
### Userモデルを作成
“`ターミナル.
% rails g devise user
“`
### マイグレーションファイルを編集
“`
class DeviseCreateUsers < ActiveRecord::Migration[6.0] def change create_table :users do |
【Rails】Simple Calendar gem を使ってカレンダー機能作成
カレンダー機能を実装した時の忘却防止メモ
公式リファレンスを参考にgemを追加
### Gem install
“`Gemfile.
gem “simple_calendar”, “~> 2.0”
“``bundle install`を実行
### css 適応
“`app/assets/stylesheets/application.css
*= require simple_calendar
“`### View表示
“`index.html.erb
<%= month_calendar do |date| %>
<%= date.day %>
<% end %>“`
![スクリーンショット 2022-07-31 12.02.34.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1799261/93345d85-fc2b-ef42-c08d-042
コントローラ#アクションとHTTPメソッド・ルーティングヘルパーの対応表
コントローラ#アクションとHTTPメソッド・ルーティングヘルパーの対応表です。
コントローラスペックをリクエストスペックで置き換える際に使ってください。| コントローラ#アクション | HTTPメソッド ルーティングヘルパー |
| :———————: | :——————————-: |
| articles#index | get articles_path |
| articles#new | get new_article_path |
| articles#create | post articles_path |
| articles#show | get article_path(:id) |
| articles#edit | get edit_article_path(:id)
【Rails】いいね機能index追加(resourceからresoucesへの変更)
# はじめに
先日、いいね機能を実装した。↓https://qiita.com/vaza__ta/items/c0bc7f590793ab5a4769
showテンプレートにいいねしたユーザー一覧を表示するようにしていたが、indexテンプレートを実装するよう変更する。
その際にroutes.rbでresource=>resourcesに変更した。
これにより、ルーティングの変更が発生するため、その修正すべき部分を解説していく。# 前提
下記のテーブルは作成済み。
users(ユーザー)
posts(投稿)
favorites(いいね)
| No | 項目 | 内容 |
|—:|————-|————|
| 1 | OS | Mac |
| 2 | Ruby | 2.6.3 |
| 3 | rails | 6.0.4 |# ルーティングを修正する
indexを追加するために、resouceをresourcesに変
【ドメイン駆動設計】なぜ値オブジェクトそのものを比較できるようにしなければならないのか?
値オブジェクトは以下の3つの要素を持ったオブジェクトだとされている。
1)不変である(一度インスタンスが作られたら、それが保有する属性の値は変化してはいけない)
2)交換が可能である(再代入=交換によってのみ値を変更することができる)
**3)等価性によって比較される**このうち、3)は絶対に必要なんだろうか?
例えば、Date型にかなり近い、YearMonth(年と月をもったオブジェクト)を定義してみよう。
“`ruby
class YearMonth
attr_reader :datedef initialize(year, month)
@date = Date.new(year, month, 1)
endend
“`一応値オブジェクトとして定義しているものの、「日付が1日のDate型オブジェクト」」としても外部から認識できる。なら、YearMonthそのものを比較できなくても、保有しているDate型(プリミティブ型)同士を比較すればいいんじゃないか?という疑問が生まれる。
実際にやってみよう。
“`ruby
year_mo
【日付計算】Rubyで◯時間前、◯日前、◯ヶ月前、◯年前と計算するメソッド
業務で更新日(updated_at)と今日の差分を計算して○日前と返すapiを作成することがあったのですが、この仕様とマッチする記事がなかったのでQiitaに残しておきます!
以下の記事を参考にさせていただきました。
基本的なロジックやコードの解説はこちらの記事を参考にしてください。[満経過月数を計算するロジック(Ruby)](https://qiita.com/tomoya_sakusaku/items/71801ad618394ca3cbc7 “満経過月数を計算するロジック(Ruby)”)
## 今回の仕様
**最終更新日から今日の差分を計算して○日前と返す**
『0~24時間前』 『1~30日前』 『1ヶ月~12ヶ月』 『1年~』の単位で区切る
例) Today:2022/07/30/10:00
Last_updated:2021/07/30/19:00
⇨『一年前』を返す例)Today:2022/07/30/10:00
Last_updated:2022/06/30/19:00
⇨『一ヶ月前』を返す例)Today:2022/07/30/19:00
Las
Rails7でHelloWorld
## 前提
– Rails(前回の記事で手順を記載しています)https://qiita.com/chiepon115/items/bc7bdab6105aa5836465
– DBに登録されたデータをControllerで取得し、Viewで表示するシンプルな内容になっています
## Controllerを作成
– `rails g controller users index`でUsersControllerを作成
– ApplicationControllerを継承しています
– `Hello, World`をブラウザに表示させます
– renderの行を追記します
“`ruby:app/controller/users_controller.rb
class UsersController <
Cloud9でRails7の環境構築を行う
## 前提
– 学習用途のRailsプロジェクトを想定しています
– Rubyの環境構築を行なっていること(前回の記事で手順を記載しています)https://qiita.com/chiepon115/items/eeea61818e0e8701f747
– Version
– Ruby 3.0.2
– Rails 7.0.0## Railsプロジェクトの作成
### Railsのインストール
– `gem install rails -v 7.0.0 -N`でRails7.0.0をインストール### Railsプロジェクトの作成
– `mkdir rails_projects`でRailsプロジェクト用フォルダを作成
– `rails _7.0.0_ new hello`でRailsプロジェクト作成
– Railsのバージョン7.0.0を指定してインストール
– `hello`という名前のプロジェクトで作成
GitHub を登録まずはユーザー名(GitHubに登録したもの)を登録
“`
$ git config –global usr.name “ユーザー名”
“`メールアドレス(GitHubに登録したもの)を登録
“`
$ git config –global user.email “メールアドレス”
“`mergeの際にファストフォワードが起きないようにする設定
“`
$ git config –global merge.ff false
“`pullの際に毎回リベースする設定
“`
$ git config –global pull.rebase merges
“`設定ができているかを確認
“`
$ git config –list
“`
↓
↓
“`
credential.helper=osxkeychain
user.name=”name”
user.email=email
core.editor=code –wait
alias.ci=commit
alias.st=status
alias.br=branch
alias.co=checkout