- 1. RSpecのControllerテストでNoMethodError: undefined method `get’ for xxxx と表示される
- 2. Ruby技術者認定試験 Goldの直前に振り返っておきたいところ
- 3. railsにおける.(ドット)の役割
- 4. 整数のそれぞれの桁の数字を求める
- 5. 【Rails】「rails g controller コントローラー名」を実行すると…?
- 6. Twitterのシェアボタンを実装
- 7. 【Rails】The asset “application.css” is not present in the asset pipeline. の解消方法
- 8. debug.gemでDocker上のRubyをデバッグしたい
- 9. 【Ruby】eachの入れ子
- 10. 【書評】Ruby初学者がプロを目指す人のためのRuby入門改訂第2版を読んで学んだこと
- 11. 【シンボルについて】「:hoge」だったり「 hoge:」だったり【ややこしいから整理した】
- 12. rails g modelを実行するとどうなるか?そしてその後にやるべきこととは?
- 13. Rails7をちょっと試す(Bootstrap編)
- 14. [py2rb] 直列化
- 15. [Rails][devise]追加したカラムにストロングパラメーターを使えるようにしよう
- 16. Webの仕組みとHTTP通信について
- 17. formatメソッド(Ruby)
- 18. CRUD処理(rails6)エラー解決
- 19. return/break/nextの使い方(Ruby)
- 20. 【Ruby】条件分岐 if文 gets to_iメソッド
RSpecのControllerテストでNoMethodError: undefined method `get’ for xxxx と表示される
# はじめに
RailsでRSpecを使用してcontrollerのテスト時のエラー NoMethodError: undefined method `get’ for xxx について
# 目次
1. [Rspecでのバージョンの違い](#Chapter1)
1. [エラーの原因](#Chapter2)
1. [参考文献](#reference)
# Rspecでのバージョンの違い
Rspec3以降ではデフォルトでファイルの場所から自動的に推測する機能がなくなっています。
Rspec3以降ではcontorollerのテストをする時は指定する必要があるようです。
# エラーの原因
**1.typeを指定していない**(今回の私)“`rb
# type: :controller または type: :request とする必要あり
RSpec.describe Api::V1::PostsController
Ruby技術者認定試験 Goldの直前に振り返っておきたいところ
# 最初に
Ruby技術者認定試験 Goldを受けて、合格しました。
本番では多数の問題が、合格教本の問題と同じか類題でした。
勉強方法として合格教本とRExを解けるように勉強していけば、十分だと思います。合格できた体験から、直前で振り返っておきたいことをまとめました。
# 合格教本 Gold 演習問題 基礎力確認問題 30問
「合格教本」の第8章「Gold 演習問題」の「基礎力確認問題 30問」から、
自分が使わないので覚えにくいところを中心に直前に見直したいものをまとめました。あと、同じ問題が出題されたと書いてるところがありますが、
問題を持ち帰れないため、そう思っただけで、ちゃんと比較したら違うかもしれません。– `-I`オプション
– 引数で指定したディレクトリを、変数`$LOAD_PATH`(配列)に追加する。
– 環境変数`RUBYLIB`も、変数`$LOAD_PATH`(配列)に追加する。
– ただし、`-I`オプションでの指定が、環境変数`RUBYLIB`に追加されるわけではない。
– 引数で指定したディレクトリは、`require`
railsにおける.(ドット)の役割
こんにちは!石田佳介です!
僕がインターン生として実務に入っていて、一つ気になったことがあったのです。
rubyのコードでこのようなコードを見たことがありませんか?
“`
<%= @books.each do |book| %><%= book.title %>
<%= book.body %>
<% end %>
“`
この書き方って不自然じゃないですか?
rubyの公式のドキュメントにもこう書いてありました“`
xxx.yyy
オブジェクトのメソッド
“`[ruby公式ドキュメント](https://docs.ruby-lang.org/ja/latest/doc/symref.html#period)
公式ドキュメントのいう通りだとするならば、titleやbookはメソッドになるよなっておもったわけです。titleやbookってカラムじゃね?って思ったので、変だなって思いました。
そこで自分なりに調べてまとめましたので、
整数のそれぞれの桁の数字を求める
学習したことのアウトプットとして
勉強をしていると「3桁のそれぞれの桁の数字を足すプログラムの作成」というものがあった。
今まで桁を取り出す方法とか考えたことがなく、勉強になったため記事にしてみる。## それぞれの桁の数字の取り出し方
“`ruby
num = 3456# 千の位
result_1000 = (num / 1000) % 10
# 百の位
result_100 = (num / 100) % 10
# 十の位
result_10 = (num / 10) % 10
# 一の位
result_1 = (num / 1) % 10puts result_1000 # => 3
puts result_100 # => 4
puts result_10 # => 5
puts result_1 # => 6
“`### ちなみに
一万の位の場合は
(num/`10000`) % 10 で取り出すことが可能。以上。法則は分かりやすいので特別難しいことはないかと。
※補足等ありましたらコメントいただけると幸いです。
【Rails】「rails g controller コントローラー名」を実行すると…?
## 「rails g controller コントローラー名」を実行すると…?
・コントローラー名(複数形)+controllerという名前のcontrollerが生成される。
・viewsフォルダの中にコントローラー名と同名のフォルダが作られる。
Twitterのシェアボタンを実装
# 目的
今回、以下の画像の下の方にあるTwitterシェアボタンの実装をどうやったかご紹介します。
同じように実装したいと思っている人のお役に立てれば嬉しいです。[![Image from Gyazo](https://i.gyazo.com/a98adf439feb3f86c27b89fd23d546a6.jpg)](https://gyazo.com/a98adf439feb3f86c27b89fd23d546a6)
Twitterのボタンをクリックすると別タブでTwitterのページが表示され以下の画像のように
文字やシェアしたいURLが表示されツイートできる状態になります。[![Image from Gyazo](https://i.gyazo.com/7bf50f1b79b39f19044029ba061c257e.png)](https://gyazo.com/7bf50f1b79b39f19044029ba061c257e)
このようにシェアしたいページをボタンを押せばシェアできるようになっています。
# 実装
結論から言うと以下のように実装しています
実
【Rails】The asset “application.css” is not present in the asset pipeline. の解消方法
railsアプリケーションの開発を行っていたら、アクセス時に以下の画面が出てきた。
(関係ないかもですが私はRspecを導入したら発生しました。)![スクリーンショット 2022-01-17 17.03.24.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1292797/9e6fef68-e9ca-4934-0f61-510214a9b83e.png)
# 環境
ruby 2.7.5
Ruby on Rails 6.1.4.4
Docker 20.10.11 / docker-compose 2.2.1
PostgreSQL 14.1#原因
`log/production.log`を確認したところ、以下のエラーが出ていた。
“`ruby
ActionView::Template::Error (The asset “application.css” is not present in the asset pipeline.):
“`#解決策
`config/environme
debug.gemでDocker上のRubyをデバッグしたい
# やりたいこと
[ruby/debug: Debugging functionality for Ruby](https://github.com/ruby/debug)
を使って、Dockerコンテナ上で起動したプログラムをデバッグする
# 参考
– [Ruby 3.1 の debug.gem を自慢したい – クックパッド開発者ブログ] (https://techlife.cookpad.com/entry/2021/12/27/202133)
# 方法
各環境で下のようなコマンドを実行する。
このとき、利用したいコンテナ側のポートを公開しておく。“`bash
# コンテナ側
$ rdbg -O –host=0.0.0.0 –port={任意のポート} main.rb
# ホスト側
$ rdbg -A localhost {任意のポート}
“`# サンプル
## 準備
“`bash
# 構成
$ tree app
app
└── main.rb
“`“`main.rb
a = 1
b = 2
puts a
puts b
c = a + b
【Ruby】eachの入れ子
※初心者向け
※アウトプット練習の為開発環境
rails 6.0.4.4
ruby 2.6.5##問題内容
以下のように、果物の名前と値段が入った配列があります。
この配列を用いて、果物の名前とそれぞれの合計額が出力される
コードを記述してください。“`ruby
fruits_price = [[“apple”, [200, 250, 220]], [“orange”, [100, 120, 80]], [“melon”, [1200, 1500]]]
“`“`
(出力)
appleの合計金額は670円です
orangeの合計金額は300円です
melonの合計金額は2700円です
“`##解答
“`ruby
fruits_price = [[“apple”, [200, 250, 220]], [“orange”, [100, 120, 80]], [“melon”, [1200, 1500]]]
fruits_price.each do |fruit|
sum = 0
fruit[1].each do |price|
sum +=
【書評】Ruby初学者がプロを目指す人のためのRuby入門改訂第2版を読んで学んだこと
## はじめに
久しぶりの投稿になります。Tassyです。
この度、「プロを目指すための人のRuby入門 改訂第2版」を読ませていただきました。
https://blog.jnito.com/entry/2021/11/11/082704
まさか、当選するとは!!と言う気持ちと感謝の気持ちでいっぱいです。
## プログラミング歴
– 受託開発企業で1年3ヶ月働いている
– 基本的にPHP(Laravel)で実装することが多い
– RubyはProgateで一通り触ったことがあるくらい
– 実際にRuby(Ruby on Rails)を使ってアプリを開発したことはない
Rubyについてはど素人です。## 学べたこと
– Rubyの基本構文(ハッシュ、ブロックetc)
– オブジェクト指向プログラミングとは
– テスト駆動開発の実践
– 正規表現について
– クラスについて
– yeild、Procについて
– パターンマッチについてRubyの基本的な構文を学べるのはもちろんのこと、実際にirbを使って手を動かしながらコードを確認できるので、楽しい。そう、Rubyを書くのは
【シンボルについて】「:hoge」だったり「 hoge:」だったり【ややこしいから整理した】
“`
# 普通のハッシュ (ハッシュの値の呼び方は、 hash[“key1”] )
hash = {“key1” => value1, “key2” => value2}# 前置コロンを使う (ハッシュの値の呼び方は、 hash[:key1] )
hash = {:key1 => value1, :key2 => value2}# 後置コロンを使う (ハッシュの値の呼び方は、 hash[:key1] )
hash = {key1: value1, key2: value2}
“`## 普通のハッシュ
キー名を文字列で指定して、「=>」でつないでキーに対応する値を記載します。
ハッシュの値を呼ぶ時は、キー名の文字列を指定します。## 前置コロン(シンボル)を使う
まず、コロンをキー名の前に書く前置コロンは、シンボルを表します。シンボルとは、Rubyのオブジェクトのひとつの種類です。文字列の代わりに使うこともできますが、必ずしも文字列と同じ挙動をするわけではなく別物です。
ハッシュでは、キー名指定の部分をシンボルで置き換えることができ
rails g modelを実行するとどうなるか?そしてその後にやるべきこととは?
## rails g modelをすると
①db/migrateフォルダに新しくマイグレーションが作成されます。
②新しく作られたマイグレーションファイルの中身をざっと確認する。
③以下のコマンドでデータベースへと反映させる。“`
rails db:migrate#rails g modelでモデルを作成したあとは、このコマンドを実行してデータベースにちゃんと反映させること!
“`マイグレーションファイルとは?
マイグレーションファイルは、データベースを生成する際の設計図になるものです。 また、マイグレーションファイルを実行することで、記述した内容に基づいたデータテーブルが生成されます。>引用元:
「マイグレーションファイルとは?」より一部抜粋
https://qiita.com/jackie0922youhei/items/09a7b081e40506f07358#:~:text=%E3%83%9E%E3%82%A4%E3%82%B0%E3%83%AC%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3%E3%83%95%E3%82%A1%E
Rails7をちょっと試す(Bootstrap編)
## はじめに
Rails 7.0.0 では、[Bootstrap](https://getbootstrap.com/) が簡単に利用できるようになっています。
今回は、Bootstrap を試してみたいと思います。Bootstrap を使うためには、npm と yarn が必要です。
以下のバージョンで確認しました。
– Ruby 3.0.2
– Rails 7.0.0
– npm 8.3.0
– yarn 1.22.17## Rails プロジェクトを作る
新しくRailsプロジェクトを作ります。このとき `–css` を指定します。
(データベースオプションを指定しているのに深い意味はありません。)“`shell
mkdir rails_sandbox
cd rails_sandbox
rails new . –database=postgresql –css=bootstrap
“`## scaffold を実行する
scaffold を使って簡単なCRUDを作ります。 `Bootstrap` の確認をしたいだけなので適当です。
“`s
[py2rb] 直列化
# はじめに
移植やってます。
( from python 3.7 to ruby 2.7 )
# 直列化 (Python)
“`python
import pickle
self.assertEqual(dict_, pickle.loads(pickle.dumps(dict_)))
“`
https://docs.python.org/ja/3.7/library/pickle.htmlオブジェクトと、オブジェクトを直列化しさらに復元されたオブジェクトを比較していますが、Equal にならないこともあるのでしょうかねえ?
# 直列化 (Ruby)
“`ruby
assert_equal dict_, Marshal.load(Marshal.dump(dict_))
“`
https://www.shoeisha.co.jp/book/detail/9784798168845独習Ruby 330p
> 7.2.7 オブジェクトのシリアライズここでは、dumpをオーバーライドして特定のデータのみシリアライズする例が紹介されています。
# メモ
+ Python
[Rails][devise]追加したカラムにストロングパラメーターを使えるようにしよう
備忘録として
ユーザー管理機能を実装できる**devise**
デフォルトとして`「Eメールアドレス」「パスワード」`のカラムがすでに存在しており、ストロングパラメーターも使用できるが、自分で追加するカラム(ユーザー名など)にはストロングパラメーターは使えない状態なので、使えるようように記述する必要がある。### 前提
– deviseを導入済み→[deviseの導入手順](https://qiita.com/Shi-raCanth/items/ce98a39800401cc77ee0)
– マイグレーションファイルでカラムを追加している## application_controller.rbファイル
すべてのコントローラーが継承しているファイル。
ここに処理を記述しておくことで、すべてのコントローラーで共通となる処理を作ることができる。
`deviseの処理を行うコントローラーはGem内に記述されているため編集することができない`ので、このapplication_controller.rbを編集していく。## devise_parameter_sanitizerメソッド
Webの仕組みとHTTP通信について
##ブラウザとサーバー
ブラウザ:今表示されている画面
サーバー:様々なデータを保存している大きなPCのイメージブラウザではサーバーからファイルをダウンロードしてきて表示している。ファイルの中身にはHTML、CSS、JavaScriptなどの情報が格納されている。
(ブラウザ) ←←←←← (サーバー)
ファイル
(HTML、CSS、JS)##HTTP通信について
HTTPとはブラウザとサーバーのやりとりの方法
基本は、リクエストとレスポンスリクエスト
→→→→→
(ブラウザ) (サーバー)
←←←←←
レスポンスリクエストで欲しい情報をサーバーに投げて、サーバーがその情報を返す。
このリクエストとレスポンスのやりとりのルールを作るのがサーバーサイド言語。##HTTPの基本のメソッド4つ
###①GET データの取得
Webページを表示するときに使うこのページみたい
→→→→→
(ブラウザ) (サーバー)
←←←←←
はい、ペー
formatメソッド(Ruby)
Ruby3.1 Kernelモジュールformat
#sprintf(string print formatted)フォーマット
formatの記述は『%指示子』が基本
指示子は、引数の型の解釈を示し、省略できない
・文字列を表す指示子:c,s,p
・整数を表す指示子:d,i,u,b,B,o,x,X
・浮動小数点数を表す指示子:f,g,e,E,G“`ruby
#『%d又は%i』引数の数値を10進表現の整数として出力する
#整数でない場合はto_iと同規則で整数に変換する
format(“%d”,3.5)
#=> “3”
format(“%d”,”0b1010″) #0b(2進数)
#=> “10”#『%s』は文字列を出力する
v = “moji”
5.times do |i|
if i % 2 == 0
puts format(“文字列%d(%s)”, i, v)
end
end
#=>
“文字列0(m
CRUD処理(rails6)エラー解決
#CRUD処理を実装中に発生したエラーについてのアウトプット。
##エラー内容
投稿した情報を削除しようとした時に発生したエラー。
削除なのにHTTPメソッドがGET、本来はDELETE.![スクリーンショット 2022-01-09 14.51.45.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2505299/80d052a8-cf80-e74a-212b-ea65fdae8a66.png)
##考えられる原因
1.ルーティングが間違っている。
2.コントローラーアクション間違い
3.ビューファイル記述間違い##エラー解消の流れ
1~3が間違っていないか確認。“`
ルーティング
delete ‘/users/:id’, to: ‘users#destroy’コントローラー
def destroy
user = User.find(params[:id])
user.destroy
end削除ボタン追加
<%= link_to '削
return/break/nextの使い方(Ruby)
Ruby3.1
制御構造return
制御構造break
制御構造next#return
Rubyのようなオブジェクト指向の言語の関数をメソッドと呼ぶ
breakは式の値を戻り値としてメソッドを終了する“`ruby
def ex
10.times do |i|
if i == 7
return i
end
end
end
#メソッドexを実行します(戻り値はi)
ex
#=> 7#戻り値を省略するとnilが返る
def ex
10.times
【Ruby】条件分岐 if文 gets to_iメソッド
※初心者向け
※アウトプット練習の為開発環境
rails 6.0.4.4
ruby 2.6.5##問題内容
ターミナルから数字を入力して、数字に応じて以下のように出力するプログラムを書いてください。**・10以下なら10以下の数字です**
**・10より大きい数値なら10より大きい数字です**
**・10以下でかつ0以下なら0以下の数字です**ソースコードは以下の雛形を使ってください。
“`ruby
input = gets.to_i# ここからソースコードを書いてください
“`##解答
“`ruby
input = gets.to_iif input <= 0 puts "0以下の数字です" elsif input <= 10 puts "10以下の数字です" else puts "10より大きい数字です" end ``` ##解説 **①ターミナルから数値を入力する書き方** **②条件分岐の書き方** の2つに分けて解説します。 **①ターミナルから数値を入力する書き方** ターミナルから数値を入力するには**gets**とい