- 1. NoMethodError (undefined method `upload’ for nil:NilClass):の解決法。
- 2. TypeError (no implicit conversion of Symbol into Integer)のエラー対応
- 3. esa.io.tar.gz プログラミング
- 4. Herokuデプロイ 流れメモ
- 5. Ruby 始めました
- 6. Rubyアルゴリズム
- 7. Railsチュートリアル(第6版) 第4章 まとめ
- 8. Railsチュートリアル 9章 発展的なログイン機構まとめ
- 9. 【Rails / Ruby3.0.1】Kaminari でページネーションの追加(bootstrap4)
- 10. パスワードリセットメールを送信できる時とできない時がある
- 11. Cloud9でHerokuにデプロイする手順と起こったエラー
- 12. Rails初学者によるRailsチュートリアル学習記録⑩ 第9章
- 13. Railsチュートリアル(第6版) 第3章 まとめ
- 14. じゃんけんコード
- 15. フォームを追加しよう
- 16. 文字数を算出するプログラムの実装
- 17. 閏年処理を考える
- 18. 繰り返し処理の基礎
- 19. 配列に格納された数値の合計値を算出するプログラムの実装
- 20. クラスとインスタンスを使って実装しよう③
NoMethodError (undefined method `upload’ for nil:NilClass):の解決法。
AWSのS3の導入過程でで画像を投稿すると、上記のエラーが。
環境変数のキーを確認しても間違いは無かったです。
“`
def create
@item = Item.new(item_params)
if @item.save #<=ここでエラーが出ます redirect_to root_path else render action: :new end end ``` エラーが文をコピーして検索すると、同じようなエラーの記述がありました。環境変数を使えるようにするためのコマンドsource ~/.zshrcを忘れていただけでした。
TypeError (no implicit conversion of Symbol into Integer)のエラー対応
# エラー内容
“`
TypeError (no implicit conversion of Symbol into Integer)
“`hashでjsonから値を取りに行ったら上記エラーが
状況
– rails
– ruby# エラーの原因
`no implicit conversion of Symbol into Integer`は数値が来るべきところにsymbolが来ちゃっているよという意味。hashだと思って下記で指定したんだけど
“`
[:items][:data][:price][:product]
“`配列だったので
“`
[:items][:data][0][:price][:product]
“`としたら解決。
stripeのsubscriptionを取得しに言ったんだけどよく見たら{}じゃなくて[]だった。
https://stripe.com/docs/api/subscriptions/retrieve
esa.io.tar.gz プログラミング
“`esa.io.tar.gz
esa.io/d2e-master.zip
esa.io/feedback-sync-master.zip
esa.io/hello-esa-master.zip
esa.io/html-js-projs-master.zip
esa.io/inuicon-rails-master.zip
esa.io/middleman-esa-master.zip
esa.io/nyauth-master.zip
esa.io/omniauth-esa-master.zip
“`
.tar.gzファイルを介して圧縮されたesa.ioパケット 記事で取り上げたソフトウェアのバージョンは何か、記事中のコードを実行するためにはどんな手順が必要かを書いておくと、自分の環境に当てはまるかどうかを後から読む人が判断しやすくなります。https://github.com/esaio
https://ppworks.jp/
Herokuデプロイ 流れメモ
# 背景
毎回Herokuデプロイする流れをメモ。# 使用技術
– Ruby 2.6.7
– Rails 6.0.3.6
– MySQL 5.6.51# 流れ
– (リモートリポジトリとローカルリポジトリのデータを一致させておく)
– ローカル→リモート: `git push`
– リモート→ローカル:
– リモート→ローカル(origin/master): `git fetch origin master`
– origin/master→master: `git merge origin/master`
– Herokuへpush
– `git push heroku`
– DBをリセット
– `heroku run rails db:migrate:reset RAILS_ENV=production DISABLE_DATABASE_ENVIRONMENT_CHECK=1`
– マイグレーション
– `heroku run rails db:migrate`
– シード
– `herok
Ruby 始めました
Rubyの勉強初めて2週間くらい。
右も左も分からない所からやっとそれらしい事ができるようになってきました。“`ruby:qiita.rb
puts “いくら引き落としますか?“
count = gets.chomp.to_i
total_price = 10000 – count -110if count <= total_price puts “#{count}円引き落としました。残高は#{total_price}円です。” else count >= total_price
puts “残高不足です“
end
“`やっと出来た!と思ったら4000までは順調に動きましたが5000を入力すると表示されたのは残高不足・・・
あれ?
なんで?
まだ残高あるはずやろ?
何が間違ってるのかも分からなかった為、質問した結果
【count が5000のとき total_price = 10000 – count -110 は4890になるので count <= total_price は成立しませんね。】 最初は???となりましたがよく考えると理解出来ました。
Rubyアルゴリズム
## 問題
Given an integer num, repeatedly add all its digits until the result has only one digit, and return it.Example 1:
“`
Input: num = 38
Output: 2
Explanation: The process is
38 –> 3 + 8 –> 11
11 –> 1 + 1 –> 2
Since 2 has only one digit, return it.
“`
Example 2:“`
Input: num = 0
Output: 0
“`Constraints:
0 <= num <= 231 - 1 Follow up: Could you do it without any loop/recursion in O(1) runtime? ## 私の回答 ```ruby def add_digits(num) int = num.digits.sum while int.to_s.
Railsチュートリアル(第6版) 第4章 まとめ
#第4章
第4章では、文法や構造といった部分に着目し勉強することが大半となる。
基本となるところなので、内容を押さえておきたい章である。
この章に来るまでは、`rails`の便利機能によって進めてきたが、今回はrubyに注目することとなる。###カスタムヘルパー
“`erb:app/views/layouts/application.htmlえrb:
<%= stylesheet_link_tag 'application', media: 'all', 'data-turbolinks-track': 'reload' %>
“`Railsの組み込み関数`stylesheet_link_tag`を使って、`application.css`をすべてのメディアタイプで使えるようにしてる。
一見シンプルに見える箇所だが、Rubyの4つの概念がある。
・Railsの組み込み関数
・カッコを使わないメソッド呼び出し
・シンボル
・ハッシュQ:カスタムヘルパーとは?
A:新しく作ったメソッドの事をカス
Railsチュートリアル 9章 発展的なログイン機構まとめ
#Remember me 機能#
Railsチュートリアル第9章ではRemember me 機能を実装していく。この機能を使うことで、ユーザーが明示的にログアウトしない限り、ログイン状態を維持できる。
この記事はRailsチュートリアル第9章をまとめたものであり、第8章までのコードは実装済みである。また、usersテーブルにremember_digestカラムも追加済みである。セッションの永続化の第一歩として記憶トークン(remembere token)を生成し、cookies メソッドによる永続的cookies の作成。
安全性の高い記憶ダイジェスト(remember digest)によるトークン認証に記憶トークン(remembere token)を活用する。
トークンとは:
パスワードの平文と同じような秘匿されるべき情報。パスワードとトークンの違いはパスワードは使用者が作成するのに対し、トークンはコンピューターなどが生成。次の方針で永続的セッションを作成していく
1、記憶トークン(remember token)にはランダムな文字列を生成して用いる。
2、ブラウザのc
【Rails / Ruby3.0.1】Kaminari でページネーションの追加(bootstrap4)
#はじめに
他の記事を見ながらKaminariでページネーションを追加しようとしたら、bootstrapが適用されなかったので(rubyのバージョンの影響かも?)他のやり方で上手くいったものをメモします。#環境
・ Rails 6.0.3.7
・ ruby 3.0.1
・ bootstrap4#Kaminariのインストール
Gemfileに以下を追加する。“`ruby:Gemfile
gem ‘kaminari’
gem ‘bootstrap4-kaminari-views’
“`追加したらターミナルで、
“`
bundle install
“`これで準備は整いました!
#コントローラー
例として次のように記述する。“`ruby:app/controllers/bookscontroller.rb
@books = Books.all.page(params[:page]).per(10)
“`#ビュー
ビューには以下のようにしてbootstrapを適用したものを作成する。“`erb:app/views/books/index.htm
パスワードリセットメールを送信できる時とできない時がある
#ActionMailerでたまにメールを送信できない時(sorcery使用時)
ActionMailerにはメールの送信間隔が設定されており、連続でメールを送信してもメールが送信できないことがある。
###解決策
“`ruby:config/initializers/sorcery.rb
# user.reset_password_time_between_emails =
“`
コメントアウトになっている部分があるので、ここを“`ruby:config/initializers/sorcery.rb
user.reset_password_time_between_emails = 1
“`
メールの送信間隔を直接指定する形で設定してやれば連続でメールを送れるようになる以下参考記事
Cloud9でHerokuにデプロイする手順と起こったエラー
Ruby on Rails Tutorial第1章を進めていた際にエラーが発生。
#環境
開発環境は、
・Cloud9
・Ubuntu Server 18.04 LTS
・Ruby -v 2.6.3
・Rails -v 6.0.3#今回起こったエラー
Rails Tutorial 2周目をしながらオリジナルアプリを開発するというタイミングでのエラーです。・`$ rails server`に失敗したときのエラーコード。
“`
$ rails s
.
.
.
Webpacker configuration file not found /home/ubuntu/environment/first_app/config/webpacker.yml. Please run rails webpacker:install Error: No such file or directory @ rb_sysopen – /home/ubuntu/environment/first_app/config/webpacker.yml (RuntimeError)
“`・Herokuへ
Rails初学者によるRailsチュートリアル学習記録⑩ 第9章
#目次
– [1. はじめに](#1-はじめに)
– [2. 第9章の概要](#2-第9章の概要)
– [3. 学習内容](#3-学習内容)
– [4. 終わりに](#4-終わりに)#1. はじめに
– この記事は、Rails初学者の工業大学三年生がRailsチュートリアルの学習記録を
つけるための記事です。
– 筆者自体がRailsやWebについて知識が少ないので、内容の解釈などに
間違いがある可能性があります。(その時はコメントで指摘してくださると助かります!)
– Railsチュートリアル内ではRailsの内容以外にも、gitでのバージョン管理やHerokuを使ったデプロイも
学習しますが、gitに関しては既に私が学習済みのため学習記録には記述しません。
– 演習の記録も省略します。#2. 第9章の概要
前回実装したログイン機能は一度ログインしても、ブラウザを閉じた時点でログイン状態が破棄されてしまいます。
この章では、ユーザーがログアウトを実行しない限りログイン状態を維持できるRemember Me機能を実装して、
その機能を利用するかどうかをチェック
Railsチュートリアル(第6版) 第3章 まとめ
#第3章
第3章からは、Twitterみたいなアプリケーションをひたすら作っていく作業になる。
この章では、ほぼ静的ページを作ることが目標
(スピード感重視で進めるため、詳細な説明を飛ばす箇所があります)##セットアップ
セットアップの手順①railsにてニューアプリを作成
“`
$ rails _6.0.3_ new sample_app
“`②Gemfile設定
“`
source ‘https://rubygems.org’
git_source(:github) { |repo| “https://github.com/#{repo}.git” }gem ‘rails’, ‘6.0.3’
gem ‘puma’, ‘4.3.6’
gem ‘sass-rails’, ‘5.1.0’
gem ‘webpacker’, ‘4.0.7’
gem ‘turbolinks’, ‘5.2.0’
gem ‘jbuilder’, ‘2.9.1’
gem ‘bootsnap’, ‘1.4.5’, require: falsegroup :
じゃんけんコード
プログラムとじゃんけんをするプログラムを実装。
勝った場合 “あなたの勝ちです”と表示させる
負けた場合 “あなたの負けです”と表示させる
あいこの場合 “あいこで”と表示させたあともう一度じゃんけんをさせる“`:ターミナル
最初はグー、じゃんけん…
[0]:グー
[1]:チョキ
[2]:パー
# 入力待ち
“`
出す手を入力したあと(勝った場合)“`:ターミナル
最初はグー、じゃんけん…
[0]:グー
[1]:チョキ
[2]:パー
0
あなたの手:グー, わたしの手:チョキ
あなたの勝ちです
“`出す手を入力したあと(あいこの場合)
“`:ターミナル
最初はグー、じゃんけん…
[0]:グー
[1]:チョキ
[2]:パー
0
あなたの手:グー, わたしの手:グー
あいこで
[0]:グー
[1]:チョキ
[2]:パー
# 入力待ち
“`雛形
–
“`rb
def janken
puts “[0]:グー\n[1]:チョキ\n[2]:パー”# ターミナルからじゃんけんの手を入力
player_hand =# 乱数で
フォームを追加しよう
フォームの実装
–
新規投稿フォームとして、以下のようにフォームを記述。このフォームには誤っている場所が2つありました。“`rb
<%= form_with url: "/posts", method: :create, local: true do |form| %>
<%= format.text_field :content %>
<%= format.submit '投稿する' %>
<% end %>
“`①HTTPメソッドがcreateという存在しないメソッドになっている
②パイプで囲まれた変数(|form|)と、フォーム内のヘルパーで使用している変数が異なっている(formatになっている)
新規投稿をするときのHTTPメソッドはPOSTで。また、パイプで囲まれた変数名と、フォーム内のヘルパーで使用している変数名は一致する必要があり。
文字数を算出するプログラムの実装
概要
–
対象となる文字列から特定の文字列の数を算出し、その数を出力するプログラムを実装。次の要件を満たすcount_hiメソッドを実装。対象となる文字列の中から、”hi”という特定の文字列の数を取得すること
上記で取得した数を出力すること雛形
–
“`rb
def count_hi(str)
# 処理を記述
end# 呼び出し例(引数には対象となる文字列を指定します)
count_hi(‘abc hi ho’)
出力例:
count_hi(‘abc hi ho’) → 1
count_hi(‘ABChi hi’) → 2
count_hi(‘hihi’) → 2
“`scanメソッド
–
scanメソッドは、対象の要素から引数で指定した文字列を一致を調査し、配列として返すメソッド。“`rb
“foobarbazfoobarbaz”.scan(“ba”)
=> [“ba”, “ba”, “ba”, “ba”]
“`“`rb:完成コード
def count_hi(str)
puts str.scan(“hi”).length
end
“`
閏年処理を考える
ある年のある月の日数を求めるメソッドを作ります。2月、つまり閏年かどうかです。
閏年かどうかは以下の判定基準があります。① その年が4で割り切れる場合は閏年の可能性がある
–
まず、閏年は4で割り切れる年であることが最低条件ですね。4で割り切れる年は閏年である可能性です。ただし、4で割り切れるだけでは閏年とはかぎりません。例外が1つあります。② 年が100で割り切れて400で割り切れない場合は閏年ではない
–厄介な条件です。その年が4で割り切れても100で割り切れて400で割り切れない場合は閏年でない。
具体的な例
–|2000年|
|–|
|2000年は4で割り切れますね。そして100でも割り切れます。さらに400でも割り切れます。100でも400でも割り切れるので、2000年は閏年となります||1900年|
|-|
|1900年は4で割り切れますね。そして100でも割り切れます。ただし、400では割り切れません。100で割り切れて、400で割り切れないため、1900年は閏年ではありません|以上をふまえて閏年の判定。
雛形
–
“`rb:ques
繰り返し処理の基礎
次の仕様を満たすアプリケーションを作成。
仕様
–
①「[0]:カロリーを表示する、[1]:終了する」という選択肢が表示され、数字を入力することができる
② 0を入力すると「500kcal」と表示され、上記条件①が繰り返し実行される。
③ 1を入力するとアプリケーションが終了するwhile
–
条件によって繰り返し処理を行う場合はwhileを使用。
以下のように使用します。“`rb
while 条件式 do
処理するアクション
end
“`もしプログラムを終了させず同じ処理を繰り返すループ処理を行う場合は、以下のようにします。
“`rb
while true do
処理するアクション
end
“`
“`rb:実装コード
while true do
puts “[0]:カロリーを表示する”
puts “[1]:終了する”
input = gets.to_iif input == 0
puts “500kcal”
elsif input == 1
exit
end
end
“`while tru
配列に格納された数値の合計値を算出するプログラムの実装
概要
–
配列に格納された3つの数値の合計を算出するプログラムを実装。次の要件を満たすlone_sumメソッドを実装。配列に格納された3つの数値の合計を出力する
ただし、同じ数値が2つ以上含まれている場合、その数値は合計する要素に含めない
雛形
–“`rb
def lone_sum(ary)
# 処理を記述
end
“`
“`rb:呼び出し例
lone_sum([1, 2, 3])
出力例
lone_sum([1, 2, 3]) → 6
lone_sum([3, 2, 3]) → 2
lone_sum([3, 3, 3]) → 0
“`
“`rb
def lone_sum(ary)
# 配列から、重複しない要素のみ取り出す
uniq_nums = []
ary.each do |num|
count = 0
ary.each do |i|
if num == i
count += 1
end
end
if count < 2 uniq_nums << num
クラスとインスタンスを使って実装しよう③
以下のプログラムを実行するとエラーが起きます。
①エラーが起きた原因
②正しいソースコード“`rb:実行したプログラム
class Student
def set_name(name)
@name = name
enddef self.introduce
puts “私の名前は#{@name}です。”
end
endstudent = Student.new
student.set_name(“山田太郎”)
student.introduce
“`①エラーが起きた原因
–
Studentクラスのメソッドintroduceがインスタンスメソッドではなくクラスメソッドになってしまっていること(メソッドの定義にself.がついている)。“`rb:②正しいソースコード
class Student
def set_name(name)
@name = name
enddef introduce
puts “私の名前は#{@name}です。”
end
endstudent = Student.ne