- 1. Lintの使い方
- 2. accepts_nested_attributes_for で更新するモデルに対するバリデーションエラー(ActiveModel::NestedError)を外部からセットする方法
- 3. rbenvでrubyのバージョンを指定する方法
- 4. 100日後くらいに個人開発するぞ!day037
- 5. Topページを絞り込みたい!
- 6. 【HTML/CSS/レスポンシブ】PCとモバイルで表示画像を変える方法
- 7. 【RSpec / Rails】画像投稿機能の結合テストコード
- 8. rack gemの脆弱性CVE-2022-30122, CVE-2022-30123について
- 9. [Rails] コードに全角スペースが混ざるとCSSレイアウトに影響が出る事がある
- 10. ?【初学者用】RSpecでテストコードを書こう!【概念・準備】
- 11. Rails × chart.js でサウナ活動(投稿)データに連動するラベル付きの円グラフを作ってみた。
- 12. git cloune
- 13. 【Rails/System Spec】サポートモジュールで結合テストコードの記述を短くする(ログイン動作をまとめる)
- 14. 【Rails/System Spec】結合テストコードの書き方(新規登録に関するテストコード)
- 15. 【Rails/System Spec/Capybara】結合テストコードを書くときによく使う表現 一例
- 16. 【Ruby+rubocop】RuboCopでコーディングチェックする。
- 17. 本番環境でプリコンパイルができませんよ。。
- 18. railsのform_withにおけるselectメソッドの初期値設定方法
- 19. Ruby と crystal で解く AtCoder ABC253 C
- 20. rubyの配列で、同じ値の個数を数える
Lintの使い方
rubocopとは慣習的でないRailsのコードを発見し、それを簡単に修正してくれる便利なツール。
rubocopの正誤表を見るには、“`EmptyLinesAroundClassBody“`でgoogle検索をかける。もしくは下のURL。
“`
https://www.rubydoc.info/gems/rubocop/RuboCop/Cop/Layout/EmptyLinesAroundClassBody
“`Rubocopでテストを実行するにはターミナルで
“`
bundle exec rubocop
“`
を実行する。rubocopは間違いを自動的に修正してくれるコマンドがある。
“`
bundle exec rubocop –auto-correct
“`
これでほとんどの間違いは解消してくれる。上のコマンドでも解消してくれない例もある。例えばif文などである。
その場合は手動で修正する必要がある。
accepts_nested_attributes_for で更新するモデルに対するバリデーションエラー(ActiveModel::NestedError)を外部からセットする方法
## はじめに
Railsでは `accepts_nested_attributes_for` を使って、`has_many`関連する子レコードを1つのフォームで更新することができます。
イメージとしてはこんな感じです。![sample.002.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/7465/fbd1d0e0-3c36-dcaf-715c-a787fbce39b4.jpeg)
上の画面では以下のようなBookモデルと、それに関連するAuthorモデルを更新するフォームです。
(本と著者はmany-to-many関連だろう、というツッコミが来そうですが、説明のために単純化してるので気にしないでください)“`ruby
class Book < ApplicationRecord has_many :authors, dependent: :destroy accepts_nested_attributes_for :authors, allow_destroy: true
rbenvでrubyのバージョンを指定する方法
## OSレベルでの指定
“`
$ rbenv global [バージョン]
“`## ディレクトリレベルでの指定
“`
$ rbenv local [バージョン]
“`
上記コマンドを実行すると、実行フォルダに.ruby-versionというファイルが作成される。
その中にRubyのバージョンが記述されている。
RailsのPJなどの場合、プロジェクトのルートフォルダにこのファイルを作成し、共有しておくことでプロジェクト毎にRubyのバージョンを共有することが可能。## シェルレベルでの指定
“`
$ rbenv shell [バージョン]
“`## 環境変数でのバージョン指定
“`
RBENV_VERSION=[バージョン]
“`
100日後くらいに個人開発するぞ!day037
## 今日はRubyを動かしてみた!
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2632394/af79e29a-696c-7524-648e-6a5bfcd239a4.png)
## 今日の学び
### Rubyとは
* RubyはWEBアプリケーションシステムをつくるためのプログラミング言語
* PHPやPythonと類似### Rubyで文字を出力する方法
* `puts “テキスト”`というコードを書くと”テキスト”がコンソールに出力される### コメントを書く方法
* `# テキスト`と書くとその行はコメントになりコンソールには出力されない### 四則演算の結果を出力する方法
* `puts 計算式`で四則演算の結果を出力できる
* 例:「4+2」の結果を出力したい場合
* `puts 4+2`
* 「%」を用いると割り算の余りを計算できる
* 例:「9÷2」の余りを出力したい場合
* `puts 9%2
Topページを絞り込みたい!
# 【Rails】Topページを絞り込むページ作成!
## はじめに
本記事ではTOPページで検索したものを他ページで表示するコードを記載しています## 前提
– 記事のテーブルはtweets
– tweetsで検索する文字列はbody
– indexページ(index.html.erb)に検索フォーム、searchページ(search.html.erb)検索結果を表示
# 手順
## search.html.erb作成
↑の名前のファイルを自分のテーブル名のViewファイルの中に作成しましょう!
その中に一度自分のindexページ(index.html.erb)をコピペして入れておきましょう!
何かindexページと違う文字など入れておくとわかりやすいです?## ルーティング設定
“`ruby:config/routes.rb
get ‘search’ => ‘tweets#search’
“`
## 検索フォーム作成
“`erb:index.html.erb<%= form_with url: sea【HTML/CSS/レスポンシブ】PCとモバイルで表示画像を変える方法
## 初めに
こちらはHTMLとCSSのみで、PCとモバイルで表示画像を変える方法(画像)をまとめた記事です。
Railsで実装した方法も併せてご紹介しています。## 手順
#### ①HTMLにviewportを読み込ませる
レスポンシブに対応させるため、HTMLのhead内にviewportを読み込ませます。
“`sample.html
サイトのタイトル
“`#### ②HTMLに表示させたい画像を記述
PC、モバイルで表示させたい画像2枚にそれぞれ違う名前のクラス名を追加します。
例
・class=”pc”
・class=”mobile”“`sample.html
【RSpec / Rails】画像投稿機能の結合テストコード## 初めに
前回の結合テストコードの書き方(新規登録に関するテストコード)に引き続き
今回は画像投稿機能の結合テストコードを実装しました。
次の機会に行う際、抜け漏れがないよう記録していきたいと思います。## 結合テストコードを書く手順
### ①結合テストコードを書くためのファイルを生成する
今回は画像投稿機能に関する結合テストコードを書いていきます。
“`
% rails g rspec:system items
“`
生成されたファイル
spec/system/items_spec.rb—
以下のようなファイル構成になっていれば成功です。
“`
? spec
∟ ? factories
? models
? requests
? system
∟ users_spec.rb ←前回生成したファイル
rack gemの脆弱性CVE-2022-30122, CVE-2022-30123について
gem [rack](https://github.com/rack/rack)の脆弱性[CVE-2022-30122](https://discuss.rubyonrails.org/t/cve-2022-30122-denial-of-service-vulnerability-in-rack-multipart-parsing/80729), [CVE-2022-30123](https://discuss.rubyonrails.org/t/cve-2022-30123-possible-shell-escape-sequence-injection-vulnerability-in-rack/80728)について
# CVE-2022-30122
## アナウンスhttps://discuss.rubyonrails.org/t/cve-2022-30122-denial-of-service-vulnerability-in-rack-multipart-parsing/80729
## 概要
以下の処理を使用している場合にrackでMIMEのパースを行う際に
[Rails] コードに全角スペースが混ざるとCSSレイアウトに影響が出る事がある
初投稿です。
プログラミングを初めて3ヶ月。
備忘録としてつまづいたところを記載し、アウトプットツールとして活用していきます。# なんかレイアウトがちょこちょこズレてる
BootstrapとCSSを使ってレイアウト調整を行っていたが
コンテンツの配列がどう調整しても合わない、、、
(ここでは一旦画像は添付しませんが、、、)# 検証ツールを開いて確認
原因わからず、、、# メンターに聞く
コード的には問題ない。
残るは全角スペースが悪さしているかもとのこと。
command + Fで全角スペースを検索すると、、、、なんとか数カ所出てきた!!
# 半角に修正
直った!!!プログラミングにおいて全角は敵すぎる、、、、
そんな事を痛感した瞬間でした。スペースは気づかない事多いけど
ちょこちょこ確認していこうと思います!!?【初学者用】RSpecでテストコードを書こう!【概念・準備】
# はじめに
オリアプ作成も遂に終盤に差し掛かり、今日からテストコードを書くフェーズに突入します。
テストコードを書く前に今まで学んだテストコードの知識を今日から少しずつアウトプットしていきたいと思います!
※プログラミング初学者の私がアウトプットとこれから学習される皆様の参考になればと思い投稿しています。また、マークダウン記法も不慣れな初学者ですので、間違い等があれば指摘いただけると幸いです。## この記事を見てできるようになること
Ruby on Railsのgemであるrspec-railsを使用して、テストコードを実装できるようになります!## Rspecとは?
Ruby on Railsのアプリケーションのテストコードを便利に実装できるGemです。## テストコードを書く意義
テストコードとはアプリケーション内に記述する、そのアプリケーションの挙動を確認するコードのことを言います。
なぜ、このコードを書かなければならないのでしょうか?メリット・デメリットに分けて考えてみましょう!
**テストコードを書くメリット**
①クオリティの担保
ブラウザでアプリケーションRails × chart.js でサウナ活動(投稿)データに連動するラベル付きの円グラフを作ってみた。
# 0. はじめに
こんにちは、[まつけん](https://twitter.com/matsuken_web314)です。
[サウナ記録を管理するアプリ](https://totonoi.org/)(転職活動用のポートフォリオ)に組み込んだ
**投稿に連動する円グラフ**をどうやって実装したのかを解説する記事です。(下の画像参照)![sakatugraph.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1584967/2b1e7ddb-4220-b2d1-e6fb-bae959694ab5.png)
↓ポートフォリオの解説記事です↓
https://qiita.com/matsuken314/items/2ae660c7635cca726283
## この記事のゴール(とりあえず)
– [chart.js](https://www.chartjs.org/docs/latest/)の円グラフがどういう風にWebアプリに組み込まれるのか分かる
– gemのgit cloune
sasakiyuuya@mbp ~ % cd .ssh
sasakiyuuya@mbp .ssh % chmod 400 jojotech.pem
sasakiyuuya@mbp .ssh % ssh -i jojotech.pem ec2-user@54.249.7.206
[ec2-user@ip-10-0-8-195 ~]$ cd /var
[ec2-user@ip-10-0-8-195 var]$ sudo chmod 755 www
[ec2-user@ip-10-0-8-195 var]$ cd www/
[ec2-user@ip-10-0-8-195 www]$ sudo git clone https://github.com/jojo232/cloud9.git
[ec2-user@ip-10-0-8-195 cloud9]$ gem install bundler
[ec2-user@ip-10-0-8-195 ~]$ gem install rails -v 6.1.4
[ec2-user@ip-10-0-8-195 ~]$ cd /var/www/cloud9【Rails/System Spec】サポートモジュールで結合テストコードの記述を短くする(ログイン動作をまとめる)
## 初めに
今回は結合テストコードの記述を短く、可視性を高めるために
繰り返し使用するログイン動作をまとめました。## サポートモジュールとは?
RSpecに用意されている、メソッド等をまとめる機能のことです。
「ログインしたら投稿ページに遷移できる」
「ログインしたら編集ページに遷移できる」
「ログインしたら削除ページに遷移できる」等
複数出てくる同じ処理をまとめることができます。## 使い方
#### ①ディレクトリとファイルを作成
specディレクトリ配下に
supportディレクトリを作成し
その配下にsign_in_support.rbを作成します。
(ファイル名はご自身がわかりやすいものでOKです!
今回はログインのため「sign_in_support」という名前にしています)“`
? spec
? factories
? models
? requests
? support こちらのディレクトリを作成
∟ sign_in_support.rb こちら【Rails/System Spec】結合テストコードの書き方(新規登録に関するテストコード)
## 初めに
今回は結合テストコードの書き方(新規登録に関するテストコード)を実装した記録です。
初めて実装する方でもイメージがしやすいよう、実際の処理画像や考え方の基盤的な部分も合わせてまとめています!【Rails/System Spec/Capybara】結合テストコードを書くときによく使う表現 一例もまとめています。
## 結合テストコードとは?
・ユーザーがたどる一連の流れを確認するもの例 新規登録についての結合テストコード
“`
新規登録ボタンの確認 → 新規投稿ページに移動 → フォームに必要事項入力
→ 登録ボタンを押す → トップページに戻る
“`手動で行うと人的ミスや確認漏れが起こる可能性がありますが、
結合テストコードを実行することで毎回同じ結果が得られるというメリットがあります。## 結合テストコードを実行するために使うもの
##### ・System Spec(システムスペック)
結合テスト【Rails/System Spec/Capybara】結合テストコードを書くときによく使う表現 一例
## 初めに
今までテストコードを書く際に調べながら書いていたため、時間がかかっていました。
今後効率的に記述ができるように
結合テストコードを書くときによく使う表現の一例をまとめていきたいと思います!## 結合テストコードを書くときによく使う表現 一例
#### ○○ページに移動する(実際に遷移する際に使用)
visit 〇〇_path・パスを調べる方法
“`
% rails routes
“`
—#### visitで訪れたpageの中に、Xという文字列があるかどうかを判断する
expect(page).to have_content(‘X’)
##### ・・ page
visitで訪れた先のページの見える分だけの情報が格納されている。
※カーソルを合わせてはじめて見ることができる文字列はpageの中に含まれない。##### ・・ have_content(‘X’)
Xという文字列が「ある」ことを判断する##### ・・ have_no_content(‘X’)
Xという文字列が「ない」ことを判断する—-
#### 要素の中に当
【Ruby+rubocop】RuboCopでコーディングチェックする。
自分用のメモとして残します。
# やり方
前提として、rubocopをインストールしていること。## チェックのみ:ファイル単体
“`zsh
bundle exec rubocop ファイルパス
“`## チェック&自動整形:ファイル単体、-a オプション
-a オプションで自動整形できるものはしてくれる。
–auto-correct の略“`zsh
bundle exec rubocop ファイルパス -a
“`
以上です。本番環境でプリコンパイルができませんよ。。
## はじめに
Rails Tutorialを学習中に下記のエラーが発生しました。“`shell:terminal
Minitest::UnexpectedError: DRb::DRbRemoteError: Asset `application.css` was not declared to be precompiled in production.
Declare links to your assets in `app/assets/config/manifest.js`.//= link application.css
“`
まず開発環境でレンダリングを試しても問題なかったので、エラー文通り **本番環境で稼働する際にプリコンパイルできないし宣言されてないよ!!** と怒られたみたいです。。。### 開発環境
– HostOS: windows11 Home
– GestOS: ubuntu/xenial64
– ruby: 2.7.5
– Ruby on Rails: 6.1.6##
railsのform_withにおけるselectメソッドの初期値設定方法
## 概要
form_withにおけるselectメソッドの初期値の設定方法が地味に迷ったのでまとめます。
## 初期値設定方法について
初期値設定方法は大きく2つあります。
### options_for_selectを使う方法
“`ruby
# bが選択される
= f.select :hoge, options_for_select([“a”,”b”,”c”], selected: “b”)
“`### options_for_select を使わない方法
“`ruby
# bが選択される
= f.select :hoge, [“a”,”b”,”c”], { selected: “b” }
“`## 注意点
### 失敗例
これだと失敗する。
“`ruby
# aが選択される
= f.select :hoge, [[“a”, 1],[“b”, 2],[“c”, 3]], { selected: “b” }
“`### 解決策
選択肢が二次元配列で渡されている場合(1つの選択肢が複数の要素を持っている場合)、最初の要素がページ上に出力され、最
Ruby と crystal で解く AtCoder ABC253 C
# はじめに
AtCoder さん、ありがとうございます。
# C – Max – Min Query
https://atcoder.jp/contests/abc253/tasks/abc253_c出題の趣旨として、配列の`Max`や`Min`(や`Sort`等)は毎回計算するとコストがかかるので、`TLE`を避ける工夫が必要です。
# Hash + メモ
## Ruby
“`rb
q = gets.to_i
h = Hash.new(0)
h_max = -1
h_min = 1000000001
q.times do
s = gets.chomp
case s[0]
when ‘1’
x = s.split[1].to_i
h[x] += 1
h_max = x if h_max < x h_min = x if h_min > x
when ‘2’
_, x, c = s.split.map(&:to_i)
if h[x] > c
h[x] -= c
else
h.deletrubyの配列で、同じ値の個数を数える
# group_byを使うやり方
group_byメソッドで、同じ値のグループを作成し、
`key value`形式で、
mapメソッドの中で集計する
最後に`to_h`で見やすく出来る“`rb
ary = [1, 1, 1, 2, 3, 3]p ary.group_by(&:itself).map{ |key,value| [key, value.count] }.to_h
=> {1=>3, 2=>1, 3=>2}
“``to_h`抜きだと見にくい
![スクリーンショット 2022-05-31 8.55.10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/492674/049361c8-f637-4f63-1a71-466a1bc27704.png)# 参考文献
`group_by`
こんな感じで、デフォルトではハッシュが作成される。“`rb
ary = [1, 1, 1, 2, 3, 3]関連する記事
OTHERカテゴリの最新記事
-
- 2024.09.19
JavaScript関連のことを調べてみた
-
- 2024.09.19
JAVA関連のことを調べてみた
-
- 2024.09.19
iOS関連のことを調べてみた
-
- 2024.09.19
Rails関連のことを調べてみた
-
- 2024.09.19
Lambda関連のことを調べてみた
-
- 2024.09.19
Python関連のことを調べてみた