- 0.1. RubyのHashのメモ
- 0.2. 【Rails】マイグレーションファイルを削除する
- 0.3. Rails初心者がエラーを解決して学んだこと
- 0.4. resourcesでルーティングを設定する方法
- 0.5. Rails googleを使ったSNS認証
- 0.6. プログラミングスクール行って良かったなっていう話。
- 0.7. slateとaglioというAPI Document toolを使ったときの手順
- 0.8. 今日のメモ(パーセント記法、文字列演算、シンボル)
- 0.9. Railsアプリで日時の取得にはどのクラスを使うべきか(Time, DateTime, TimeWithZone)
- 0.10. その5「Rails初心者」が5回連続で発生したエラーをなんとか切り抜けた話。「NameError」
- 0.11. その4「Rails初心者」が5回連続で発生したエラーをなんとか切り抜けた話。「ArgumentError in income_Values#index」
- 0.12. その3「Rails初心者」が5回連続で発生したエラーをなんとか切り抜けた話。「NoMethodError in IncomeValues#index」
- 0.13. その2「Rails初心者」が5回連続で発生したエラーをなんとか切り抜けた話。「ActiveRecord::StatementInvalid in IncomeValues#index」
- 0.14. その1「Rails初心者」が5回連続で発生したエラーをなんとか切り抜けた話。「index (投稿一覧) が表示できない」
- 1. 収入科目の新規データ登録
RubyのHashのメモ
rubyのhashがわからなかったときの自分用のメモです。
間違え等あったらコメントしてくださると幸いです
# 環境
`ruby 2.7.1`
#定義
## 下記すべてで定義できる
“`
#文字列 と =>
hash1={“first”=>”いち”}#シンボル と =>
hash2={:first=>”いち”}#文字列 と :
hash3={“first”:”いち”}#キーの名前 と :
hash4={first:”いち”}
“`### 当然これはできない
“`
#シンボル と :
hash5={:first:”いち”}
=>syntax error
“`# 中身は異なっている
– hash1 → シンボルがキー
– hash2,3,4 → 文字列がキー“`
#hash1
{“first”=>”いち”}#hash2,3,4
{:first=>”いち”}
“`### 呼び出すときは
“`
hash1[“first”]
hash2[:first] #hash2,3,4共通
“`#付録
### 気をつけないと間違えそう
“`
hog
【Rails】マイグレーションファイルを削除する
#参考対象者
– マイグレーションファイルの操作の仕方を知りたい方
#環境
“`
$ rails -v
Rails 6.0.3.1
“`
“`
$ ruby -v
ruby 2.7.0p0 (2019-12-25 revision 647ee6f091) [x86_64-darwin19]
“`“`
$ mysql –version
mysql Ver 14.14 Distrib 5.7.29, for osx10.15 (x86_64) using EditLine wrapper
“`#マイグレーションファイルを削除する
Add column to usersというファイルを削除したかったとします
– 削除したいファイルのマイグレーションIDを確認する
“`
$ rails db:migrate:statusStatus Migration ID Migration Name
————————————————–
up 20200618162841
Rails初心者がエラーを解決して学んだこと
こんにちは、Shotaです!
現在、Railsでのポートフォリオを作成するうえで、エラーに躓きまくっています。
そして色々なエラーを解決して、改めて学んだことが3つあります。
***1、エラー文の意味を知る
2、質問するときは、ただ単にどうすればよいかと聞かない
3、いったんコードから離れることも重要***では、初心者なりに1つずつさらっと解説していきます。
**1つ目、エラー文の意味を知る**
エラー文の意味が分かれば本当に変わります。
初心者で英語ができない僕は、見たことのない英語表記のエラー文を見たら、
「なんだこれ!難しい。。。」
と感じてしまいます。しかし、英語の意味やエラー文をググることで、解決にグッと近づきます。
ポイントは、「きちんとエラーの意味を知る」ということです。
初心者によくありがちな
「エラー文を打って、似たエラーの解決策がヒットしたとき、その意味を理解しないまま真似して解決する」
というのはあまり良くないことが分かりました。***2つ目、質問するときは、ただ「どうすればよいか」と聞かない***
私を含め、初心者の方は特にこういった質問
resourcesでルーティングを設定する方法
#resourcesでルーティングを設定する
ルーティングは、個別に設定も可能です。
ただし、railsでの基本的な7つのアクションは開発の際によく使われるので、
そのたびに設定するのは効率的とはいえません。
こんなときは、resourcesメソッドを利用すると、ルーティングを1行書くだけで自動設定されます。“`
Rails.application.routes.draw do
resources :blogs
end
“`rails routesコマンドで確認。
“`
$ rails routes
“`全てのurlが設定されていることを確認。
“`
$ rails routes
Prefix Verb URI Pattern Controller#Action
blogs GET /blogs(.:format)
Rails googleを使ったSNS認証
# ゴール
googole認証のリンクをクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/390288/44b1daf5-de4a-e096-fade-e8a3d7aef1fe.png)アカウントを選択する
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/390288/63dcec9e-49b1-cc36-7876-ff761c17156f.png)**認証成功!!**
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/390288/e2bb848c-f69a-3b77-eaf6-59c3058f968d.png)#ベースの作成
– deviseを導入する
– scaffoldで投稿機能を作成
![ezgif.com-video-to-gif (1).gif](https:/
プログラミングスクール行って良かったなっていう話。
※この記事、若干前置き長いです。
こんにちは、Shotaです!
僕がプログミングを勉強してからついに7カ月が経ちました。時が過ぎるのはあっという間ですね。。。
ちなみに、Ruby歴は4カ月程度です7月にプログラミングスクールを卒業して、今ではRubyで簡単なアプリを作れるようになった僕ですが、はじめはなかなかうまくいきませんでした。
最初の挫折は、**Progateの道場**です。
プログラミングをやろう!と思って、
まず最初に安定のProgateから始めてみました。しかし、大学生ということで勉強・2つの部活・バイト・遊び など、
やることも少なくなかったため、ずいぶんスローペースで進めてました。確か2カ月くらいでHTML,CSS,JS,jQueryを1~2周ずつくらいしたと思います。
一通りProgateやった僕は、腕試しにと、初めてHTMLの道場編をやりました。
そして、絶望しました。(笑)プログラミングで初めて、
「めちゃめちゃ難しくね???」
と感じた瞬間です。これを機に、僕がパソコンの前に座る回数は減っていきました。
典型的な挫折パターンで
slateとaglioというAPI Document toolを使ったときの手順
## はじめに
API Documentページを作成するにあたって `slate`, `aglio` というtoolを実際に触ったときの手順と感想です。## slate について
rubyで作成されたAPIドキュメントを作成するための [ツール](https://github.com/slatedocs/slate)でマークダウンでドキュメントを記述できます。## slate 導入手順
**1 リポジトリの準備**
[本家のリポジトリ](https://github.com/slatedocs/slate)を開いて[use this template]をクリックし任意の場所にリポジトリを作成します。作成したリポジトリをローカル環境へ`git clone`します。
**2 開発環境セットアップ**
`README.md`を見て頂くと分かるのですが起動方法は以下の3つが準備されています。
* Natively
* Using Vagrant
* Using Docker手順も[こちら](https://github.com/slated
今日のメモ(パーセント記法、文字列演算、シンボル)
#パーセント記法
『’』や『”』で囲んできた文字列を、パーセント記法では囲む記号を指定できる。
文字列の中で『”』を使うときにエスケープしなくてもよくなる。
####例
“`
#『”』無し
a = %*TEST*
p a #=> “TEST”#『”』あり
a = %*”TEST”*
p a #=> “\”TEST\””
“`| 書式 | 生成される値 |
|:—————–|——————:|
| % | ダブルクォート文字列 |
| %Q | ダブルクォート文字列 |
| %q | シングルクォート文字列 |
| %s | シンボル |
| %x | コマンド出力 |
| %r | 正規表現 |#文字列演算
文字列では『+』と『*』を適用して連結することができる。“`
a = “ru” + “by”
puts a #=> ruby
“`他にも末尾
Railsアプリで日時の取得にはどのクラスを使うべきか(Time, DateTime, TimeWithZone)
## 日時の取得はどのクラスを使うべきか
– Timeクラス
– DateTimeクラス
– TimeWithZoneクラスRailsでは、特別な理由がない限り、
TimeクラスやDateTimeクラスより、TimeWithZoneクラスで統一した方が良い。## タイムゾーンについて
タイムゾーンを設定する場所は3箇所あります。
– システム
– 環境変数 `ENV[‘TZ’] `
– application.rbapplication.rbにどのタイムゾーンが設定してあるか確認するには、`Time.zone.name`を使います。
“`ruby
# application.rb
config.time_zone = ‘Tokyo’Time.zone.name
=> “Tokyo”
“`## どのタイムゾーンが使われるのか
ややこしいことに、クラスやそのクラスに関連するメソッドによってどのタイムゾーンが使われるか変わります。
例えば、
Timeクラスに関連するメソッド`now`を使った`Time.now`は環境変数のタイムゾーンを使い、
Timeクラ
その5「Rails初心者」が5回連続で発生したエラーをなんとか切り抜けた話。「NameError」
前回の「その4」の続きです
前回の記事☞https://qiita.com/Shota_U/items/f41a2e0f2a1e24f98fc9
ついにこれが最後のエラーです。
今回発生したエラーは、
`NameError (uninitialized constant)`
というエラーです。
このエラーの
`uninitialized constant` は、
定義したクラスを読み取ることができない。という意味だそうです。
そこで、まずファイル名とファイルパス、ファイルの中のクラス名を確認。
すると一か所、
単数形でないといけないファイル名をと複数形にしていたことが判明。すぐ直してエラーが消えました!
これは割とうっかりミス、という感じです。これまでのエラーよりは解決しやすかったかなと思います。
これで、5つすべてのエラーを解消することができました!一応、ほかの4つの記事も載せておきます
その1 https://qiita.com/Shota_U/items/1f91709704476618aa0d
その2 https://qiita.c
その4「Rails初心者」が5回連続で発生したエラーをなんとか切り抜けた話。「ArgumentError in income_Values#index」
前回の「その3」の続きです
前回の記事☞https://qiita.com/Shota_U/items/a589a080815032a24092
今回発生した新たなエラーは、
`ArgumentError in income_Values#index`
です
※すみません!エラーのスクショは撮っておりません
こちらのエラーは、
「引数の数があっていないときや、数は合っていて、期待される振る舞いを持ってはいるが、期待される値ではないときに発生する」
みたいです。
エラー文をよく見たところ、
`wrong number of arguments (given 1, expected 0)`
とありました。これは、
「引数の数がちがうよー」
「正常な引数の数は0のはずなのに1個入ってるよ」ってことらしいです
そこで引数を正しい数にしたところ、
やっと、一覧画面を表示することができました!!!エラー文を知るって大事だなぁ。。。」
しかし、今度は新規投稿ができなくなっていました。
今度は`NameError`です。
せっかく実装できた!と思ったのに
その3「Rails初心者」が5回連続で発生したエラーをなんとか切り抜けた話。「NoMethodError in IncomeValues#index」
前回の「その2」の続きです
前回の記事☞https://qiita.com/Shota_U/items/c93eb669b3f8078785eb
3つ目のエラーです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/674052/e04f710b-fa9d-9f0b-d019-428be1f94f1b.png)「NoMethodError in IncomeValues#index」
というのがでてきました。
これは、「NillClassにstrftimeなんていうメソッドはないよ」
ということみたいです
そこで、
“`
income_value.year_month.strftime(‘%Y年%m月’)
“`を
“`
income_value.year_month&.strftime(‘%Y年%m月’)
“`としたところ、無事解決できました。
しかし、
また次のエラー「ArgumentError」がでてきてしまいました。。。これは、正直心
その2「Rails初心者」が5回連続で発生したエラーをなんとか切り抜けた話。「ActiveRecord::StatementInvalid in IncomeValues#index」
前回の「その1」の続きです
前回の記事はこちら☞https://qiita.com/Shota_U/items/1f91709704476618aa0d
2つ目のエラーは
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/674052/b83ff65a-7425-96ed-d70d-d8089469de3a.png)
ということで、
「ActiveRecord::StatementInvalid in IncomeValues#index」
「データベースがおかしいよ」
ってことみたいです。
色々調べてみましたが、全く解決できませんでした。。
そこでQiitaで質問しました。すると、ありがたいことに回答をいくつかいただきました。
どうやら、controllerの
“`
IncomeValue.order(“year_month asc”)
“`
が怪しいみたく、orderの指定の仕方がおかしいようです。そこで、
“`
IncomeValue.ord
その1「Rails初心者」が5回連続で発生したエラーをなんとか切り抜けた話。「index (投稿一覧) が表示できない」
ポートフォリオの家計簿アプリ作成中、非常に躓いた箇所がありましたので備忘録として書いていきます。
何に躓いたかというと、同じところで5回連続エラーが起こったのです。
※3~4日ほどでやっと解消できました?
今回はエラーの内容と、それを解決した方法をそれぞれ書いていきます。
苦悩の連続の全てはここから始まりました。
まず、エラー画面はでていないのですが、
投稿一覧が表示されないという事態が起こりました。関係のあるコードはこちら
“`index.html.erb
<% require 'active_support/core_ext/numeric/conversions' %>収入科目の新規データ登録
登録年月を設定してください
<%= form_tag({controller: :income_values, action: :new}, {method: :post}) do %>
<% e
Ruby on Railsの木構造Gemのacts_as_treeで、N+1を消し去る
# 手元動作環境
当然、サービスインしているコードを乗せるわけにはいかないので、手元環境で似たようなコードを書いて動作検証しています。– ruby 2.7.1p83
– Rails 6.0.3.2
– acts_as_tree (2.9.1)# 木構造
古いコードを見ると、アンチパターンが多いですね。今回も同様にアンチパターンの一つである隣接リストが使われていました。さらに、N+1問題が放置され、パフォーマンス的に悪いということで対応することになりました。
今回は、たった2階層だったので、隣接リストでもあまり問題がなさそうです。## GitHub
https://github.com/amerine/acts_as_tree## 使い方
https://github.com/amerine/acts_as_tree#example 引用“`rb
class Category < ActiveRecord::Base acts_as_tree order: "name" end root = Category.create("name" => “ro
Controllerに定義するアクション一覧
#Controllerに定義するアクション一覧
RailsではWebアプリケーションの基本となる以下の7つの役割を持つアクションを用います。| アクション名 | 役割 |
|:–|:–|
| new | データを新規作成する |
| create | データを追加(保存)する |
| index | データの一覧を表示する |
| show | データの内容(詳細)を表示する |
| edit | データを更新するためのフォームを作成する |
| update | データを更新する |
| destroy | データを削除する |
【Rails入門】renderの使い方
# rendearの使い方
renderメソッドを用いることで、別のアクションを経由せずに、直接ビューを表示することができます。
**render(“フォルダ名/ファイル名”)**のように表示したいビューを指定します。
renderメソッドを使うと、redirect_toメソッドを使った場合と違い、そのアクション内で定義した@変数をビューでそのまま使うことができます。“`user_controller.rb
class UserController < ApplicationController def top @user = User.find_by(email: params[:email], password: params[:password]) if @user else render ("home/signup") end end end ```
【初心者】Rubyの配列に対する繰り返し処理色々
# 実行環境
超基本的な内容なので、実行環境に左右されないと思いますが、一応明記しておきます。
OS : macOS Catalina ver10.15.5
Ruby : 2.7.1p83## each
基本的な繰り返し処理。要素を一つづつ取り出して処理を行なっていく。
do ~ end で囲むのが基本。変数のスコープに注意。“`sample.rb
numbers = [1, 2, 4, 5, 6]total = 0
numbers.each do |num|
total += num
end
p total # 18“`
## map
配列を返してくれることが特徴。下記の処理は要素に10を足して出力している。
簡単な処理ならばdo ~ end の代わりに { }で記入可能。“`sample.rb
numbers = [1, 2, 4, 5, 6]nuadd_num = numbers.map {|num| num + 10}
p add_num
# [11, 12, 14, 15, 16]“`
## select
処理内の判定に合
Ruby: CouchDB のデータを削除 (Delete)
“`rb:couch_delete.rb
#! /usr/bin/ruby
# -*- encoding: utf-8 -*-
#
# couch_delete.rb
#
# Jul/31/2020
#
# ———————————————————————
require ‘faraday’
require ‘json’
#
# ———————————————————————
STDERR.puts “*** 開始 ***”
#
key_in = ARGV[0]
puts key_inURL=”http://localhost:5984/nagano/” + key_in
#
res = Faraday.get URLputs res.status
if res.status == 200 then
json_str = res.bodydata_aa=JSON.parse(js
Ruby: CouchDB のデータを更新 (Update)
“`rb:couch_update.rb
#! /usr/bin/ruby
# -*- encoding: utf-8 -*-
#
# couch_update.rb
#
# Jul/31/2020
#
# ———————————————————————
require ‘faraday’
require ‘json’
require ‘date’
#
# ———————————————————————
STDERR.puts “*** 開始 ***”
#
key_in = ARGV[0]
population_in = ARGV[1].to_i
puts key_in,population_inURL=”http://localhost:5984/nagano/” + key_in
#
res = Faraday.get URLputs res.status
if res.statu