- 0.0.1. 【Rails】Modelに定義した定数をControllerやViewで使用する方法
- 0.0.2. Rubyを使ってメール通知をしたいだけなのにどハマりした結果
- 0.0.3. Slack Bot アプリを作成しよう
- 0.0.4. 【Ruby】メソッドの後の感嘆符”!”について
- 0.0.5. Ruby 2.7まで動いていたデフォルト値付きのブロックパラメータをRuby 3.0向けに書き替える
- 0.0.6. Capybara内部のリトライ間隔をのばしてCPU節約
- 0.0.7. Ubuntu (WSL) に asdf をインストールして Ruby と Crystal をそれぞれ複数バージョンインストール
- 0.0.8. formオブジェクト使用時のエラーメッセージの日本語化
- 0.0.9. IntelliJ 2022 以降では Gemfile に RuboCop が無いと使えない
- 0.0.10. bundle cacheあるいはbundle package
- 0.0.11. 【Ruby】Railsでリクエストのバリデーションを行うライブラリ`rails_param`
- 0.0.12. Ruby on rails JqueryとBootstrapが反映されない
- 0.0.13. homebrew tapリポジトリを作ってみる
- 0.0.14. バリデーションが実行された後、jsが機能しない
- 0.0.15. [Ruby] rescueの中でreturnするとちゃんと関数からreturnしてくれる
- 0.0.16. WIP【Viewがレンダリングされるまでの技術とその理解 / Aaron Patterson 】Aaron PattersonさんがYouTubeで説明していたコードにビューを付けてみる
- 1. users#index
- 2. users#new
【Rails】Modelに定義した定数をControllerやViewで使用する方法
## はじめに
どうも、もきおです。RailsでModelに定義した定数をControllerやViewで使用する場面が実務でちょくちょく使う事があり、どうやって参照するんだっけ?と思ったので、調べたのをメモとして残しておきたいと思います。## 結論
定数を参照するには**Model名(Rubyならクラス名)::定数名**で参照する事ができます。
“`ruby:
MAIN_USERS = [“Bob”, “Keny”, “John”, “July”, “Karen”].freezeUser::MAIN_USERS
# => [“Bob”, “Keny”, “John”, “July”, “Karen”]
“`
## 具体例
さて、具体例に入っていきましょう。今回はユーザー登録の際、SNSのURLを入力する欄があるとします。その際、省きたいURLを予め定数として登録しておき、実際入力され渡ってきたURLと定義していた定数が部分一致する場合、バリデーションでアラートを表示するというパターンで記述したいと思います。まずは良く使うものをmodelに定数定義しましょう。“.fr
Rubyを使ってメール通知をしたいだけなのにどハマりした結果
# はじめに
新しくサーバーを構築して、自作Webアプリケーションにメール通知機能を追加したいと思い、簡単にできるだろうと考えていたらハマりました。
# 環境
Ubuntu 22.x.x
Ruby 3.0.x
Postfix 3.6.x# ソースコード
“`rb:mailtest.rb
#!/usr/bin/env rubyrequire ‘mail’
mail = Mail.new do
from “xxxx@xxxx.com”
to “yyyy@yyyy.com”
subject “test mail”
body “this is a test mail.”
endmail.delivery_method(:smtp,
address: “localhost”,
port: 25,
domain: “localdomain”,
)mail.deliver
“`# エラーメッセージ
“`
$ ./mailtest.rb
/usr/lib/ruby/3.0.0/net/smtp.rb:101
Slack Bot アプリを作成しよう
[rack Gem](https://github.com/rack/rack) について勉強した時にBot アプリを作成したので、そのメモとして残そうと思います。:bow:
もしBot アプリを作成してみたいという方がいれば参考程度にしてみてください。### どういうアプリ?
Slack のチャットフォームの方で`@botユーザー say_hello` と入力すると、@botユーザー が挨拶してくれるアプリです。![スクリーンショット 2022-08-22 17.49.25.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2290550/98d6f592-a75f-2072-08b6-de92372e8083.png)
## 準備
#### Slack token 取得する(1) https://slack.com/services/new/bot にアクセスする
(2) ユーザー名を記入し`ボットインテグレーション`からボットユーザーを作成するex. (私は`bot-app` の名前
【Ruby】メソッドの後の感嘆符”!”について
メソッドの中には、破壊的にデータを変更してしまうものがあり、慣習として名前に”!”が付けられます。
例えば、以下のコードがあったとします。
“`
self.email = self.email.downcase
“`
参考:Railsチュートリアル 第4版 6章より
https://railstutorial.jp/chapters/modeling_users?version=5.0#sec-minimum_password_standards上記だと右辺で”self.email”を全て小文字にしてから自身に代入することで更新していますが、
.downcase!メソッドを用いることで、直接”self.email”の値を変更することができ、より簡潔に書けます。“`
self.email.downcase!
“`破壊的なメソッドは便利そうですが、一方で元の値を強制的に上書きするので、使いどころには注意ですね。
【追記2022/08/26】
@nodai2h_ITC 様よりご指摘を頂きました。
以前、”!”をメソッドに付けると破壊的なメソッドになると勘違いしていまし
Ruby 2.7まで動いていたデフォルト値付きのブロックパラメータをRuby 3.0向けに書き替える
## はじめに:Ruby 2.7では動いていた奇妙なコード
とあるRailsプロジェクトをメンテしていたら、こんな奇妙なコードに遭遇しました。“`ruby
def sample
data = {
a: nil,
b: { x: 1, y: 2 },
c: { x: 1 },
d: { y: 2 },
}
data.map do |k, x: 0, y: 0|
[k, x, y]
end
end
“`Ruby 2.7でこの`sample`メソッドを実行すると以下のような結果が得られます。
“`ruby
# Ruby 2.7
sample
#=> [
# [:a, 0, 0],
# [:b, 1, 2],
# [:c, 1, 0],
# [:d, 0, 2],
# ]
“`## これはいったい何をやってるの?
このメソッドでは以下の行で`x`や`y`のデフォルト値を設定しています。
“`ruby
data.map do |k, x: 0, y: 0|
“`こ
Capybara内部のリトライ間隔をのばしてCPU節約
## 背景
Railsで作ったGUIのアプリをブラウザ自動化テストする際、CI環境のCPU使用率が高いことが気になっていました。複数のテストが並行した場合に、不安定になってどれか失敗してしまうということも起きました(※CPU使用率との因果関係は不明ですが)。テストは RSpec + Capybara + Selenium + Headless Chrome で作ってあります。chromeの起動オプションでCPU使用率を節約できるものがないか調べたりしたのですが、効果のあるものは見つけられませんでした。
—
色々探していたら、CapybaraにもCPU使用率が上がってしまう要因があることを知りました。
https://zenn.dev/megeton/articles/f73dc1a0db69b7
> **待っているとPCのファンが唸りを上げてしまう原因と対策**
>
> 次のように書くと内部では 0.01 のウェイトが入っているため処理回数は1秒間で約100回、全体で約6000回になる
>
> “`ruby
> Capybara.has_selector?(…,
Ubuntu (WSL) に asdf をインストールして Ruby と Crystal をそれぞれ複数バージョンインストール
# asdf とは
プログラミング言語などのバージョンを管理するツールです。
Ruby なら rbenv が有名ですが、asdf は様々なプログラミング言語やツールについて複数のバージョンを自在に切り替えながら使うことを可能にしてくれます。https://asdf-vm.com/
# なぜ asdf を使いたいのか
「複数の言語を」「単一のしくみ」でバージョン管理できる点が嬉しいです。
私は Ruby と Crystal を使って競技プログラミングをやっているのですが、コンテストでは必ずしも各言語の最新バージョンを使えるわけではありません。かつ、ときどきコンテストサイトで言語アップデートがあってバージョンが変わるのに追随する必要があります。
また、使っている言語の最新バージョンが出るとやっぱりさわってみたくなったりもします。asdf なら、Ruby も Crystal も(新しく増えたらその言語も)同じしくみで、コンテスト用のバージョンから最新バージョンまで簡単に切り替えながら使えていろいろ捗ります。
# 環境、前提条件など
Ubuntu 20.04.4 LTS (
formオブジェクト使用時のエラーメッセージの日本語化
# 概要
エラーメッセージの日本語化を実装したが、formオブジェクトを使用している箇所だけ実装できない。
# 前提
ja.ymlファイルの作成までは完了している。
Formオブジェクト以外のエラーメッセージについては日本語化ができている。# 現状
ja.ymlに日本語入力の記述をしても日本語にならない“`
ja:
activerecord:
attributes:
user:
name: ニックネーム
birthday: 誕生日
family_name: 姓
first_name: 名
family_name_kana: 姓(カタカナ)
first_name_kana: 名(カタカナ)item:
item_name: 商品名
image: 商品画像
introduction: 商品の説明
price: 価格
delivery_days_id: 配
IntelliJ 2022 以降では Gemfile に RuboCop が無いと使えない
# IntelliJ の RuboCop 統合機能
IntelliJ には RuboCop との統合機能があり、 RuboCop 的にまずい部分をコードエディタ上にハイライトで表示してくれる。
https://pleiades.io/help/idea/robocop.html
> IntelliJ IDEA は RuboCop(英語) との統合をサポートしており、コードエディターなどで IDE 内でその違反を直すことができます。IntelliJ 2021 までは、RuboCop が対象プロジェクトの Gemfile に記載されていなくても使用できたのだが、
IntelliJ 2022.1 くらいから、 Gemfile に記載していないと使用できなくなった。# なんで使えなくなったの?
このあたりの経緯は YouTrack のこの issue を見るとなんとなくわかる。
[Rubocop should run on `bundler exec` if available](https://youtrack.jetbrains.com/issue/RUBY-26915/Ruboc
bundle cacheあるいはbundle package
https://bundler.io/v2.3/man/bundle-cache.1.html
について。かつては、bundle packageという名称であったし、ドキュメントも https://bundler.io/v2.0/man/bundle-package.1.html に残されている(当該Bundlerバージョンは既にdeprecated=メンテナンスされていない)。両者はほぼ同じことを実現するため、Bundler 2.1くらいに完全に統合された。し、2.3中盤ではそれが[rubygems/rubygems#5785](https://github.com/rubygems/rubygems/pull/5785)において少しだけ分かりやすくされた。
私自身はこれまでほぼ使う場面がなかったのにドキュメントをメンテナンスすることになったしメンテナンスしているのだが、どういう場合に活用するのだろう。活用ケースによって、どちらのサブコマンド名が一般的なのか分かるのかもしれないので、質問してみたい。
例えば、`npm ci` https://docs.npmjs.com/cli
【Ruby】Railsでリクエストのバリデーションを行うライブラリ`rails_param`
## 概要
Railsでリクエストのバリデーションを行う場合、[Rails基礎 ストロングパラメータとバリデーション](https://hpsuzucat.hatenablog.com/entry/2020/10/24/224143)の記事にある通り、ApplicationRecordの機能を使用する方法などが挙げられます。もちろん、この方法でも全然良いのですが、ApplicationRecordのモデルに通す前に、controllerでバリデーションしたい時もあるなと感じました。
何かないかなと調べてみた結果、`rails_param`というライブラリが良さげだったので、今回少し紹介します。## 機能など
[nicolasblanco/rails_param](https://github.com/nicolasblanco/rails_param)に、ライブラリのReadmeがあります。パラメータの、型指定や、必須チェック、最小値・最大値など基本的なチェックは出来そうです。また、項目毎にエラーのメッセージもカスタムで設定できます。## 実装サンプル
以下はAPIで、文字列の
Ruby on rails JqueryとBootstrapが反映されない
今日は、RailsのTutorialsでJqueryとBootstrapをインストールした後、Dropdownの反映がされなかったので、その対処法についてまとめました。
まずは、こちらのコードを実行しました。
~~~app/javascript/packs/application.js
//= require jquery
//= require bootstrap
~~~そして、
~~~app/assets/stylesheets/custome.scss
@import “bootstrap”;
~~~
を追加しました。
しかし、これでは動かず、、~~~app/layouts/application.html.erb
homebrew tapリポジトリを作ってみる
# 序
macOS(またはLinux)用パッケージマネージャー — Homebrew
https://brew.sh/index_ja
を自宅鯖でも利用しているが、
homebrewにないものについて個別にビルド・インストールするのもダルくなってきた。# リポジトリを作る
homebrew tapのformulaファイルの置き場所 - 年中アイス
https://reiki4040.hatenablog.com/entry/2020/02/18/080000
を参考にリポジトリを作成する。## 1
githubに homebrew-tap というリポジトリを作成する。
例:
https://github.com/tknr/homebrew-tap## 2
homebrewリポジトリのテンプレートを作成する。前提:
```
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
```
実行・インストール完了後にzhlynn/zsig
バリデーションが実行された後、jsが機能しない
# はじめに
本記事はプログラミング初心者が、railsの学習を進めながら、躓いた部分、解決した箇所、またそれらの解決方法を備忘録も兼ねてまとめているものです。
最初はprogate。そのあと、「現場で使える RubyonRails5 速習実践ガイド」(通称)「現場Rails」を参考に進めていきました。
そのため、記事の内容には誤りがある可能性があることをご理解ください。
誤りがあればお手数ですが、ご指摘いただければと思います。よろしくお願いします。# 環境
Ruby 3.1.2
Rails 7.0.3.1# 問題のエラー
バリデーションが実行された後に、jsが機能しなくなってしまった。
![スクリーンショット 2022-08-21 23.01.24.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2737125/d21d9acd-6b03-d61f-64d5-11b3a00428ae.png)
![スクリーンショット 2022-08-21 23.01.30.png](https://qiita-
[Ruby] rescueの中でreturnするとちゃんと関数からreturnしてくれる
本題の通り、rescueの中でreturnするとちゃんと関数からreturnしてくれる。
期待通りで安心した。![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/534442/a88a42b0-8e72-1ac5-5462-7f69fc60c5ec.png)
WIP【Viewがレンダリングされるまでの技術とその理解 / Aaron Patterson 】Aaron PattersonさんがYouTubeで説明していたコードにビューを付けてみる
```
.
├── app
│ ├── controllers
│ │ ├── action_controller.rb
│ │ ├── application_controller.rb
│ │ └── users_controller.rb
│ └── views
│ └── users
│ ├── index.html.erb
│ └── new.html.erb
├── application.rb
├── rack_router.rb
└── server.rb
``````html
users#index
```
```html
users#new
```
```ruby
require 'socket'
require './application'port = 3000
server = TCPServer.open(port)loop d
paiza POH code_and_sql #異世界転職エンジニア
## SQL
同じデータベースを使う(取得する条件だけが徐々に複雑になっていく)のが面白く感じました。
### 魔法使いの街(d1)
```sql
SELECT id, name FROM Hell;
```### 果ての平原(d2)
```sql
SELECT id, name, str FROM Hell ORDER BY str DESC LIMIT 5;
```### 砂漠のオアシス(c1)
```sql
SELECT id, name, cost FROM Hell WHERE cost <= 10; ``` ### 禁断の洞窟(c2) ```sql SELECT Hell.id, Hell.name, Element.name AS element FROM Hell INNER JOIN Element ON Hell.element_id = Element.id WHERE Element.name = "Earth"; ``` ### 精霊の村(b1) ```sql SELECT Hell.id, Hell.name, Eleme
Ruby3.1を触ってみる(error_highlight)
# 0. はじめに
[前回](https://qiita.com/Satoooon/items/734ef8cdecba2725943f) に引き続きRuby 3.1の新機能について動かしながら紹介しようと思います。
今回は error_highlight になります
# 1. リリースノートを見てみる
> error_highlightという組み込みgemが導入されました。これにより、バックトレース中でエラーが発生した詳細な位置が表示されます。
このgemはデフォルトで有効になっています。--disable-error_highlightコマンドラインオプションを指定することで無効化できます。詳しくはruby/error_highlightリポジトリを見てください。引用: https://www.ruby-lang.org/ja/news/2021/12/25/ruby-3-1-0-released/
# 2. 触ってみる使い方を [README](https://github.com/ruby/error_highlight) を拝見しながら触ってみます
```sa
ActiveRecord::Enum
## Enum is 何
- enumは``列挙型``## 定義例
``` ruby
class Book < ApplicationRecord enum sales_status: { reservation: 0, # 予約受付中 now_on_sale: 1, # 発売中 end_of_print: 2, # 販売終了 } end ``` #### 保存のされ方 - シンボル、文字列、数値を渡しても戻り値が"now_on_sale"と表現される ``` ruby irb(main):001:0> Book.create(sales_status: :now_on_sale)
=> #irb(main):002:0> Book.create(sales_status: "now_on_sale")
=> #irb(main):003:0> Book.create(sales_s
【備忘録】Rubyの実行方法と標準出力メソッドの違いについて
## はじめに
本記事は、[Rubyがミニツク](http://www.minituku.net/)の学習内容をまとめたものです。
今回は、Ruby入門コースの1章をやります。## まとめ
* Rubyのプログラムを実行する方法は幾つかあり、代表的な方法として以下の手法がある。
・rubyコマンド
・irb
・-eオプション* 標準出力のメソッドには、主に3種類ある。各メソッドには、次のような違いがある。
・print: 最後に改行を行わない。
・puts: 最後に改行を行う。
・p: 最後に改行を行う。文字列を出力する場合は""で囲まれる。## Rubyのプログラムを実行する方法
・rubyコマンド
・irb
・-eオプションまずは、自分の環境にRubyがインストールされているか確認する。
```:ターミナル
$ ruby -v
ruby 3.0.2p107 (2021-07-07 revision 0db68f0233) [x86_64-darwin20]
```#### 方法1 rubyコマンドで実行する
テキストエディタを用いて、以下のプログラムを作成し保存