- 1. S3バケットのオブジェクトを1000個以上取得する
- 2. 既存RailsアプリにCircleCIを導入した手順
- 3. Kinx 実現技術 – VM(Virtual Machine)
- 4. git pull時に 【Your local changes to the following files would be overwritten by merge】とエラー
- 5. rails form_withでフォロー機能作成
- 6. ActionMailerでメール認証を実装した
- 7. Railsにて検索機能を実装 (全体一致や部分一致などのselectボックスを入れ、複数モデルからの検索を可能にする)
- 8. 3/23 最終課題五日目
- 9. ActiveRecord で unscoped を呼ぶとその前のクエリが消える
- 10. Herokuへのデプロイ手順|Rails + MySQL
- 11. ツイッター風Railsアプリをテストする(統合テスト編)
- 12. Kinx 実現技術 – Switch-Case
- 13. headerとflashの間にできた謎の余白を消す(Devise, Bootstrap)
- 14. 重要なgemのうち、開発が止まってしまったgemがいくつあるか集計してみた
- 15. PHP サイト でも Capistrano (Ruby Gem)
- 16. 【RSpec】paramの書き方
- 17. 関連する子モデルの情報を含んだフォームのバリデーションテスト(Rspec)
- 18. [Ruby on Rails]CSVファイルを使い、データを一括でDBに読み込ませる方法
- 19. 【Rails】いいね機能の実装
- 20. VSCodeでRubocopを使う
S3バケットのオブジェクトを1000個以上取得する
[公式リファレンス](https://docs.aws.amazon.com/sdk-for-ruby/v3/api/Aws/S3/Client.html#list_objects_v2-instance_method)に記載があるように、[list_objects_v2](https://docs.aws.amazon.com/sdk-for-ruby/v3/api/Aws/S3/Client.html#list_objects_v2-instance_method)は1000個以上のS3オブジェクトを取得する際には面倒なnext_tokenの処理が必要になります。
そこで、1000個以上のS3オブジェクトを扱う際には、[Aws::S3::Bucket#objects](https://docs.aws.amazon.com/sdk-for-ruby/v3/api/Aws/S3/Bucket.html#objects-instance_method)を使うと、このようにシンプルに書けます。
“`ruby:list-objects.rb
require ‘aws-sdk’
bu
既存RailsアプリにCircleCIを導入した手順
自作のRailsアプリにCircleCIを使ってCI/CDを導入しました
今回は、CircleCIとGitHubとの連携までを行います。# 自動化したいこと
– テスト
– コード解析
– デプロイただ、今回は導入しか行いませんので、正直以上の3つは関係ありません。
# CircleCIを採用した理由
– 無料プランがついている
– メジャーどころっぽい
– 日本語の資料が多い(死活問題)# 1. アカウント取得・連携
やることは以下の3つ。
– CicleCIに登録
– GitHubと連携(登録と同時にできる)
– CircleCIを導入するアプリ(リポジトリ)を選ぶ[CircleCI公式(英語)](https://circleci.com)でSignUpします。
基本的には画面の指示に従っていたら間違いないはずです。英語じゃねえか… と心が折れかかりますが、私でもなんとかなったので多分大丈夫です。
少し時間が経っていて画面デザインが少し違いますが、次のブログは参考になります。
[【CircleCI】CircleCI 2.0からはじめる個人で
Kinx 実現技術 – VM(Virtual Machine)
# Virtual Machine
## はじめに
**「見た目は JavaScript、頭脳(中身)は Ruby、(安定感は AC/DC)」** でお届けしているスクリプト言語 [Kinx](https://github.com/Kray-G/kinx)。作ったものの紹介だけではなく実現のために使った技術を紹介していくのも貢献。その道の人には当たり前でも、そうでない人にも興味をもって貰えるかもしれない。
前回のテーマは [Switch-Case](https://qiita.com/Kray-G/items/dfeed33544b9687717bb)、今回のテーマは VM (Virtual Machine)。
* 参考
* 最初の動機 … [スクリプト言語 KINX(ご紹介)](https://qiita.com/Kray-G/items/ca08b6fb40d15dd0ec76)
* 個別記事へのリンクは全てここに集約してあります。
* リポジトリ … [https://github.com/Kray-G/kinx](https://git
git pull時に 【Your local changes to the following files would be overwritten by merge】とエラー
#エラー内容
$ git pull origin masterをすると
“`error: Your local changes to the following files would be overwritten by merge:
config/routes.rb
Please commit your changes or stash them before you merge.“`が出てくる。
#原因
pullした内容と自分の編集した箇所(ここではconfig/routes.rb)が被っている。#解決策
pullした内容の箇所が自分も編集している所の為、mergeする前にcommitするかstashしてと言われる。なので、今回はコミットを選択。
“`$ git push * “`
“`$ git commit -m “コミット名” “`
“`$ git push origin 自分の作業ブランチ “`でpushし、Github上でコンフリクトが起きなければ再度、
“`$ git pull origin master “`
とpul
rails form_withでフォロー機能作成
#はじめに
今回はフォロー機能を作成します。railsチュートリアルではform_forを利用していましたが、今回はform_withを利用して作成します。
(題材は自分のポートフォリオです。Userモデルはある前提で進めます。)###対象読者
railsチュートリアル終わったレベルくらいの人###作成の流れ
1.relationshipモデルの作成
2.各モデルの関連付け、フォロー機能のメゾット作成
3.対応するコントローラーの作成
4.form_withを利用したフォローボタン作成
5.jsファイルの作成
6.フォロー機能の流れ###今回のAjaxの流れ
①fomr_withで作成したフォロー/アンフォローボタンを押すとPost/deleteリクエストが送られる。
↓
②対応するコントローラのcreate/destroyアクションを実行
↓
③js.erbファイルをレンダリング
↓
④Ajax対象範囲のフォロー/アンフォローボタンを非同期で切り替え#1.relationshipモデルの作成
relationshipモデルの中身はこんな感じです。中間テーブルを作成し
ActionMailerでメール認証を実装した
# バージョン
– rails: ver 6.0.1
– ruby: 2.6.5
– テスト: rspec# はじめに
1. `ActionMailer`を使ってメール認証を実装しました。# やりたいこと
1. メール認証のリンクをクリックする![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/390288/4018bee4-c111-462a-2d66-f234046f666c.png)2. メール送信完了画面(&メールが届く)![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/390288/66843c15-ec05-d64e-3a9a-aca7c3724b1a.png)
3. メールのリンクをクリックする![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/390288/8d35058c-9
Railsにて検索機能を実装 (全体一致や部分一致などのselectボックスを入れ、複数モデルからの検索を可能にする)
備忘録として、なるべく自分の理解している範囲で、考え方の順序なども記載していく。
railsを触って、数週間なので、初心者の人のために
慣れている人や頭のいい人だと、そんなのわかってるよと言われることまで書いていきます。
間違っていたら教えてください。
devise でログイン機能は追加しており
UserモデルとBookモデルを作っています。
検索フォームをログインしている場合、全てのページに表示させたいので
app/views/layouts/application.html.erb のviewに記載していく。
<% if user_signed_in? %>
<%= form_tag(search_path, method: :get) do %>
<%= select_tag 'range' ,options_for_select([['---選択してください---', ''], ['User', '1'], ['Book', '2']]) %>
<%= select_tag 'search', opti
3/23 最終課題五日目
3/23
最終課題五日目
#メモですできている商品詳細ページをgithubに
出してコードレビューをするコンフリクトが起こっていたので
修正した後にコードレビューをしてもらうaタグはlink_toで書きましょう。
と指摘を頂いたので
修正
修正後無事にLGTMともらうその後マージしてマスターにプッシュする
そして今まで作ったとこに変なところが無いかや修正があるか探すとりあえず簡単な修正をしてコミットし
マスターにプッシュしましたこれで商品詳細ページ(マークアップ)が終わったので次に進む
次はサーバーサイドに進むが
みんなで話し合った結果
先に商品出品のサーバーサイドを進めることに決定
2人で進めることになりました
画像のところとその他で別れることに決定Git hubでブランチを作った後さらに
ブランチを作ることで二人で進めれるようにする
(孫ブランチ?)
子ブランチの状態で新しいブランチを作る
そうするとマスターブランチの小ブランチを作るか
小ブランチの孫ブランチを作るかと選択が出るので
孫の方を選択
作る際のブランチの名前は小ブランチの名前と一緒もし
ActiveRecord で unscoped を呼ぶとその前のクエリが消える
[ブログ記事](http://secret-garden.hatenablog.com/entry/2020/03/18/194551)からの転載です。
## `unscoped` を使うことで `default_scope` を取り除くことができる
さて、皆さん大好き `default_scope` ですが、モデルで `default_scope` を定義すると次のように暗黙的にクエリが追加されます。
“`ruby
class User < ActiveRecord::Base default_scope { order(:updated_at) } end # 暗黙的に ORDER BY のクエリが追加れる puts User.all.to_sql # => SELECT “users”.* FROM “users” ORDER BY “users”.”updated_at” ASC
puts User.where(name: “Tom”).to_sql
# => SELECT “users”.* FROM “users” WHERE “users”.”name”
Herokuへのデプロイ手順|Rails + MySQL
##はじめに
MySQLで作成したRailsアプリを、Herokuを使ってデプロイすることがあったので備忘録としてまとめました。同じ環境で初めてデプロイする方の参考になれば幸いです。##自分の環境
– macOS 10.15.3
– DB: MySQL
– Rails 5.0.7##Railsアプリケーションの作成
###・アプリ作成 [現在作成中]
###・Gemfile修正
`sqlite3`が入っている場合は、以下のようにしてproduction環境下で反映されないようにしましょう。“`ruby:Gemfile.rb
group :development, :test do
gem ‘sqlite3’, ‘~> 1.4’
end
“`
下記`mysql2`を追加。“`ruby:Gemfile.rb
gem ‘mysql2’
“`
###・config/environments/production.rbの設定Heroku上の本番環境でHTMLにCSSやJavaScriptが反映されるように、以下の記述を書き換えます。
“`:ターミナル
ツイッター風Railsアプリをテストする(統合テスト編)
# この記事の基本的な方針
今回は別記事、[ツイッター風Railsアプリ最短復習(忙しい人の流し読みで開発シリーズ)](https://qiita.com/annaPanda8170/items/844684cb739f99d3f114)で作ったアプリの統合テストをします。手を動かしながら読みたいようでしたら、以下でこのツイッター風Railsアプリを手に入れてください。
“`bash:Terminal
$ git clone https://github.com/annaPanda8170/cheaptweet.git
$ bundle install
$ bundle exec rake db:create
$ bundle exec rake db:migrate
“`
基本解説はしません。手順のみ示します。
# 想定する読み手
既に一度Railsアプリをチュートリアルやスクール等で作ったことがある方を想定しております。
Mac使用で、パソコンの環境構築は完了していることが前提です。
# 具体的な手順
[完成品GitHub](https://github.com/anna
Kinx 実現技術 – Switch-Case
# Switch-Case
## はじめに
**「見た目は JavaScript、頭脳(中身)は Ruby、(安定感は AC/DC)」** でお届けしているスクリプト言語 [Kinx](https://github.com/Kray-G/kinx)。作ったものの紹介だけではなく実現のために使った技術を紹介していくのも貢献。その道の人には当たり前でも、そうでない人にも興味をもって貰えるかもしれない。
前回のテーマは[構文解析](https://qiita.com/Kray-G/items/f198a8b105b37fd43fab)。今回のテーマは Switch-Case。
* 参考
* 最初の動機 … [スクリプト言語 KINX(ご紹介)](https://qiita.com/Kray-G/items/ca08b6fb40d15dd0ec76)
* リポジトリ … [https://github.com/Kray-G/kinx](https://github.com/Kray-G/kinx)## Switch-Case
なぜ Switch-Case
headerとflashの間にできた謎の余白を消す(Devise, Bootstrap)
#はじめに
先日投稿した[こちら](https://qiita.com/Roy1473/items/b7e6eede261c63ea9216)で
Bootstrap + jQueryを使ってFlashなどの
``をクリックした時にFlashを閉じる機能を実装しました。
ただ、ブラウザ場で確認すると、
Flashが消える前、後、双方でとの間に余白がないようにぴったり合わしているにも関わらず
``と`flash`の間に余白が発生していました。 この余白を無くすことができたので紹介します。
#開発環境
– bootstrap-sass (3.3.7)
– devise (4.7.1)
– jquery-rails (4.3.1)
– rails (5.2.4.1)#前置き (layoutのデザイン)
“`html:header.html
`
重要なgemのうち、開発が止まってしまったgemがいくつあるか集計してみた
![スクリーンショット 2020-03-23 16.00.28.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/33011/f91ec4c0-3141-17bf-adda-f87e7c44630a.png)
[core-jsがメンテされていない理由](https://qiita.com/yumetodo/items/eaf3b97aeae3d8c4a07e)を読みました。この記事によると、core-jsというJavaScript界隈の重要な(しかし一般の開発者にはほとんど知られていない)ライブラリのメンテが止まってしまったとのこと。
[JavaScript界隈の特殊な事情](https://yosuke-furukawa.hatenablog.com/entry/2016/03/27/152500)があるにせよ、Rubyにも、開発が止まりそうなgemはたくさんある気がします。そこで、重要なgemのうち、開発が止まりそうなものがいくつあるのかを調べてみました。
## 先に結論
重要なgemのうち
PHP サイト でも Capistrano (Ruby Gem)
## 環境
* Ruby 2.6.5
## 設定手順
### Capistrano 設定ファイルの用意
“`sh
bundle add capistrano
bundle exec cap install
“`これで必要なファイルが作成されます。
あとは `deploy.rb`, `config/deploy/*` を変更して設定完了です。
ファイルを置けば使えるPHPサイトなら、認証設定程度を記述すればOKです。
### 設定ファイル例
“`ruby:staging.rb/production.rb
# server configuration
role :web, %w{ec2-user@123.123.123.123}
# file location
set :deploy_to, “/var/www/xxx”
“`“`ruby:deploy.rb
# application name
set :application, “xxxxxx”
# repository
set :repo_url, “sample@sample.git.jp:/sa
【RSpec】paramの書き方
## はじめに
paramとして渡された引数を使うメソッドのテストをするときに、データの作成方法で悩んだので備忘として残します。
`save_hoge`メソッドの中でprivateメソッド、`save_user_hoge!`が呼び出されます。
`hoge`は、メソッド内でparamとして使用されるため、形を整える必要がありました。### メソッドのコード(省略してます)
“`rb:app/models/user.rb
def save_hoge
save_user_hoge!(hoge)
endprivate
def save_user_hoge!(hoge)
if hoge[:first_hoge_id].present?
user_hoge.create(
hoge_id: hoge[:first_hoge_id].to_i
)
end
if hoge[:second_hoge_id].present?
user_hoge.create(
hoge_id: hoge[:sec
関連する子モデルの情報を含んだフォームのバリデーションテスト(Rspec)
## はじめに
スクールでフリマアプリ開発の際、出品フォームのバリデーションテストを担当しました。
その時、出品画像のバリデーションテストで苦労したので、復習も兼ねて記事に残そうと思います。## 今回のケース
– 商品名や商品説明を保存するテーブル(productsテーブル)と、出品画像を保存するテーブル(imagesテーブル)が分かれて存在している。
– アソシエーションは、has_many :images と、belongs_to :product の関係である。
– 1つのフォームから、複数のテーブルにデータを送信して保存する実装をしている。
– Productモデルに、validates :images , presence:
[Ruby on Rails]CSVファイルを使い、データを一括でDBに読み込ませる方法
#はじめに
seed内でデータを作成するのが面倒だったので、Excel(Numbers)でデータを作成し、一括でDBに読み込ませる方法をまとめました!【環境】
私はMacを利用しているので、初期搭載されていて、無料で使えるNumbersを使用。
(重複セルを見つけい場合や複雑な処理はExcelを使用。)
#使い方
##CSVファイルを作成1. 1行目にキーとなる任意の名前をつける。(対応するDBの項目名と同じにすると分かりやすい)
2. 2行目以降にデータを打ち込む。3.データを作成したら ファイル → 書き出す → CSVを選択
【Rails】いいね機能の実装現在絶賛作成中のポートフォリオでいいね機能を実装する際、色々躓いてしまったので反省もかねてメモしとこうと思います。
#環境
– Rails 5.2.2
– mysql 8.0.17
– macOS#実現したいこと
Twitterのようないいね機能の実装。##そのために必要な処理
いいねボタンを押下した場合、– 「いいねしたユーザーのid:user_id」と「いいねされた投稿のid:post_id」が「中間テーブル:likesテーブル」に保存される。
– いいねボタンが「いいね追加」と「いいね削除」で切り替わる。##必要手順
1. 中間テーブルの作成
2. テーブルの紐付け
3. ルーティングの設定
4. コントローラー側の処理
5. ビューでの表示処理大体こんな感じです。
では順番に見ていきましょう。
#中間テーブルの作成
まずは、「いいねしたユーザー」と「いいねされた投稿」を保存するテーブルの作成からです。“`
$ rails g model Like user:references post:references
“`referencesを指定
VSCodeでRubocopを使う
##Rubocopとは
Rubyのコード解析ツール。Gem。
修正した方が良い書き方を指摘してくれたり、自動で修正してくれたりします。##導入
“`rb:Gemfile
group :development do
gem ‘rubocop’
“`
“`terminal
$ bundle install
“`
以下のコマンドで、コード解析が走ります。“`terminal
$ rubocop
Inspecting 67 files
……..CCC…CC.C……………………………………CC.C…67 files inspected, 24 offenses detected
“`
`-a`オプションをつけると、自動で修正できるところ(クォーテーションの種類を変えるなど)を修正してくれます。“`terminal
$ rubocop -a
“`
##設定ファイル
###`.rubocop.yml`
プロジェクトルートに作成して、無視するルールや無視するディレクトリ等を指定することができます