- 0.1. テストコードを書いてみよう③
- 0.2. 【Ruby on Rails】rails newのときにrailsバージョンとデータベースを指定したい
- 0.3. Rails 環境構築が難しい件 エラーが出たらググるしかない
- 0.4. [未経験エンジニア]のオリジナルアプリ制作の反省5. local: trueはなぜ書くのか
- 0.5. [Rails]Devise で保存されたパスワードを自前で認証したい
- 0.6. 数多くのレコードからランダムに複数件を選ぶのは、あらかじめ絞るのが良い
- 0.7. [2021]Ajax(非同期通信)フォロー機能(Rails・jQuery)
- 0.8. テストコードを書いてみよう②
- 0.9. [Ruby on Rails] サーバー重複時の対処法について
- 0.10. zipメソッドを使って複数の配列を同時に取り出す
- 0.11. 【Rails6】Action Cableによるコメント機能の実装
- 0.12. 画像投稿でプレビューを表示させる
- 0.13. Railsアプリで編集機能を実装する
- 0.14. 【AWS】用語を整理しながら学ぶAWS – 番外編-EC2上にRails6環境を構築(一部Terraform利用)
- 0.15. rails 評価機能(数字のみ)
- 0.16. 【Rails】本投稿アプリ「Bookers」を作成する【ログイン機能】
- 0.17. 【エラー】ActiveRecord::StatementInvalid: Mysql2::Error:
- 0.18. ProgateのRailsで「We’re sorry, but something went wrong.If you are the application owner check the logs for more information.」が出たときの対処法
- 1. 症状
テストコードを書いてみよう③
ここではコントローラーのテストコードを書いていきます。
モデルとコントローラーでは、テストコードを書く方針が以下のように異なります。|テストコードの種類|テストコードを書く方針|
|—|—|
|モデル|インスタンスを生成し、想定どおりの挙動になるか(バリデーションが正しく働くかなど)を確かめる|
|コントローラー|アクションにリクエストを送ったとき、想定どおりのレスポンスが作られるかを確かめる|コントローラーのテストコードでは、「リクエストとレスポンス」に着目したテストコードを記述します。
##Request Spec
RSpecが提供している、コントローラーのテストコードを書くために特化した手法です。
RSpecを入れていれば使えます。ファイルを作成します。
“`
rails g rspec:request tweets
“`今回は、tweetsコントローラーのindexアクションにリクエストを送ったときの
レスポンスについて確認するコードを記述します。以下の項目に対してチェックしていきます。
“`
正常にレスポンスが返ってくる
レスポンスに投
【Ruby on Rails】rails newのときにrailsバージョンとデータベースを指定したい
# rails new railsのバージョン指定、DB指定
railsの新規プロジェクトを作成するときに、rails new [プロジェクト名]でアプリを作成すると思いますが、そのときにrailsのバージョンを指定したい時。“`
$rails _6.0.3.2_ new todo-app
“`
このようにrails newの間に、railsの使いたいバージョンを追加するとできる。### databaseをなにを使うか指定したいとき
“`
$rails _6.0.3.2_ new todo-app –database=postgresql
“`
プロジェクト名のあとに“`–database=postgresql“`このようにしてdatabase名を追加する。
Rails 環境構築が難しい件 エラーが出たらググるしかない
###ローカル環境構築
こちらを参考にVScodeで環境構築を進めた
https://qiita.com/wtrt0417/items/1680c007a9ab4d8e4965しかし、
サーバーがなぜか立たず
terateilで質問
https://teratail.com/questions/320785
一旦全てフォルダを作り直し、Railsチュートリアル の環境でrails のバージョンを
rails -v
Rails 6.0.3.4
に下げて再度構築したらなぜかできるようになりました。###本番環境へデプロイ
rails チュートリアルに沿ってherokuでデプロイする“`
$git push -u origin master
$git push
$git push heroku master
“`を実行すると以下のエラーが出てくる
“`
Enumerating objects: 122, done.
Counting objects: 100% (122/122), done.
Delta compression using up to 4 t
[未経験エンジニア]のオリジナルアプリ制作の反省5. local: trueはなぜ書くのか
# 今回書くこと
form_withに記述するlocal: trueはなぜ記述するのか## 環境
Ruby 2.6.5
Ruby on Rails 6.0.4.3## 結論
local: trueを記述する理由は、form_withにデフォルトで搭載されているremote: trueを打ち消し、同期通信にするため。## form_withとは、と少し解説
form_withは、Railsのビューの拡張子としてerbを選択した時に用いる事ができる、フォームを作成するヘルパーメソッドです。ちなみに、ERB(Embedded Ruby)は、htmlやjsといった拡張子の後ろにくっつく事で、rubyのコードを実行できるファイルを生成できます。Railsガイドによると、
> Action Viewのテンプレートはさまざまな方法で記述することができます。テンプレートの拡張子が.erbであれば、ERB (ここにRubyのコードが含まれます) とHTMLが含まれます。とのことなので、例えば
“`index.html.erb
このファイルには、rubyのコードを実行できる
[Rails]Devise で保存されたパスワードを自前で認証したい
#課題
Deviseで保存された暗号化パスワードを自前システム用に認証したい“`irb:console
irb(main):010:0> user.encrypted_password
=> “$2a$12$vYelOHSlV8xtIfFShoZMIeWoOKVueTDeVQJtyl9JbLQilyLs5h4c.”
“`#結論
valid_password?(‘string’) を使うと出来た。“`irb:console
irb(main):011:0> user.valid_password?(‘password’)
=> true
“`#参考情報
Github devise
https://github.com/heartcombo/devise/blob/master/lib/devise/models/database_authenticatable.rb
数多くのレコードからランダムに複数件を選ぶのは、あらかじめ絞るのが良い
業務で主に Ruby On Rails での開発を行っていますが、そこで得た知見や、失敗への対応などについて記します。
“`
# 環境
Ruby 2.6.6
Rails 5.2.4.3
Postgres 10.10
“`## 状況と現状
状況と要件は以下の通りです。
* あるDBテーブル(ここでは `Item` )に、数十万件のレコードがある
* そのうちの 10件をランダムに選びたい単純な実装としては「SQL の `RANDOM()` でソートして最初の 10件を取り出す」になります。
“`ruby
# Rails の ActiveRecord を利用
Item.order(Arel.sql(‘RANDOM()’)).limit(10)
“`これを試しに実行すると、以下のように 1000ms ほどの時間がかかります。
“`
Item Load (1029.2ms) SELECT “items”.* FROM “items” ORDER BY RANDOM() LIMIT 10;
“`これは、この処理が以下のように動作しているからです。
1.
[2021]Ajax(非同期通信)フォロー機能(Rails・jQuery)
##前提
– フォローボタンを実装していること
– jQueryを使用できるようにしていること“`View.
<%= render 'relationships/follow_button', user: @user %> “`
部分テンプレートを使用しているため
お好きなところに使用してください。##部分テンプレート作成
“`relationships/_follow_button.thml.erb<% if current_user.following?(user) %>
<%= link_to 'Unfollow', user_relationships_path(user.id), method: :delete, remote: true %>
<% else %>
<%= link_to 'Follow', user_relationships_path(user.id), method: :post, remote: true %>
<% end %>
“`
– link_toを
テストコードを書いてみよう②
今まで書いたテストコードはインスタンスを毎回入力して行っていました。
もう少し効率的にテストコードを書いていきましょう。##FactoryBot
インスタンスをまとめることができるGemです。
他のファイルであらかじめ各クラスのインスタンスに定める値を設定しておき、各テストコードで使用します。
それでは導入しましょう。“`rb:Gemfile
group :development, :test do
# Call ‘byebug’ anywhere in the code to stop execution and get a debugger console
gem ‘byebug’, platforms: [:mri, :mingw, :x64_mingw]
gem ‘rspec-rails’, ‘~> 4.0.0’
gem ‘factory_bot_rails’
end
“`“`
% bundle install
“`FactoryBotの記述を格納するディレクトリfactoriesと、Userモデルに対するFactoryBotのファイルu
[Ruby on Rails] サーバー重複時の対処法について
自身の失敗から学んだことを書いて行きます。
まず、**rails s**コマンドで**localhost:3000**を起動中に重たくなって動かなくなったって事ありませんか??
大抵が**control****+****C**を押せば直るんですけど、
その時、直らなくて焦ってターミナルを強制的に切ってしまったんです。
すると、新しく開いたターミナルでサーバーが開かなくなってしまいました。
原因はサーバーが既に起動していたから
サーバーを付けたまま強制終了するとこいう事が起こるらしい。
その**解決方法**がこちら
先ほど新しく開いたターミナルでlsof -i:3000
とコマンドを打つと![スクリーンショット 2021-02-09 0.24.20.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1078698/3b6b1062-ab7e-cb72-463c-da2042b288f8.png)
こんな感じで先ほど使っていたサーバーの状況を確認
zipメソッドを使って複数の配列を同時に取り出す
##複数のタグを同時に表示させたかった
タグ付け機能を複数実装し、同じページに表示させようとした際に便利なメソッドを見つけたので備忘録として残しておく。##zipメソッドの使い方
zipメソッドを使うことで、複数の配列から同時に取り出すことができる。“`ruby
tag1 = [‘test1’, ‘test2’, ‘test3’]
tag2 = [‘テスト1’, ‘テスト2’, ‘テスト3’]tag1.zip(tag2) do |tag1, tag2|
puts tag1
puts tag2
end
“`
上記のように記述すると以下の実行結果となる。“`
test1
テスト1
test2
テスト2
test3
テスト3
“`
【Rails6】Action Cableによるコメント機能の実装
Rails6で作成したポートフォリオに**Action Cable**を利用したコメント機能を実装しました。
備忘録のため、実装方法を記載します。# 開発環境
– MacOS Catalina 10.15.7
– Ruby 2.6.5
– Ruby on Rails 6.0.3.4# Action Cableとは
そもそもAction Cableとは、[Railsガイド](https://railsguides.jp/action_cable_overview.html)によると> WebSocketとRailsのその他の部分をシームレスに統合するためのもの
とのこと。
**WebSocket**は通信規格の一種。
Webアプリケーションにおいて、クライアント/サーバ間のデータ通信を実現するための規格。
現時点では、**リアルタイムの双方向通信をイイ感じに実現してくれる規格**とでも覚えておきます。# 今回実装する要件
既存アプリの概要は、記事を投稿・閲覧するアプリ。
今回は既存アプリの詳細画面上で、コメントを入力・閲覧できる機能を実装します。
コメント閲覧は誰でも
画像投稿でプレビューを表示させる
# はじめに
ユーザーのことを思ってアプリ制作をしようシリーズ第二弾です。
railsでアプリを作り始めたころは画像投稿をする際にファイルを選択した後、ファイル名だけが表示されていることに対してなにも思わなかったんですけど、ある程度経験を積んでいくうちにプレビューがないとすごく不親切なアプリになってしまうということに気がつきました。
なので今回はそのやり方をメモ程度に書き残します。# 作るもの
### 画像選択前
![スクリーンショット 2021-02-08 15.21.06.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/674324/f37a02b8-c0a7-175b-c5d8-0e53c04f4be7.png)### 画像選択後
![スクリーンショット 2021-02-08 15.21.29.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/674324/af896acd-f639-a606-1a22-7feb
Railsアプリで編集機能を実装する
#編集機能の実装
編集機能では、既に登録された投稿の属性の値を変更してDBに保存します。
一覧画面の投稿情報ごとに「編集」リンクが表示され、そのリンクから編集画面へ遷移することにします。
また、詳細画面にも編集ボタンを設けるようにします。##編集リンクの設置
まずは一覧画面(app/views/posts/index.html.slim)に編集画面へのリンクを設置します。
編集画面はedit_post_pathというヘルパーメソッドにより、post/[投稿ID]/editというURLを生成できます。“`ruby:app/views/posts/index.html.slim
h1 タスク一覧= link_to ‘新規投稿’, new_post_path, class: ‘btn btn-primary’
.mb-3
table.table.table-hover
thead.thead-default
tr
th= Post.human_attribute_name(:content)
th= Post.human_attribute
【AWS】用語を整理しながら学ぶAWS – 番外編-EC2上にRails6環境を構築(一部Terraform利用)
# はじめに
この記事では AWS Cloud Tech を通して IaC を学習して実践していく記事です。
主な内容としては実践したときのメモを中心に書きます。(忘れやすいことなど)
誤りなどがあれば書き直していく予定です。**※AWS Cloud Tech では CloudFormation が基礎から学習できます。**
**※今回チョットだけ扱う Terraform は AWS Cloud Tech で学習しません。(2021/02/08 Mon 現在)****※この記事で紹介する Rails 環境のパラメータ(パスワードやユーザ名、権限)などはご自身の環境に**
**合わせていただくようお願い致します。**また、今回は一度も使っていませんが
今後はプライベートネットワークにも何かしら置く予定です。## Terraform とは
HashiCorp 社 が提供する製品の名前
巷で話題のインフラをコード化するということが各クラウドでできます。
今回は AWS を題材に使いますが、Azure,GCP でもできます。## なぜ、Terraform なのか
私が
rails 評価機能(数字のみ)
##はじめに
オリジナルアプリ制作過程で評価機能を作ったので健忘録として残します##1.DBファイル
“`
class CreateEvaluates < ActiveRecord::Migration[6.0] def change create_table :evaluates do |t| t.integer :speedy t.integer :kindness t.integer :frantically t.references :user, foreign_key: true t.timestamps end end end ``` 今回は早さ、親切さ、リピート、総合力の評価をしたかったので3つのカラムを用意しました。 でも総合力無いじゃんと思いましよね?わざわざ作らんでも四則演算できると思ってBDにはカラムとして用意はしませんでした ##2.controller ``` def show @evaluate = Evaluate.new @evaluates =
【Rails】本投稿アプリ「Bookers」を作成する【ログイン機能】
# はじめに
初学者のアウトプット用、自分用の備忘録となっています。
・aws cloud9
・Rails 5.2.4
・ImageMagickをインストール(ユーザー画像用)
■前回:[Githubとの連携](https://qiita.com/guminatto/items/69a27b5f947c43ece9cd)今回は、ログイン機能を「devise」を使って追加してみます。
”メールアドレス”、”パスワード”でログイン可能にした後に、”名前”、”パスワード”でログインできるように変更します。# 事前準備
1.Railsアプリケーションを新規作成“`ruby:cloud9
$ rails new bookers
$ cd bookers
“`
今回は「bookers」という名前をつけました。(先頭の文字は小文字でOK)
カウントディレクトリを”bookers”に移動しておきます。詳しく
【$ rails new bookers】
Rails on Rubyにて新規アプリケーションを作成するには「rails n
【エラー】ActiveRecord::StatementInvalid: Mysql2::Error:
#はじめに
エラーに苦戦したため、解消方法を忘れないように備忘録として記述します。
もし参考になれば幸いです。# 環境
現在のバージョン:
macOS Catalina 10.15.6環境
ruby ‘2.5.8’
ruby on rails ‘5.2.2’
docker
MySql 5.7.33# 背景
新しくgit branchを作成後PCをシャットダウンさせて再度開発をする際にlocalhost:3000でページ確認をしたところ下記エラーが発生。
ActiveRecord::StatementInvalid: Mysql2::Error: Tablespace ‘データベース名.テーブル名’ exists.: CREATE TABLE テーブル名 (version varchar(255) NOT NULL PRIMARY KEY)調べてみたところ何らかの原因でデータベースの情報に相違があった、壊れているなどが原因とのこと。
ターミナルで下記を実行したが同様エラーで先に進めない“`ruby:ターミナル
$ docker-compose run
ProgateのRailsで「We’re sorry, but something went wrong.If you are the application owner check the logs for more information.」が出たときの対処法
ProgateでRailsを勉強している際に、あまり見慣れないエラーメッセージに遭遇しました。
お問い合わせすることなく、解決したので記載します。症状
エラーの内容は、
「We’re sorry, but something went wrong.If you are the application owner check the logs for more information.」
日本語だと、
「申し訳ありませんが、問題が発生しました。アプリケーションの所有者である場合は、ログで詳細を確認してください。」
スタックトレースなど出ていないため、今回コードに手を入れたところでエラー箇所を類推する必要がありました。また、特定の画面ではなく、どの画面でもこのメッセージが出てくる模様。
ちなみに、Railsの道場コースⅢの「ログアウト機能を作ろう」で発生しました。
![progate.JPG](https://qiita-image-store.s3.ap-northea
railsでフォームに入力された文字数をカウントする方法(jQueryなし)
# 開発環境
Mac OS Catalina 10.15.7
ruby 2.6系
rails 6.0系# 前提
– 投稿フォームのビューは実装済み
– JavaScriptのフレームワーク等は使っていません
# ビューにIDを付与する
まずはビューにIDを付与していきます。
IDを付与する要素は2箇所で、文字数を出力する要素と、文字数をカウントしたいフォームの要素に付与していきます。“`new.html.erb
写真のタイトル
必須
# IDを付与
0文字# IDを付与
<%= f.text_area :title, id:"post_text", placeholder:"タイトル(必須 40文字まで)", maxlengthテストコードを書いてみよう
つぶやきアプリを使ってテストコードを書いてみましょう。
##テストコード
アプリケーション内に記述する、そのアプリケーションの挙動を確認するためのコードのことです。##RSpec
Ruby on Railsのテストコードを書くために用いられるGemですアプリケーションの挙動を確認するときは、「うまくいくとき」「うまくいかないとき」をそれぞれ確認する必要があります。
それぞれ正常系と異常系と言います。##正常系
「ユーザーが開発者の意図する操作を行った時の挙動」を確認するテストコードが、正常系に分類されます。
新規登録する時に必須項目を入力したら会員登録ができるなどです##異常系
「ユーザーが開発者の意図しない操作を行った時の挙動」を確認するテストコードが、異常系に分類されます。
たとえば、必須項目を入力せずに送信した時にエラー文を表示するなどです。テストコードの種類は、大きく2つあります。部分的に意図通りに動作するか確認する単体テストと一連の動作が問題なく行われるか流れも確認する結合テストです。
##単体テストコード
モデルやコントローラーなどの機能ごとに問題が関連する記事
OTHERカテゴリの最新記事
-
- 2024.09.19
iOS関連のことを調べてみた
-
- 2024.09.19
JavaScript関連のことを調べてみた
-
- 2024.09.19
JAVA関連のことを調べてみた
-
- 2024.09.19
Rails関連のことを調べてみた
-
- 2024.09.19
Lambda関連のことを調べてみた
-
- 2024.09.19
Python関連のことを調べてみた