- 0.0.1. Railsのバージョンアップ時にCSRFトークンに悩まされた話
- 0.0.2. 【RSpec】基本的なRSpec導入手順
- 0.0.3. graphql-rubyで入力値バリデーションをカスタマイズする
- 0.0.4. rails cでの記述map,ppについて
- 0.0.5. 新規投稿時にundefined method `upload’ for nil:NilClassエラーについて
- 0.0.6. Psych::BadAlias: Unknown alias: defaultというエラーの対処法
- 0.0.7. rollback transactionの原因の解決方法
- 0.0.8. 『個人開発』行きたい場所をストックしよう 「ココイコApp」
- 0.0.9. 【個人開発】正規表現を学ぶ狩りに出ませんか?モンスターを倒しながら正規表現が学べるゲーム「Regex Hunting」を作りました
- 0.0.10. 【開発未経験】Railsでサ活(サウナ活動)を管理できるアプリを作成しました。
- 0.0.11. 【Rails】1つのform_withで複数のテーブルに保存をかける
- 0.0.12. deviseを使用時に名前を表示できない時の解決方法
- 1. Users#show
- 1.0.1. 【超簡単】RubyonRails 投稿時間をInstagramのようにする 〜 ◯日前,◯時間前,◯分前 〜
- 1.0.2. WindowsでのVagrantを用いたRails6環境構築
- 1.0.3. さくらvpsにRailsアプリをデプロイするまで (4) Homebrew導入
- 1.0.4. Rails x Nuxt.jsのSPAをECSのfargateへデプロイする際にハマったこと・その対処法
- 1.0.5. プロジェクトのgem, 端末にインストールされるgem,どっちを使うか指定する方法
- 1.0.6. ActiveSupport::Concernでモジュールを作る
- 1.0.7. 【Rails エラー】 NameError (uninitialized constant クラス名)
- 1.0.8. rails db:seed 重複データを削除する方法
Railsのバージョンアップ時にCSRFトークンに悩まされた話
Railsを使用していると、普段何気なく運用しているCSRFという仕組み。
このCSRFについて、Railsのバージョンアップ時に苦戦した経緯がありましたのでシェアしたいと思います。
そもそもCSRFとは?という方については、下記に分かりやすく解説してくれている記事がありますのでそちらを参考にして頂ければと思います。
[RailsのCSRF対策について](https://qiita.com/eshow/items/915f8e8ad317aa8e49a6)### Railsのバージョンによって生成されるCSRFトークンが異なる
今回のバージョンアップではRailsを6.1→7.0に上げたのですが、この旧バージョンと新バージョンで生成されるCSRFトークンが異なります。どのような違いかというと、旧バージョンでは通常のBase64でトークンがエンコードされるのに対し、新バージョンではURLセーフなBase64でエンコードするようになりました。
そしてこのトークンが異なる状態で、ページ遷移するとArgumentErrorを引き起こします。(この時は旧バージョンから新バージョン、新バージョ
【RSpec】基本的なRSpec導入手順
## はじめに
超初歩的なRSpec導入部分のみです
実践はしてませんのでご注意ください## 環境
Rails: 6.1.4
Ruby: 2.6.3
RSpec: 3.10
rspec-rails: 5.0.1## 手順
1.Gemfileに記述“`ruby:Gemfile.rb
:
:
group :test do
gem ‘capybara’
gem ‘rspec-rails’
gem “factory_bot_rails”
gem ‘faker’
end
:
end
“`
“`terminal:terminal
bundle install
“`
2.↓必要なファイルをインストールする“`terminal:terminal
rails g rspec:install
“`
3.specフォルダにfactoriesフォルダを作成
↓
factoriesフォルダの中にモデル名.rbを作成
例)book.rbやarticle.rbなど4.テストデータを定義する
“`ruby:spec/fact
graphql-rubyで入力値バリデーションをカスタマイズする
# 背景とやりたいこと
graphql-rubyにはargumentに対して[バリデーション](https://graphql-ruby.org/fields/validation.html)をかけることができるのですが、
愚直にやると以下のようなpathとlocations付きの形式でエラーが返ってきます。
参考: [https://graphql-ruby.org/errors/execution_errors#adding-errors-to-the-array](https://graphql-ruby.org/errors/execution_errors#adding-errors-to-the-array)
“`json
{
“errors”: [
{
“message”: “Can’t continue with this query”,
“locations”: [
{
“line”: 2,
“column”: 10,
}
],
rails cでの記述map,ppについて
## 残しておきたい内容
メンターの方に質問した際にrails cをしている際に気になる記述をしていたので調べて自分の記録用として残しておこうと思います。## map
each文のようにモデルの内容を順番に表示できる
配列変数.map {|変数名| 具体的な処理 }
“`
2.6.3 :002 > Dish.all.map{|d|d.dish_image}
“`
“`
2.6.3 :002 > Dish.all.map{|d|d.dish_image}
Dish Load (0.2ms) SELECT “dishes”.* FROM “dishes”
=> [#
新規投稿時にundefined method `upload’ for nil:NilClassエラーについて
## 解決したいこと
料理投稿サイトで新規投稿画面にてタイトル、紹介文、画像の情報を入力し新規投稿したところundefined method `upload’ for nil:NilClassエラーが出て解決をしたい。
前提・・・Active Strage導入済## 試して見たこと
データの流れを確認するためにテーブル、モデル、コントローラの記述を一通り確認。
=>これといった間違いはないような感じが。モデルにも has_one_attachedの記述があり問題はなさそう。
コントローラもストロングパラメータは大丈夫。*/CookOP/app/models/dish.rb
“`ruby
class Dish < ApplicationRecord has_one_attached :dish_image belongs_to :user#, optional: true has_many :comments, dependent: :destroy has_many :favorits, dependent: :destroy end ``` */Cook
Psych::BadAlias: Unknown alias: defaultというエラーの対処法
開発環境
mac OS バージョン11.6
エディタ
VScode# やりたいこと
rails db:migrateやrails s -b 0.0.0.0などのrailsコマンドを実行しようとすると下記のエラーになる。# エラー内容
“`
# rails db:migrate
Calling `DidYouMean::SPELL_CHECKERS.merge!(error_name => spell_checker)’ has been deprecated. Please call `DidYouMean.correct_error(error_name, spell_checker)’ instead.
Rails couldn’t infer whether you are using multiple databases from your database.yml and can’t generate the tasks for the non-primary databases. If you’d like to use this feature, please
rollback transactionの原因の解決方法
## 解決したいこと
ユーザーが写真付きの記事を投稿した際にターミナルでrollback transactionのエラーが表示され、DBに保存ができない状態を解決したいです。
## 解決するために試したこと
1、 rollback transactionのエラーについて気になったので調べました。
簡単にいうと保存するためのカラムの培養が不足しておりsaveができない状態とのこと。2、 コントローラのcreateアクションにある@dish.saveの記述を@dish.save!にすることでエラーの内容が表示されるとのことでそちらも試して見たところ「Validation failed: User must exist」エラーが出ました。直訳すると「バリデーションに失敗しました。ユーザーは存在しなければなりません」となりました。Userモデルに値が入っていないためバリデーションで弾かれていた様子。
3、 2で出てきたエラー「Validation failed: User must exist」を調べると解決の鍵となる内容の記事に出会いました。
## 解決方法
optiona
『個人開発』行きたい場所をストックしよう 「ココイコApp」
## はじめに
![スクリーンショット 2022-04-10 21.33.21.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1390680/81bd3e80-3d80-8506-5a30-61f7ea5fd451.png)
ここ行こ?
コロナが終わったらね。
いつしか行きたかった場所を忘れてしまう。を解決するアプリ「ココイコ」をリリースしました!!## サービス開発の経緯
大学生でエンジニア長期インターンに挑戦したく、ポートフォリオを作りたかった
どんなものを作ろうかと考えていた時期に、コロナが終わったらここ行こうね!!と話していた場所
をすっかり忘れていたことに気がついた
世の中の多くの人が、「ここ行きたい!! 」「コロナが終わったらね。」という会話をしているのではないかと考えたこんな感じ?
![sp-kokoiko-qiita.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1390680/dceaa79
【個人開発】正規表現を学ぶ狩りに出ませんか?モンスターを倒しながら正規表現が学べるゲーム「Regex Hunting」を作りました
## はじめに
はじめまして!
個人開発者の[ハガユウキ](https://twitter.com/KvOKJo6SH85w2Q8)と申します。突然ですが、皆さん正規表現はお好きですか?
私は好きです。「複数の文字列を一つのパターンで表現できる」部分にすごく面白味を感じています。
もっといろんな方に正規表現を知っていただきたい、好きになってほしいと思っています。しかし、現状では2つの課題があると感じています。
– 正規表現の勉強自体がそもそも面白くない。
– 正規表現を勉強しても、しばらく使わないと忘れる。この2つの課題を突破できるサービスは、現状存在しません。
そのため、楽しみながら正規表現を学べるサービスがあれば良いなと思いました。**作りました。**
▼スライド型正規表現学習ゲーム【Regex Hunting】
https://www.regex-hunting.com/
(※) 端末はPC、ブラウザはChromeが推奨です。
![ogp.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.co
【開発未経験】Railsでサ活(サウナ活動)を管理できるアプリを作成しました。
# 1.はじめに
本記事を閲覧いただきありがとうございます!
転職活動用のポートフォリオとしてRailsでサ活(サウナ活動)の記録を管理するためのアプリを作りました。この記事はアプリの紹介や作成した経緯をまとめたものです。## 自己紹介
– メーカー勤務の24歳。4月で新卒3年目になりました
– 働きながら毎日プログラミング学習中
– サウナとサッカーが大好き# 2.作成したアプリについて
サウナ好きがサ活(サウナ・水風呂・外気浴の時間)を記録して管理するためのアプリです。
– アプリ名: **『ととのい』**– アプリURL: https://totonoi.org/
– GithubURL: https://github.com/matsuken314/onsen_appホーム画面からゲストログインできます。(その他、新規登録画面からも可能です。)
![guestlogin.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1584967/bd92403f-750e-2f50-3801
【Rails】1つのform_withで複数のテーブルに保存をかける
こんにちは。
既存の投稿フォームからジャンル情報を保存できるように
form_withを加筆修正することになりました。
その際様々な記事を参考にさせていただきましたが、
中々に上手くいかず多くの時間を溶かしました。
非常に非常に非常に苦労を要したので、ここにアウトプットし
知識の整理と共に同じく苦労している人の一助となればいいなと思います!尚、今回試行錯誤を繰り返して実装したので
指摘箇所がございましたらご教授いただけますと幸いです。## :ok_woman: 対象
– 一つの`form_with`で複数のテーブルに保存をかけたい。
– `accepts_nested_attributes_for`を使用せずに実装したい。
– `to_model`を使用せずに実装したい。
– Form Objectで実装したいけど、詰まっている。## :rolling_eyes: はじめに
前提として、通常の新規投稿と編集削除ができる状態からスタートします。
また、今回は`CarrierWave`と`Devise`を使用しており、それらの実装などは省略いたします。
Railsバージョ
deviseを使用時に名前を表示できない時の解決方法
## 困っていたこと
以下のコントローラ、ビューの記述でサインイン後ユーザのnameが表示されると思っていましたが表示されません。
rails cなどで調べるとそもそも新規登録時に名前が保存できていませんでした。*users_controller.rb
“`ruby
def show
@user = User.find(params[:id])end
“`
*/users/show.html.erb
“`rubyUsers#show
<%= @user.name %>
“`userテーブルにもnameの記述をしているしどこが原因を調べていました。
“`ruby
create_table “users”, force: :cascade do |t|
t.string “email”, default: “”, null: false
t.string “encrypted_password”, default: “”, null: false
t.string “reset_password_
【超簡単】RubyonRails 投稿時間をInstagramのようにする 〜 ◯日前,◯時間前,◯分前 〜
# はじめに
とっても雑な記事ですが、少しでも誰かに役に立てばと思い記事にしました。## 前提
簡単な投稿機能が実装済みであること
Railsの基礎的な知識を身につけていること## 実装方法
### コントローラー
投稿時間を計算するために、コントローラーで今日の日付や、現在時刻を取得します。“`tweets_controller.rb
class TweetsController < ApplicationController def index @today = Date.today #今日の日付を取得 @now = Time.now #現在時刻を取得 @tweets = Tweet.all #tweeetsテーブルの全レコードを取得 end (略) ・ ・ ・ end ``` ### ビュー 投稿時間に関するところの解説は下に記載しております。 ```erb:tweets/index.html.erb<% @tweets.each do |t| %>WindowsでのVagrantを用いたRails6環境構築
# 初めに
ローカルでRailsの環境構築を行いCloud9(AWSの統合開発環境)の環境をローカルで再現したかったが、Rails5とRails6を切り替えて開発を行いたい・という背景と仮想環境はかっこいい!!という安直な発想からVagrantを用いて環境構築を行うこととした。
今回はRails6の環境構築を行います。
間違えたことをしていたらコメントにてご指摘いただけれると大変助かります。# 使用環境
Windows 10# Vagrantで構築したい環境
大雑把に以下の構成で構築したいと考えています。
– ruby 2.6
– rails 6.1.4
– ImageMagick
– sqlite
– mysql(本番環境用)
– Node.js 16
またrailsではjavascriptランタイムが必要になるためNode.jsのインストールも行います。# 手順
目次になっているので以下を参考にしてください
1. [VirtualboxとVagrantのダウンロード](#1-virtualboxとvagrantのダウンロード)
1. [Vagrantを用いたCentOSさくらvpsにRailsアプリをデプロイするまで (4) Homebrew導入
# 1. Homebrewを入れたい
ローカルと同様に、さくらvpsにもHomebrewを入れてみようと思った。ひとまず公式ページから以下の文面をコピペしてやってみる。https://brew.sh/index_ja
“`
# /bin/bash -c “$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)”
“`そうするとエラーが出た。
“`
略….
curl: (1) Protocol “https” not supported or disabled in libcurl
“`curlがhttpsに対応してないらしい。なんと。ためしに`curl -V` とやるといっぱいでてきたけどhttpsの文字はなかった。
コピーをとってなかったが、たしか初期にあったバージョンはcurl v 7.2くらいだった。yumでcurlのバージョンアップをしようとしたが、バージョンが上がらなかった。どうしよう。パッケージからやっていくことにした。
# 2.
Rails x Nuxt.jsのSPAをECSのfargateへデプロイする際にハマったこと・その対処法
## はじめに
[こちらの記事](https://zenn.dev/hibriiiiidge/books/49ee4063b10cec1df1a2/viewer/2ac314f5633e674d4b0c)を参考にデプロイしてハマったこととその対処法を備忘録として書いていきます# 1. Zeitwerk::NameError
Railsアプリのタスクが起動せず以下エラーが発生
“`
Unable to load application: Zeitwerk::NameError: expected file /app/app/controllers/hoges_controller.rb to define constant HogesController, but didn’t
“`
ディレクトリ構成が`controllers/v1/コントローラのファイル`となってるところを、1つ上を読み込んでしまっている状態## 対処法
application.rbに以下を追加
“`:api/config/application.rb
config.autoloader = :classプロジェクトのgem, 端末にインストールされるgem,どっちを使うか指定する方法
## gemとは?
2つの意味があります。
1. **Rubyのライブラリ** のことです。詳細は[こちら。](https://www.ruby-lang.org/ja/libraries/)
1. **gemを管理するパッケージ管理ツール**の名前ただ、gemというツールでパッケージを管理すると、依存関係で問題が発生することがあります。
そこでBundlerが登場します。## bundlerとは?
依存関係を考慮してgemを管理してくれるパッケージ管理ツールです。
https://bundler.io## Gemのインストール方法は大きく2種類
1. 端末全体で使えるタイプ(globalインストール)
mac,windows内のどこでも使えるようになる。
1. プロジェクト(特定の階層)でのみ使えるタイプ(localインストール)
作っているアプリの中で使えるようになる。# 結論
### `bundle exec`をつける = ローカルインストールのgemが呼ばれる
例)
“`
bundle exec rails g controller users
“ActiveSupport::Concernでモジュールを作る
## Concernとは
Concerntとは「関心事」という意味で、Railsではコントローラやモデルの一部の概念や機能を実装するモジュールのことを指します。Concernを用いることで、ある特定の概念や機能をコントローラやモデルから切り出すことができ、複数のコントローラやモデル間で使い回すことができます。クラス、モジュール間のincludeやextendの説明はここでは省きます。## スコープ
以下のようにPhotoモデルとVideoモデルに共通のスコープが定義されていたとします。“`ruby:photo.rb
class Photo < ApplicationRecord scope :display_member_only, -> { where(member_only: true) }
end
“`“`ruby:video.rb
class Video < ApplicationRecord scope :display_member_only, -> { where(member_only: true) }
end
“`このとき、以下
【Rails エラー】 NameError (uninitialized constant クラス名)
Rails cで、Rails: NameError (uninitialized constant クラス名)のエラーに遭遇。
以下を試したところエラーが消えました。
“`
$ exit #rails cから一旦出る
$ spring stop
$ rails c #もう一度、rails c
“`rails db:seed 重複データを削除する方法
rails db:seedは上書きされると勘違いしており、
rails cで確認するとデータが重複していた。
データベースの中身をリセットしてから、再度 rails db:seedを実行する。“`
$ rails db:seed:reset
“`“`
$ rails db:seed
“`関連する記事
OTHERカテゴリの最新記事
- 2024.09.21
iOS関連のことを調べてみた
- 2024.09.21
JavaScript関連のことを調べてみた
- 2024.09.21
JAVA関連のことを調べてみた
- 2024.09.21
Rails関連のことを調べてみた
- 2024.09.21
Lambda関連のことを調べてみた
- 2024.09.21
Python関連のことを調べてみた