- 1. ずら〜っと、Railsでデータベースを確認する方法一覧
- 2. WindowsにRails環境を導入してみる
- 3. Ruby on rails エラーメッセージの表示
- 4. Ruby on rails helperの役割
- 5. Ruby on rails でルーティングを確認する方法
- 6. 【gemなし】Railsでラベル機能を作る
- 7. Rails6 マイグレーションファイルの記載ミスでマイグレートしてしまったらrollbackを使おう
- 8. Railsリモート開発環境 VSCode編
- 9. Zeitwerkの壊し方
- 10. Rack middlewareを使ってRailsアプリケーションにBasic認証を組み込んでみた
- 11. リアルタイムチャットは誰でもつくれる~Action CableでDM機能を作ろう~
- 12. Re:Backlogs というプロジェクト管理(タスク管理)ツールを OSS としてリリースしました
- 13. [Rails]コントローラ名、アクション名、URLなどを取得する
- 14. Rails6.0.2のActiveRecordに関する変更点まとめ
- 15. 【Rails】子テーブルの集合から親テーブルのインスタンスを重複を除いて取得する方法
- 16. Rails5.2でStripeを使う
- 17. Railsでいいね機能から実装力をつける
- 18. Railsチュートリアル 第13章 ユーザーのマイクロポスト – Micropostモデルに、テスト駆動で新たな機能を追加していく
- 19. RailsアプリをECS FargateへデプロイするCI/CD pipelineを構築する
- 20. [WIP]ActiveRecordを使って複数テーブルへBULK INSERTする方法
ずら〜っと、Railsでデータベースを確認する方法一覧
データベースクライアントの起動
$ rails dbconsoleこうなる
sqlite>テーブル一覧の見方
sqlite> .tables指定したテーブルのカラムの確認方法(スキーマの確認)
.schema テーブル名
WindowsにRails環境を導入してみる
WindowsにRailsを導入しようとしたらめちゃくちゃ手こずったので、記録しておこうと思って書きました
###初めに
[ここ](https://rubyinstaller.org/downloads/)からRubyをダウンロードする、Devkitがついてるやつがいいらしい
インストールが完了したらコマンドプロンプトを開いて`gem install rails`を実行
問題なくインストールできたようなので次のステップへ`rails new hoge`を実行するとガーっとファイルが作られていって安心していたら変なのが出る
~~~
Could not find gem ‘sqlite3 (~> 1.4) x64-mingw32’ in any of the gem sources listed in your Gemfile.
Run `bundle install` to install missing gems.
~~~意訳:ふえぇ、SQLite3 v1.4が見つからないよぉ
[Railsを始めてsqlite3まわりのエラーで躓いている人たちへ](https://qiit
Ruby on rails エラーメッセージの表示
##エラーメッセージの表示方法
form_forヘルパーで作る入力フォーム内に
エラーメッセージを表示させる方法を学んだのでまとめておきます。初めに一例のコードを書きます。
前提として、入力フォームにバリデーションがかかっていることとします。
エラーメッセージとバリデーションはセットです。“`
<% @user.errors.full_messages.each do |msg| %>
- <%= msg %>
<% end %>
“`
errors.full_messagesは全てのエラーメッセージを配列で取得します。
次に、取得したエラーメッセージを一つずつmsgという変数に代入します。
そして、liを使ってエラーメッセージの数だけリストが作られます。
参考
https://qiita.com/ryuuuuuuuuuu/items/1a1e53d062bff774d88a
Ruby on rails helperの役割
##helperの役割
viewで使うメソッドを定義することです。
helperにメソッドを定義することで、viewがDRYになります。##helperをviewに呼び出す方法
viewでhelperにあるメソッドを指定します。例として、`application.html.erb`にhelperで定義したメソッドを呼び出してみます。
“`application_helper.rb
def full_title
“full_title”
end
“`“`application.html.erb
<%= full_title %>
“`
viewで”full_title”が表示されます。
Ruby on rails でルーティングを確認する方法
##ルーティングを確認する方法
初めに、コマンドラインで次のコードを打つ。
“`
rails routes
“`
すると、次の結果が表示されます。“`
Prefix Verb URI Pattern Controller#Action
root GET / static_pages#home
help GET /help(.:format) static_pages#help
about GET /about(.:format) static_pages#about
contact GET /contact(.:format) static_pages#contact
“`以上です。
【gemなし】Railsでラベル機能を作る
## 速攻でラベルのモッグを作りたい時のためにメモ
### rails new
“`
$ rails _5.2.3_ new sample-relation -d postgresql –skip-bundl && cd sample-relation && bundle install –path vendor/bundle && rails db:create
“`### scaffoldで無駄なファイルが生成されないよう設定
“`/config/application.rb
module SampleRelation
class Application < Rails::Application # ここから下を追加 config.generators do |g| g.javascripts false g.helper false g.test_framework false end end end ``` ### postテーブル(投稿機能機能)をscaffoldで生成 ``` $ r
Rails6 マイグレーションファイルの記載ミスでマイグレートしてしまったらrollbackを使おう
# 目的
– マイグレーションファイルの記載を間違え、マイグレートしてしまった時の対処法をまとめる
# 筆者がやらかしたこと
1. マイグレーションファイルの記載をミスる。
1. その状態でマイグレートしてしまう。
1. データベースを確認したところ期待した方になっていない。
1. 現在のマイグレーションファイルを削除する。
1. 再度、マイグレーションファイルを作成し正式な記載にをした。
1. マイグレートを実行した。
1. データベースが期待したものになっていた。# 間違えてマイグレートをしてしまった時はrollebaskをしよう
– マイグレート後にDBに異変を感じたらすぐに下記のコマンドを実行してマイグレート前の状態に戻す。
“`terminal
$ rails db:rolleback
“`– そのあとでマイグレーションファイルの記載を確認、修正を行い再度、マイグレートを行う。
Railsリモート開発環境 VSCode編
## 前書き
VSCode(以下code)でのRuby on Rails開発とVM(Vagrant&Oracle Virtual Box)でのデバッグについてチームメンバーのセッティングのために書きます。
Rails6ですが、4や5でも同じかと思います。(4,5で試した方いればコメントくだされば助かります)## VSCodeのSSHリモートワークスペース拡張機能(=神Extention)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/166036/09f9c58d-2773-ef40-2362-73cad66afe20.png)
これをホストOSのcodeに入れます。
SSHでワークスペースやCUIを使えるすごいやつです。
GUIで開発しながら開発環境のシェルを使ってコマンドを打てるのでまるでローカル開発と変わらない感覚でゲストOSの操作ができる画期的なExtentionですね。
これでよりホストOSが汚れなくなるし、環境セッティングもローカルと同様にできるのでやりやすい。
Zeitwerkの壊し方
この記事は[Ruby on Rails Advent Calendar 2019](https://qiita.com/advent-calendar/2019/rails)の13日目です。
インフルエンザにやられて完全に出遅れました。ごめんなさいごめんなさい。
# Zeitwerkとは
みなさん、**定数解決**してますか?
Rails6から導入されたZeitwerk、旧来のconst missingを利用した仕組み(classic mode)で見られた困った挙動のほとんどを解決してくれる素晴らしいヤツですね。
クラスを定義しても定義しても一向に参照されず、星空見つめてすすり泣いたあの日はもう過去のもの ?
ここでは、Zeitwerkのドキュメント、およびコードリーディングを通じて気づいた、導入の注意点やTIPSなどを紹介してみたいと思います。
##### (検証環境)
– Ruby 2.6.5
– Ruby on Rails 6.0.0前提知識として、Rubyの定数解決の仕組みを多少理解していると良い・・かもしれません。
https://qiita.com/fu
Rack middlewareを使ってRailsアプリケーションにBasic認証を組み込んでみた
この記事は[マネーフォワード アドベントカレンダー](https://adventar.org/calendars/4136)21日目の記事です。
Railsエンジニアの @kamillle です。
今回はRack middlewareでBasic認証をRailsのアプリケーションに組み込んでみました。
# RailsでBasic認証をどうやって実装するか
Googleで `rails basic auth` とググると `api.rubyonrails.org` の[ドキュメント](https://api.rubyonrails.org/classes/ActionController/HttpAuthentication/Basic.html)がヒットし、`http_basic_authenticate_with`にnameやpasswordというkey名を含んだHashを渡すと、そのコントローラーのアクションに対してBasic認証がかけられることがわかりました。
一行でかけるのでRailsぽくていいなーと思ったですが、同時に下記の違和感を覚えました。
– リクエス
リアルタイムチャットは誰でもつくれる~Action CableでDM機能を作ろう~
#はじめに
はじめまして!DMM WEBCAMPでメンターをしているものです。Railsを学んでいる人は「**Action Cable**を一度は使ってみたい!」と思いがち。
思うだけじゃだめだ、作るんじゃぁぁぁ!!
と、いうことで。
Action Cableを使ったリアルタイムチャットアプリを作ってみましょう!
これを読めば、あなたもリアルタイムチャットを作れる!!!
`初学者でもわかりやすいよう、後で記事へ補足説明を追加します。コードの詳しい説明は今回省いていますのでご了承ください。`###そもそもAction Cableってなんじゃ
ざっくり説明すると、Action Cableとは、
Railsにおいて**WebSocet**(Webにおいて双方向通信を低コストで行うための仕組み)による双方向通信を実現する機能である。LINEとかSlackなんかで、ポンポンポンってメッセージが投稿されるあれです。
(Action Cableについて詳しく知りたい人は、[Railsガイド](https://railsguides.jp/action_cable_overview.html
Re:Backlogs というプロジェクト管理(タスク管理)ツールを OSS としてリリースしました
![20191221_rebacklogs.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/19717/98825f33-67fe-634c-08a9-bc585304897d.gif)
読み方: Re:Backlogs (リ・バックログ)
https://github.com/kaishuu0123/rebacklogs
# 画面紹介
デモサイト: https://rebacklogs.saino.me/
Twitter, Google, GitHub ログインに対応しているので、お気軽にお試しください:sparkles:
## マスターバックログ
[Rails]コントローラ名、アクション名、URLなどを取得する
ページにアクセスした際にRails側で
– コントローラ名
– アクション名
– URLなどを取得します。
# 想定する状況
マイページ(http://localhost:3000/mypage)
から
記事投稿画面(http://localhost:3000/articles/new)
に移動したときにコントローラで`binding.pry`を使って処理を止めてみます。## コントローラ名
`controller_name`
“`
[1] pry(#)> controller_name
=> “articles”
“`## アクション名
`action_name`
“`
[2] pry(#)> action_name
=> “new”
“`## HTTPメソッド名
`request.method` または `request.request_method`
“`
[3] pry(#)> request.method
=> “G
Rails6.0.2のActiveRecordに関する変更点まとめ
[Ateam Finergy Inc. Advent Calendar 2019](https://qiita.com/advent-calendar/2019/ateam-finergy)の21日目です。
今回は、前回10日目に投稿した[Rails6.0.2の変更点まとめ](https://qiita.com/taiteam/items/6eaf765323f70dc05ff8)の続きになります。
前回は`Active Support`,`Active Job`,`Action Pack`,`Railties`について記述しました。
今回は`ActiveRecord`についてです。– 参照
– [Rails 6.0.2 released](https://weblog.rubyonrails.org/2019/12/13/Rails-6-0-2-has-been-released/)
– [rails/CHANGELOG.md at v6.0.2 · rails/rails](https://github.com/rails/rails/blob/v6.0.2/a
【Rails】子テーブルの集合から親テーブルのインスタンスを重複を除いて取得する方法
##はじめに
初学者がポートフォリオ作成でハマったことをメモします。
魚の食味投稿サービスを作成中。
##環境
Ruby 2.6.3 ,Rails 5.2.4##やりたいことと結果
・やりたいこと
子テーブルの集合から親テーブルのインスタンスを重複なく取得したい。
・結果
`Fish.joins(:reviews).distinct`##前提
親テーブル fishes
子テーブル reviewsFishインスタンスに複数のReviewインスタンスが紐づいている。
“`
class Fish < ApplicationRecord has_many :reviews class Review < ApplicationRecord belongs_to :fish ``` ##やりたいこと(詳細) 投稿(review)を魚(fish)の種類で検索する為に、複数の投稿に含まれる魚の名前をselectの選択肢に表示したい。 その為に、Reviewインスタンスの集合に紐づいているFishインスタンスを重複なく取得したい。 つまり、reviewsレコードのfish_
Rails5.2でStripeを使う
[Rails5.2で色々やってみる](https://qiita.com/lumbermill/items/5a94264eb3888bf0c133) という記事で作成したRailsプロジェクトに付け足して[Stripe](https://stripe.com/jp)によるクレジットカード決済を実装しています。普通に新規プロジェクトを作った続きとして読んで頂いても大体OKなはずです。
![stripe-flow.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/50780/d43aa113-e552-e288-10fd-4a573c57f282.png)
まずはGemfileにgemを追加して、`bundle install`を実行します(gemのバージョンは5.11でした)。
“`ruby:Gemfile
gem `stripe`
“`Stripeのダッシュボード Developers -> API Keys にアクセスして「Publishable key」と「Secret Key」を取得し
Railsでいいね機能から実装力をつける
#目次
– 本記事の目的
– 前提準備
– テーブルの関係について
– 多:多の実装方法
– いいね機能の実装
– まとめ#本記事の目的
Rails、データベース、テーブルの仕組みを理解し、自分の発想で機能を実装できる力をつける。今回は、単純で理解しやすい”いいね機能”を用いて説明していく。#前提準備
今回は、基本的なRailsの仕組みや使い方を理解している人を対象とするのでそれを省略する。
###モデル
Userモデル(Deviseを使用)|カラム名|型|
|:–:|:–:|
|id|integer|
|email|string|
|password|string|
|…|…|Tweetモデル
|カラム名|型|
|:–:|:–:|
|id|integer|
|body|text|
|user_id|integer|#テーブルの関係について
今回UserがTweetを投稿するという内容であるので、User:Tweet=1:多という関係になる。(1人のUserに対して、そのUserが投稿したたくさんのTweet)
UserとTweetは、**Use
Railsチュートリアル 第13章 ユーザーのマイクロポスト – Micropostモデルに、テスト駆動で新たな機能を追加していく
# 空文字列での投稿は受け付けない
## 「空文字列で投稿した場合、Micropostオブジェクトは有効ではない」というテストを追加する
「空文字列で投稿した場合、Micropostオブジェクトは有効ではない」とすれば、上述の機能は実現されます。対応するテストは、以下のようになります。名前は「content should be present」とします。
“`ruby:
test “content should be present” do
@micropost.content = ” ”
assert_not @micropost.valid?
end
“`上記テストを`test/models/micropost_test.rb`に追加します。
“`diff:test/models/micropost_test.rb
require ‘test_helper’class MicropostTest < ActiveSupport::TestCase def setup @user = users(:rhakurei)
RailsアプリをECS FargateへデプロイするCI/CD pipelineを構築する
この記事は[Fusic Advent Calendar 2019](https://qiita.com/advent-calendar/2019/fusic)の20日目の記事です。
昨日は@Kta-Mの「[究極のCloudFormationをたずねて三千里](https://qiita.com/Kta-M/items/53bfd638eae21b76250f)」でした。
CloudFormationでこのネタをやるとは、、、斬新なアイディアですね。—-
さて、12月2日〜6日にアメリカのラスベガスで[AWS re:Invent 2019](http://reinvent.awseventsjapan.com/)が開催されました。
私自身も参加して多数のWorkshopを体験することができました。今回は、その中で最も実用的と感じたWorkshopの内容を、一部アレンジしてre:Playします。
## 作るもの
ECS Fargate上にアプリケーションをデプロイするCI/CD pipelineを構築します。
ECSは2つのサービスを起動し、Blue/Greenデプロイで
[WIP]ActiveRecordを使って複数テーブルへBULK INSERTする方法
# 目的
– Qiitaの記事に大まかな流れをテンプレート化しておき、作業効率を上げる。
– 今後、railsを学ぶ方に向けての参考に役立てる。# 前提条件
– 実行環境
– Ruby 2.5.1
– Rails 5.2.3
– MySQL 5.7– gem
– [activerecord-import](https://github.com/zdennis/activerecord-import)– 想定
– 大量のデータ(CSVファイル)をseedで一括に取り込みたい# 手順
1. CSVファイルを設置する
2. seeds.rbにCSVをBULK INSERTするコードを記述
3. 各modelにオプションを設定
4. `rails db:seed`(完)## 1. CSVファイルを設置する
“`tex
db
├── data
│ ├── hoge.csv ← 初期データとして取込みたいCSVファイルを設置
│ └── fuga.csv ← 初期データとして取込みたいCSVファイルを設置
├── m