- 1. RubyもRailsもSQLも知らんC++erですがいきなり戦いを挑んでみた
- 2. 【Docker 】app_1 | Could not find (gem.lock名) エラーの解決方法
- 3. 予約可能と予約不可で色分けをする
- 4. railsでAjaxが上手く連動してくれない時の対処法の1つ
- 5. Railsで外部テーブルに条件をつけて数順で並び替える、外部テーブルにレコードがなくても表示する
- 6. around_actionで引数ありのメソッドをlambdaで指定する
- 7. コントローラーの単体テストコードの概念!
- 8. rakeファイルをRSpecでテストする
- 9. キーワード検索とタグ機能の両立
- 10. Rails render パーシャル locals collection asについてのメモ
- 11. Rspecまとめ
- 12. Google mapを使って住所検索できるようにした
- 13. 施設の営業時間を作成・登録する
- 14. Railsのテーブル要素にリンクをつけた
- 15. Railsでお気に入り機能をつけてみた
- 16. Migrationファイルを操作する
- 17. ransackで検索機能を追加する
- 18. Ruby on Railsで郵便番号から住所を自動入力する
- 19. deviseでログイン機能を追加する
- 20. Rubocop
RubyもRailsもSQLも知らんC++erですがいきなり戦いを挑んでみた
## はじめに
これまでC++、JavaScirpt、C#、Rustなどなどいろいろな言語を触ってきましたが、Rubyはほとんど触る機会がありませんでした。
またデータベースも`SELECT`文というのがあるくらいの知識しか持っていませんでした。ところでいろいろありお仕事で以下の新しい要素~~しかない~~に満ち溢れている領域への挑戦をすることになりました。
– Ruby
– Rails
– Active Record
– ActionView
– etc
– Rspec
– Factory Girl
– MySQL無事にRailsチョットワカルになれたと思うのでそこで得た知見をまとめてみようかと思います。
## 環境構築
環境構築のはまりポイントもあったのですが職場の手順書が改善されてしまったので(いいことだけど)、書くモチベがないので割愛します。
## haml入門
“`haml
– content_for :main_pane do
= render ‘new’, :setting => @foo_setting
= r
【Docker 】app_1 | Could not find (gem.lock名) エラーの解決方法
# 概要
docker × railsでdokcker compose upした際に**「Could not find (gem.lock名)〜」**というエラーが発生した。
bundle install 時にgemのインストールが失敗しているとのこと。別の人の環境では動いたので、記述は間違ってない。
dockerのvolumeを削除してみる。# 環境
・MacOS Apple M1 バージョン11.4
・Docker 20.10.7
・Ruby 2.5.9
・Rails 5.2.6# volumeとは
ボリュームとは、データを永続化できる場所のこと。
**「名前付きボリューム」**と**「匿名ボリューム」**があり、名前付きボリュームの場合は Docker ホスト内で名前解決できるため、アクセスしやすい。
匿名ボリュームは適当にハッシュ値が振られる。
他のプロセスからはさわれないので安全。基本はこれを使うのがよい。## dockerのvolumeの中身を見る
“`
% docker volume ls
“`“`
DRIVER VOLUME NAME
予約可能と予約不可で色分けをする
[1.はじめに](#1-はじめに)
[2.予約画面のイメージ](#2-予約画面のイメージ)
[3.実装](#3-実装)
[4.コード](#4-コード)
[5.おわりに](#5-おわりに)#1. はじめに
予約可能と予約不可で処理を分けたいと考えましたが、思った通りに行かなかったのと、検索しても記事が少なかったのでまとめます。
前提として、sheetの座席はマスターデータとしてDBに保存してあります。
予約テーブル(Reservations)と、座席テーブル(Sheet)が関連づけられています
予約テーブルは座席テーブルにidをsheet_idとして保持します。|Reservations| Sheet |
|:———–|————:|
| sheet_id | id |
| ・ | row |
| ・ |column |#2. 予約画面のイメージ
予約できる場合はオレンジ、予約不可の場合は色を暗くして視覚的にわかりやすくしています。
今回は映画館がモデ
railsでAjaxが上手く連動してくれない時の対処法の1つ
#railsとAjaxが上手く連動してくれない時の確認
現在railsでアプリケーションを作成していて非同期通信を導入しようとしていました。
ですが、何が原因なのか上手く動作する時としない時があり原因不明だったのですが、なんとか解決に導いてもらえたので整理しておくために記録します。“`ruby:jsファイル
function post (){
const submit = document.getElementById(“submit”);
submit.addEventListener(“click”, () => {
const form = document.getElementById(“form”);
const formData = new FormData(form);
const XHR = new XMLHttpRequest();
XHR.open(“POST”, “/posts”, true);
XHR.responseType = “json”;
XHR.send(formData);
});
}
Railsで外部テーブルに条件をつけて数順で並び替える、外部テーブルにレコードがなくても表示する
## 前提
投稿の`Post`モデルと、投稿を評価する`Evaluation`モデルがあり、
`evaluations`テーブルには`posts`の外部キー`post_id`がある`evaluation`には`status`というカラムがあり、enumで管理されており値は以下の通りである
“` models/evaluation.rb
enum status: {
bad: 0 ## 低評価
good: 1 ## 高評価
}
“`また、`post`は会員と管理者どちらでも投稿することができる
管理者が投稿する場合には`post.admin_id`に自分のidを入れる簡略化したschema情報は以下の通りである
“` schema.rb
create_table “posts”, options: “ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin”, force: :cascade do |t|
t.bigint “admin_id”
endcreat
around_actionで引数ありのメソッドをlambdaで指定する
## 概要
`around_action`に引数を持つメソッドを指定する際に無限に詰まったので同じ状況で困っている人のために残しておく。(最終的に上司に助けていただいて解決した。)
指定方法だけ知りたい人は`解決`までジャンプしてもらえれば書いてある。
## 状況
なぜ詰まったかというと、まずrailsでAction Controllerのフィルターを使用する際に引数を持つメソッドを指定する場合、ブロックを渡す必要がある。下記のようにしないとエラーが出てしまう。
“`rb
class HogeController < ApplicationController # 引数なしの場合 before_action :fuga # 引数ありの場合 before_action -> { fuga(x, y) }
end
“``before_action`と`after_action`を使用する場合は上記の記述で問題ないけど、`around_action`を使用する場合は1つ問題が発生する。
Railsガイドを読むと下記のように記述がある。
>「around系」
コントローラーの単体テストコードの概念!
#①.結論!
コントローラーのテストは、あるアクションにリクエストを送ったとき、想定通りのレスポンスが生成されるかどうかを確かめる!
という事です!
記述の際は、「リクエストとレスポンス」に着目したテストコードを記述します!
この時に、RSpecの中でもRequest Specと呼ばれる手法を利用します!
#②.Request Spec
RSpecが提供している、コントローラーのテストコードを書くために特化した手法です!
RSpecの導入が完了していれば使用できます!
ちなみに、コントローラーのテストコードは、結合テストコードに記述する内容と、同じような責務を果たすことが多いです!
#③.まとめ
簡単にいうと、Request Specはコントローラーのテストコードを書くことに特化している手法であること!
という事ですね!
記述などは、、また改めて細かく書いて説明するようにします!
何か説明で間違っていたらご指導お願い致します(_ _)
rakeファイルをRSpecでテストする
##環境
Ruby 3.0.2
Rails 6.1.4.1##設定
“`spec/rails_helper.rb
…
Dir[Rails.root.join(‘spec’, ‘support’, ‘**’, ‘*.rb’)].sort.each { |f| require f }
…
“`“`spec/rake_helper.rb
require ‘rake’
require ‘rails_helper’RSpec.configure do |config|
config.before(:suite) do
Rails.application.load_tasks
endconfig.before(:each) do
Rake.application.tasks.each(&:reenable)
end
end
“`spec下にファイルを作成し、いつものようにテストを書いていく。
“`spec/lib/tasks/XXXXX_spec.rb
require ‘rake_helper’describe ‘XXX
キーワード検索とタグ機能の両立
#前提
キーワード検索機能
GeekSalon教材7-1タグ検索機能
https://qiita.com/MandoNarin/items/5a5610a40c66f77d6c10以上を実装済み
#コード
“`posts_controller.rb
def index
@posts= Post.all
@tags = Tag.all
@posts = @posts.where(“body LIKE ? “,’%’ + params[:search] + ‘%’) if params[:search].present?
#もしタグ検索したら、post_idsにタグを持ったidをまとめてそのidで検索
if params[:tag_ids].present?
post_ids = []
params[:tag_ids].each do |key, value|
if value == “1”
Tag.find_by(name: key).posts.each do |p|
post_ids
Rails render パーシャル locals collection asについてのメモ
# 概要
・パーシャルではインスタンス変数を使用してはいけないのはなぜか
・locals」「collection」でローカル変数にしてパーシャルに渡す方法
・「as」オプション の使い方# パーシャルではインスタンス変数を使用してはいけないのはなぜか
### 結論
部分テンプレートの再利用性が低くなる為。
→依存度が高くなってしまうから**だから、ローカル変数にして渡す!!**
#「locals」「collection」でローカル変数にしてパーシャルに渡す方法
##ローカル変数を渡さず、ただパーシャルをrenderするとき
“`
<%= render 'ディレクトリ名/パーシャル名(「 _ 」は省略する)' %>
“`ex)
“`ruby:shared/_footer.html.erb