- 1. Sassとは
- 2. RailsからFirestoreをいじりたい
- 3. RSpecを導入して単体テストコードを記述する
- 4. Viewページで何度も使われている用語を一つにまとめたい
- 5. メソッドを外で使用したい時
- 6. 読みやすいコードを書くために意識すべき基本的ルール
- 7. 正規表現を使用するバリデーションの実装
- 8. 【Rails】wheneverを本番環境+Capistranoで使う
- 9. 【Rails】wheneverでバッチ処理を行う(未読通知が3件以上溜まったらAction Mailerでメール送信)
- 10. Railsでlib以下に作った自作クラスを呼び出す
- 11. RubyのHashは引数が多いとスタックオーバーフローする
- 12. Railsで Payjp.js V2 でクレジットカード登録機能実装 フリマアプリ
- 13. 【個人アプリ作業メモ】フォローボタンの場所を移す
- 14. [Ruby] rqrcodeで連結QRコードを生成する(実践編)
- 15. Rails 本番環境 ActiveRecord::StatementInvalid (Mysql2::Error: Table ‘テーブル名’ doesn’t exist):
- 16. MySQLをbundleしようとすると失敗する
- 17. 【Rails】論理削除paranoiaでwith_deleted と joins(もしくはincludes) を併せて使いたい
- 18. Railsでdeviseを導入してユーザー管理機能を実装する
- 19. ActiveRecord::StatementInvalid: PG::DuplicateTable: ERROR: relation “tweeets” already exists
- 20. 【Rails】windows10でcredentials.ymlの編集をする
Sassとは
cssを効率的にかける言語、「Sass」について説明します!
#Sassとは
CSSを拡張した言語です。より効率的に書けます!
記述を簡略化できる他にも、プログラムのような処理ができたり、同じ値を使い回すことができます。
※今回は.scss記法で説明していきます。###ネスト化
cssはセレクタを何回も書く必要がありましたが、Sassは**ネスト**させることで、
同じ親のセレクタでまとめられちゃいます。###プログラム処理
変数や条件分岐も使えます!“`ruby
$section-color: rgb(30,30,30);
section {
background-color: $section-color;
}
“`###複数のファイルをまとめられます
バーシャルを使うと、複数のcssファイルを一つにまとめることができます。バーシャルとは、分割したSassファイルのことです。
バーシャルを作成するときは、ファイル名の最初に”アンダーバー_”をつけます。例:_item.scssと_reset.scssファイルを読み込みます。
“`applic
RailsからFirestoreをいじりたい
メモのまま投稿します。
#0. 前提
– `rails new`済み
– firebaseでプロジェクト作成済み#1. gem インストール
`gem “google-cloud-firestore”`#2. 秘密鍵の生成
「設定」→「新しい秘密鍵の生成」からjsonファイルをダウンロード
Railsプロジェクトにおく#3. その他設定
“`
require “google/cloud/firestore”firestore = Google::Cloud::Firestore.new(
#ここに自分のプロジェクトID
project_id: “my-project” ,
#ここに「2.秘密鍵の生成」のjsonファイルのpathを指定
credentials: “/path/to/keyfile.json”)
“`#4. 以上でデータを取ってこれる
1.データの取得
“`
test_val = firestore.col(“test_col”).doc(“test_doc”).get().data[:test_field]
“
RSpecを導入して単体テストコードを記述する
#概要
今回は、userモデルの単体テストコードをrspecを導入して記述する流れをまとめます。それに伴い、FactoryBotとFakerも導入して実装したので記述します。
###FactoryBotとは
テスト用のデータを作成してくれるツールです。###Fakerとは
FactoryBotで作られたデータにランダムに中身を追加することが出来ます。##gemの導入、準備
ポイントとして、Gemfileの記述場所に注意しましょう。
一番下ではありません。“`ruby:gemfile
group :development, :test do
gem ‘rspec-rails’
gem ‘factory_bot_rails’
gem ‘faker’
end
“`このあと
$ bundle install
します。次に、コマンドを実行して、RSpecを書くためのディレクトリなどの生成を行います。
“`:ターミナル
rails g rspec:install
“`
すると、ディレクトリやファイルが生成されるはずです。次に、.rspecに以下の
Viewページで何度も使われている用語を一つにまとめたい
## Viewページで何度も使われている用語を一つにまとめたい
以下のようなViewファイルはよくあると思います。
“`app/views/books/index.html.erb
<% books.each do |book| %> タイトル 著者 <%= book.title %> <%= book.author %> <% end %>
“`
こんなページになります。
[![Image from Gyazo](https://i.gyazo.com/c8658ca46db9518c5cb17b7e8fa63e59.png)](https://gyazo.com/c8658ca46d
メソッドを外で使用したい時
【概要】
—————————————-
1.結論2.メソッドとは何か
3.どのように使用するのか
4.別解
1.結論
—————————————-
インスタンス変数とインスタンスメソッドを使う!2.メソッドとは何か
—————————————-
>”目的を達成するために決められたやり方。方法。方式”と出てきますが、簡単に言うと変数にくっつけて使えたり(インスタンスメソッド)、方程式のような元々あるメソッド(lengthやeach,times等々)のことを指します!
外で使用する場合には、スコープの概念が出てくるので
下記の記事に少しだけ書いています!”変数とインスタンス変数の違い”
3
読みやすいコードを書くために意識すべき基本的ルール
“`
前提
プログラミングを始めたて(1~2ヶ月)の自分が学習した内容をまとめています。
実際の現場では通用しないことや間違っていることなどあるかもしれませんが、
お気づきの際はコメントにてご報告いただければ幸いです。
“`
プログラミング初学者の私が、“`
読みやすいコードを書く必要性
どのようにすればわかりやすいコードを記述できるのか
“`
について学んだことをまとめました。## なぜ読みやすいコードを書く必要があるのか
読みやすいコードを書く理由には大きく3つあります。
・個人、組織の生産性が上がる
・保守性が上がる
・柔軟な開発体制が構築できる
プログラミングでの開発は基本的には複数人で行うため、自分さえわかればいいというコードの書き方では生産性は頭打ちになり、柔軟な開発体制からは程遠くなってしまいます。この3つを実現するために**リファクタリング**が行われています。
リファクタリングとは
実装した機能に影響を与えずにソースコードを読みやすい状態に改善することです。
このリファクタリングによって一緒に開発に携わる人が実装されているコードの理解や修正を簡単に
正規表現を使用するバリデーションの実装
#概要
今回は、正規表現を使用したバリデーションの実装方法についてまとめていきます。最初に、バリデーションと正規表現についてざっくり述べておきます。
##バリデーション
データを保存する際にバリデーションをかけることによって、無効なデータを弾いてくれます。
空のデータを登録できなくしたり、文字列に含まれなきゃいけない文字を指定したり、文字数制限をしたり、、、
様々なバリデーションがあります。代表的なものとして、nicknameを入力する際に空にならないようにバリデーションをかけてみましょう。
“`ruby:models/user.rb
—省略—
validates :nickname, presence: true
—省略—
“`こんな感じでそれぞれの入力項目にバリデーションをかけます。
##正規表現
正規表現とは、記号と文字列を組み合わせた構文のことで、検索対象となる文から指定した文字列パターンを抽出することができます。よく使うものだと、
\A…文字列の先頭にマッチする
\z…文字列の末尾にマッチする
のような感じで他にもいくつかあり
【Rails】wheneverを本番環境+Capistranoで使う
# 環境
* Ruby: 2.5.7
* Rails: 5.2.4
* 本番環境:AWS EC2/MySQL2/Nginx/Puma/Linux(CentOS)# 前提
* Capistrano導入済み# 本番環境で動かす
## 1. wheneverを本番環境にセッティング
* config/schedule.rb“`
env :PATH, ENV[‘PATH’]
# ログファイルの出力先
set :output, ‘log/cron.log’
# ジョブの実行環境の指定
set :environment, :production ★ ここ変更# 日本時間の午前8:00にメール送信される(JSTは+9:00なので-9:00の時間を記述)
# 未読通知が3件以上たまっているユーザーにメール通知
every 1.days, at: ’11:00 pm’ do
runner “ScheduledProcessingMailer.check_notice_mail.deliver_now”
endb
“`
実行環境はprodaction環境がデフォルト設定なので`
【Rails】wheneverでバッチ処理を行う(未読通知が3件以上溜まったらAction Mailerでメール送信)
wheneverで定期的にバッチ処理を行い、「未読通知が3件以上溜まったらAction Mailrでメール送信」する実装方法を記載します。対象者には毎朝午前8時に下記のようなメールが送信されます。
# 前提
* 通知機能を実装ずみ![スクリーンショット 2020-08-26 14.01.44.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/642283/2a92cdd3-76cb-fe6e-50cf-56ce3719b126.png)
私の場合は上記のような通知機能を作成済みです。
# 大まかな流れ
1. Action Mailerでメーラー生成
2. 「未読3件以上のユーザーを見つけてメールを送る」処理をアクションメーラで定義
3
Railsでlib以下に作った自作クラスを呼び出す
#config/environment.rbに自作クラスをrequire
—-lib/
├ assets/
├ tasks/
└ test.rb <-追加 ```ruby:test.rb class Test def aa puts "aa" end end ``` ##config/environment.rbを編集 ```ruby:environment.rb # Load the Rails application. require_relative 'application' require 'test' #これを追記 # Initialize the Rails application. Rails.application.initialize! ``` ##使えるかテスト ``` % rails c Running via Spring preloader in process 62643 Loading development environment (Rails 6.0.3.2) [1] pry(mai
RubyのHashは引数が多いとスタックオーバーフローする
ActiveRecordを使い、key=>valueのHashを作成していた。
“`ruby
@users = Hash.send :[], *ActiveRecord::Base.connection.execute(‘SELECT `id`, `name` FROM `users`’).map {|x| x}.flatten
@users[1]
# => “ユーザー1”
“`Hash[*Array]をしているため、executeで取得してくるレコード数が一定を超すとスタックオーバーフローとなる。
ActiveRecordの使い方、Hashの作り方の両方に問題がある。
“`ruby
@users = User. User.pluck(:id, :name).to_h
@users[1]
# => “ユーザー1”
“``.pluck`で必要なカラムを取得し `.to_h`でHash化
Railsで Payjp.js V2 でクレジットカード登録機能実装 フリマアプリ
# 概要
payjp.jsを使用し、カスタマイズ可能なv2での実装の記事が全くなかったので
共有したと思います。
v1での実装記事は沢山のあったのですが、、、、>###payjp.js v2をβ提供しました
>カード情報のトークン化機能を提供しております payjp.js につきまして、最新のPCI-DSSに準拠した payjp.js >v2をこの度β提供いたしました。> ###payjp.js v2 とは
>payjp.js v2は、従来のカード情報のトークン化機能に加えて、最新のPCI-DSSに準拠したカード情報入力フォーム>生成ライブラリとなります。>機能や詳細については、リファレンスおよびガイドをご覧ください。 また、デモも複数用意しております。
>###移行のお願い
>現行の payjp.js v1につきましては、v2の本リリース(4月上旬を予定)と同時に、新規での利用を非推奨とさせてい>ただく予定となっております。>v1をすでにご利用の加盟店様におかれましては大変お手数ですが、payjp.js v2への移行をお願いいたします。
>v1からの移行手順につ
【個人アプリ作業メモ】フォローボタンの場所を移す
フォローボタンは前に設置してたのだが、
前どこに設置してたか覚えていないのと、
その場所がかなりわかりにくくて、
普通にそこだとまず使わないだろという場所だったので、
もっとわかりやすく使いやすい場所に移すことにする。移動先はここ。
![スクリーンショット 2020-08-25 午後7.28.35.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/547640/a625007a-1c2d-b2da-5d80-ae73da787f36.png)
各投稿のcurrent_user.nameの横。まず前にどこかに作ったフォローボタンを探しに行こう。
見つけた!!
“`ruby:app/views/users/show.html.haml
.users-show
= render ‘follow_form’
= render ‘stats’
“`
この部分テンプレートで呼び出してる。どこから呼び出してるかというと、ここ。
“`ruby:app/views/users/_follow_
[Ruby] rqrcodeで連結QRコードを生成する(実践編)
* [知識編はこちら](https://qiita.com/c-flat/items/3dd4ca512632ce97fdca)
* では、実際に連結QRコードを出力してみましょう。– 知識編にも書きましたが、今回は処方箋のQRコードで使う `8bit_byte` モードの連結QRコードを生成します。
– 処方箋に書き込むデータの実態は ShiftJISエンコーディングのCSVデータファイルです。(改行=CR/LF・EOFあり)([こちら](https://www.jahis.jp/standard/detail/id=714)で定義されています)# rqrcode を改変する
### rqrcode のライブラリ構成について
* rqrcodeは、v1.0.0からライブラリの構成が分割され、生成機能の呼び出しや画像ファイルへの出力クラスを備える[rqrcode](https://github.com/whomwah/rqrcode) と QRコードの生成のcore部分の[rqrcode_core](https://github.com/whomwah/rqrco
Rails 本番環境 ActiveRecord::StatementInvalid (Mysql2::Error: Table ‘テーブル名’ doesn’t exist):
##この記事について
本番環境で出たエラーの対処方法を備忘録として投稿[環境]
・Ruby 2.6.6, Rails 6.0.3.2
・Docker,Docker-compose(開発環境)##問題のエラー
“`ruby:qiita.rb
ActiveRecord::StatementInvalid (Mysql2::Error: Table ‘テーブル名’ doesn’t exist):
“`##エラーが出た原因
開発環境で新たにテーブルを作成したが、本番環境にはまだテーブルが存在しておらずdb:migrateがする必要があるから##エラーを解決するために
“`ruby:qiita.rb
$ bundle exec rails db:migrate RAILS_ENV=production== 20200825055854 CreateNews: migrating =======================================
— create_table(:テーブル名)
-> 0.0916s
== 20200825055854
MySQLをbundleしようとすると失敗する
##gem ‘mysql2’をbundle出来ない問題
mysql嫌いになりそう。何回も同じエラーで苦しんだので備忘録としてまとめます。
“`
$ bundle
“`“`
The dependency tzinfo-data (>= 0) will be unused by any of the platforms Bundler is installing for. Bundler is installing for ruby but the dependency is only for x86-mingw32, x86-mswin32, x64-mingw32, java. To add those platforms to the bundle, run `bundle lock –add-platform x86-mingw32 x86-mswin32 x64-mingw32 java`.
Fetching gem metadata from https://rubygems.org/…………
Using rake 13.0.1
Using co
【Rails】論理削除paranoiaでwith_deleted と joins(もしくはincludes) を併せて使いたい
# 結論
* Userモデル“`
has_many :event_users, -> { with_deleted }, dependent: :destroy
“`* 実装したいコントローラー
“`
User.joins(:event_users).where(event_users: { event_id: @event.id })[#
,
#
Railsでdeviseを導入してユーザー管理機能を実装する
#deviseを導入しユーザー管理機能を簡単に実装する
Railsで、gemのdeviseを使ってユーザー管理機能を実装する方法をまとめました。##deviseの導入
まずはgemfileにdeviseを追加します。“`ruby:gemfile
gem ‘devise’
“`bundle installを実行し、**サーバーを再起動します。**
そして、deviseの設定ファイルを作ります。
“`
$ rails g devise:install
“`userモデルを作ります。
“`
rails g devise user
“`この時、userモデルができると同時にマイグレーションファイルが生成されるので、追加するカラムがある場合は記述してからマイグレートしましょう。
“`ruby:○○_devise_create_users.rb
–省略–
class DeviseCreateUsers < ActiveRecord::Migration[6.0] def change create_table :users do |t|
ActiveRecord::StatementInvalid: PG::DuplicateTable: ERROR: relation “tweeets” already exists
マイクグレーションを実行しても以下のエラーが出る
“`
ActiveRecord::StatementInvalid: PG::DuplicateTable: ERROR: relation “tweeets” already exists
“`
Rails のアプリをコントローラーから作ると、高い確率でこのエラーにあたってしまう。
テーブル作成しているやん。と言ってくれていたのですね。
以下の記事を参考にさせていただきました。https://qiita.com/motty93/items/455515ede653371a5887
“`
$ rake db:migrate:reset
“`
リセットして“`
$ rake db:migrate
“`
もう一度マイグレーションを行ったところ直りました。ありがとうございます。
必ずここでエラーが出て、ファイル作成 → もう一度最初からという非効率なことを行っていたので
絶対に忘れたくなくて記事を書きました。もし、私と同じエラーに苦しんでいる人がいたら試してみてください。
【Rails】windows10でcredentials.ymlの編集をする
##はじめに
Railsでは各APIキーなどをcredentials.ymlなるファイルで管理?するらしい。
このファイルは暗号化されているようで普通に開いて編集することはできず、コマンドから開くみたいでWindows向けの文献が少なかったので、需要はあまりなさそうですが上手くいった方法を書いておこうと思います。##環境
“`console:console
Windows10
ruby 2.6.6
Rails 6.0.3.1
VSCode 1.48.1
“`##まずは普通にやってみる
「rails credentials:edit」でファイルを開く。
“`console:console
C:\Users\sample> rails credentials:edit
“`
すると、“`console:console
No $EDITOR to open file in. Assign one like this:EDITOR=”mate –wait” bin/rails credentials:edit
For editors that f