- 1. 【Rails】render :json に modelメソッドの返り値を追加する方法
- 2. 真偽値による条件の組み合わせ
- 3. システムスペックではvisit hoge_urlではなくvisit hoge_pathと書かないとNet::ReadTimeoutエラーが発生する
- 4. eachの入れ子
- 5. Ruby の構造体的・ハッシュ的データ構造についての考察 (1)
- 6. rails で slack command の request を受け取る
- 7. 【Ruby on Rails】Railsチュートリアルを参考にログイン機能実装の流れをおさらい
- 8. blastengineのRuby SDKを使ってテキストメールを一括配信する
- 9. blastengineのRuby SDKを使ってテキストメールを即時配信する
- 10. ruby から slack へ message を送信する
- 11. Python,Ruby,PHP,Java,JavaScript,Perlの数値計算の比較
- 12. Rubyの配列で複数要素の位置を得る ( index を複数得たい )
- 13. Deviseで、メールテンプレートの編集ができないときの対処法(template_pathではなく、headers_forを使う)
- 14. Rubyでダイヤル問題を解く
- 15. 依存性のある複数引数を一時変数無しで設定する
- 16. Ruby と crystal における clone メソッドの違い
- 17. M1 Mac (macOS Monterey) で therubyracer を運用することはできるのだろうか?
- 18. M1 Mac (macOS Monterey) で Ruby のインストールに失敗するときの対処法
- 19. 【Rails】database.ymlにMySQLのパスワードを設定する方法
- 20. RuboCop Rails (rubocop-rails) のリリース内容で Rails の情報をキャッチアップする
【Rails】render :json に modelメソッドの返り値を追加する方法
# きっかけ
`controller`の返り値を`json`形式で返却する時、モデルで定義されている`attributes`しか返すことができません。そんな時、他の`attributes`を追加する方法が分からず困ることがあったので、備忘録として残します。# attributeを追加する
`render json:` に、`methodsオプション`をつけ、`model`で定義したメソッドを呼び出す。# 使い方
例えば・・・
以下のようなモデルがあったとする。
“`ruby
create_table “users”, force: :cascade do |t|
t.string “first_name”, null: false
t.string “last_name”, null: false
t.datetime “created_at”, precision: 6, null: false
t.datetime “updated_at”, precision: 6, null: false
end
“`で、以下のようにで`ActiveRecor
真偽値による条件の組み合わせ
本日アウトプット練習2回目。
以下の条件を満たすメソッドを実装。
・第一引数のnumが1以上かつ10以下の範囲であればTrueを出力すること
・第二引数のoutside_modeがTrueの場合は、第一引数numが条件範囲外でもTrueを出力すること
・それ以外はFalseを出力すること“`rb
def in1to10(num, outside_mode)
# ここに条件式を記述する
end# 呼び出し例
in1to10(5,false)
in1to10(11,false)
in1to10(11,true)# 出力例
#in1to10(5,false) →True
#in1to10(11,false) →False
#in1to10(11,true) →True
“`#### 最初自分で書いたダメな例
“`rb
def in1to10(num, outside_mode)
if num >= 1 && num <= 10 puts "True" else puts "False" end end in1to10(5,fal
システムスペックではvisit hoge_urlではなくvisit hoge_pathと書かないとNet::ReadTimeoutエラーが発生する
## 発生した問題
Hello worldレベルのごく簡単なRailsアプリを作成し、rspec-railsをインストールして次のようなシステムスペックを書きました。“`ruby
require ‘rails_helper’RSpec.describe “Home”, type: :system do
before do
driven_by(:selenium_chrome_headless)
endexample do
visit root_url
expect(page).to have_content ‘Home#index’
end
end
“`テストを実行すると・・・あれ?
“`
$ bundle exec rspec
DEBUGGER: Attaching after process 28722 fork to child process 28745(何も起きない)
“`この状態が何十秒も続き、最終的には以下のエラーが出て終了しました。
“`
$ bundle exec rspec
DEBU
eachの入れ子
またサボり気味だったアウトプットの練習。
でも3日坊主を何回も続けていれば完全にサボったことにはならない(言い訳)# 問題
配列の中にある果物の名前と値段の合計金額を出力しろという問題。“`
fruits_price = [[“apple”, [200, 250, 220]], [“orange”, [100, 120, 80]], [“melon”, [1200, 1500]]]
“`“`
(出力)
appleの合計金額は670円です
orangeの合計金額は300円です
melonの合計金額は2700円です
“`#### 自分の回答
“`practise.rb
fruits_price = [[“apple”, [200, 250, 220]], [“orange”, [100, 120, 80]], [“melon”, [1200, 1500]]]fruits_price.each do |item, price|
puts “#{item}の合計金額は#{price.sum}円です”
end
“`
自分は配列内の全要素の合計を出すためにs
Ruby の構造体的・ハッシュ的データ構造についての考察 (1)
いや,まあ「考察」なんて立派なものじゃないんだけどさ。
とりあえず長文にはなっちまったわい。
# はじめに
プログラミングで扱うデータは,単一の数値だったり文字列だったりという単純なものもあるけど,もっと複雑なものもある。
例えば書誌情報の場合,一つのデータが「書名が〇〇で,著者が〇〇で,出版元が〇〇で,発行年が〇〇」といった複数の情報からなっている。以下のように。|属性名|属性値|
|:—-|:—-|
| 書名 | Ruby on Fails |
| 著者 | ルビ子 |
| 出版者 | 譜露蔵民具社 |
| 発行年 | 2023 |本記事では,このように「◎◎が〇〇で,◎◎が〇〇で」といった情報(のカタマリ)を表すデータ型について考える。
# どんな方法があるか
このようなデータを表す方法はたくさんあるが,大きく分けて
* 汎用のクラスを使う方法
* (書誌情報なら書誌情報専用の)クラスを作る方法がある。
前者の代表としてハッシュを使う方法が考えられるし,後者の代表としてはクラス式でクラスを定義する方法が考えられる。
この節では,いくつかの方法を
rails で slack command の request を受け取る
# 概要
– slack command など request end point を slack へ設定する
– slack command request から data を取得
– slack command が投入された channel へ応答を返す
– 別記事にて記述# request end point の設定
– slack app 設定画面を開く
– https://api.slack.com/apps/
– [ slash command ] を開く
– [ Create New Command ] を選択し, 以下を埋める
“`
– Command : command 名を設定
– Request URL : rails の url path を設定 # http://rails.path/ など
– Short Description : command の簡易説明を設定
– Usage Hint : command の使用方法などを設定
【Ruby on Rails】Railsチュートリアルを参考にログイン機能実装の流れをおさらい
# ユーザの作成
Userモデルにパッと必要そうなカラムを
まず入れてみる。
“`:terminal
rails g model User name:string email:string
“`一旦migrationする。
“`:terminal
rails db:migrate
“`ログイン機能とかがないのであれば、
もしかしたら、これでも足りる(?)のかもしれないが、
ログインするためには、
passwordが必要であろう。セキュリテイーとかをガン無視するのであれば、
単にpasswordカラムをUserモデルに追加して、
そのまま平文で保存すればいいと思うが、
流石にそれはまずいということで、
has_secure_passwordを使うことにする。そのためには、password_digestカラムが必要になるので、
password_digestをUserモデルに追加する。
“`:terminal
rails generate migration add_password_digest_to_users password_digest:string
blastengineのRuby SDKを使ってテキストメールを一括配信する
[blastengine](https://blastengine.jp/)はエンジニアフレンドリーなメール配信サービスです。APIとSMTPリレーの両方をサポートしており、手軽に素早くメール配信ができるようになっています。
今回はRubyでblastengineのAPIを簡単に使えるSDKを開発しましたので、使い方を紹介します。現在はトランザクションメール(即時発信メール)とバルクメール(一括配信)をサポートしています。この記事ではバルクメールの使い方を紹介します。
## インストール
インストールはgemコマンドやbundlerで行ってください。
“`
# Gemfile
gem ‘blastengine’
“`または
“`
gem install blastengine
“`## インポート
SDKをインポートします。
“`ruby
require “blastengine”
“`## 初期化
Blastengineを初期化します。ユーザ名とAPIキーを使います。
“`ruby
# 初期化
Blastengine.initialize
blastengineのRuby SDKを使ってテキストメールを即時配信する
[blastengine](https://blastengine.jp/)はエンジニアフレンドリーなメール配信サービスです。APIとSMTPリレーの両方をサポートしており、手軽に素早くメール配信ができるようになっています。
今回はRubyでblastengineのAPIを簡単に使えるSDKを開発しましたので、使い方を紹介します。現在はトランザクションメール(即時発信メール)のみサポートしています。
## インストール
インストールはgemコマンドやbundlerで行ってください。
“`
# Gemfile
gem ‘blastengine’
“`または
“`
gem install blastengine
“`## インポート
SDKをインポートします。
“`ruby
require “blastengine”
“`## 初期化
Blastengineを初期化します。ユーザ名とAPIキーを使います。
“`ruby
# 初期化
Blastengine.initialize api_key: “API_KEY”, user_name: “USE
ruby から slack へ message を送信する
# 目的
– ruby から slack channel や個人へ message を送信する
– 送信者は bot 扱いとなる# 概要
– 使用 gem
– token の取得
– channel id, user id の取得
– ruby code sample
– token 設定
– dm
– message
– block# 使用 gem
“`
gem ‘slack-ruby-client’
“`– repository
– https://github.com/slack-ruby/slack-ruby-client# bot auth token の取得
– [ 使用する slack app の設定画面 ] を開く
– https://api.slack.com/apps/
– [ OAuth & Permissions ] を開く
– [ Bot User OAuth Token ] を控える![slack.png](https://qiita-image-store.
Python,Ruby,PHP,Java,JavaScript,Perlの数値計算の比較
Python,Ruby,PHP,Java,JavaScript,Perlの数値計算の比較
# Python
https://qiita.com/Sunset_Yuhi/items/fa6e97867ac46a604780
# Ruby
https://qiita.com/u651601f/items/52af880d1569c6c1066f
# PHP
https://qiita.com/mpyw/items/346c535ade9dcf6e1b12
# Java
https://qiita.com/takahirocook/items/748990882f2de7a630a1
# JavaScript
https://qiita.com/daikw/items/663bc0b5a4c025694974
# Perl
https://perlzemi.com/blog/20161
Rubyの配列で複数要素の位置を得る ( index を複数得たい )
# 例
“`rb
arr = [“A”, “B”, “X”, “A”, “X”, “A”];
arr.each_index.select { |i| arr[i] == “X” } # [2, 4]“`
# チャットメンバー募集
何か質問、悩み事、相談などあればLINEオープンチャットもご利用ください。
https://line.me/ti/g2/eEPltQ6Tzh3pYAZV8JXKZqc7PJ6L0rpm573dcQ
Deviseで、メールテンプレートの編集ができないときの対処法(template_pathではなく、headers_forを使う)
# Rails & deviseにてメールのテンプレートを変更
カスタムメーラー `app/mailers/user_mailer.rb`を、
“`
class UserMailer < Devise::Mailer default template_path: 'users/mailer' end ``` と定義したが、以下のデフォルトのメールが変更できずでした。![スクリーンショット 2022-09-23 18.23.35.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1730386/90478abf-c56e-e1ff-f6c6-ddf2d34ae8af.png) ## 対応方法 以下のように、headers_forメソッドをオーバーライドすることで、設定したテンプレートが使用できるようです! ``` class UserMailer < Devise::Mailer # 以下の記述では動作しない # default template_path: 'users/mailer'
Rubyでダイヤル問題を解く
# 問題
– AからZまでの目盛りを持つダイヤルがあるとする。
– このダイヤルは右に回すことも左に回すことも出来る。
– ダイヤルは丸いのでAとZは隣り合わせだ。ひとつの目盛りから別の目盛りまで、動かす必要のある最小の目盛り数を求めたい。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/89618/b21d7d04-6302-6b49-e3ec-2e81a17e660a.png)
# コード
XからBまでの距離を計算すると、移動距離は4であることが分かる。
B -> A -> Z -> Y -> X で4マス移動だ。
“`rb
SCALES = (“A”..”Z”).to_acurrent_dial = “X”
next_dial = “B”current_dial_place = SCALES.index(current_dial) + 1
next_dial_place = SCALES.index(next_dial) + 1formal_move
依存性のある複数引数を一時変数無しで設定する
※以下のプログラムはPython 2.7/3.9およびRuby 2.7でそのまま貼り付けて動作することを確認しています。
## 背景
ライブラリの挙動により、このようなことをしたいことがあると思います。
“`py
process(config=json.load(open(fname)),data=get_data(config))
“`“`rb
process(config: JSON.parse(open(fname).read), data: get_data(config))
“`しかし、前側のパラメータに与えられる情報を後ろのパラメータで使うことはできません。
## 解決策
※以下、サンプルなのでconfig/dataという名前になっていますが、実際にはこの辺りはちゃんとした名前をつけてください
### 一時変数
こういう場合、通常はkwargs変数を用意して処理するのだと思います。
#### Python
“`py
def process(**kwargs): # actually defined in another module
Ruby と crystal における clone メソッドの違い
# はじめに
AtCoder さん、ありがとうございます。# 結論
||clone|
|:–:|:–:|
|Ruby|浅い (shallow) コピー|
|crystal|深い (deep) コピー|# E – SNS のログ
https://atcoder.jp/contests/past201912-open/tasks/past201912_e
# Ruby clone(WA)
“`rb
n, m = gets.split.map(&:to_i)
a = Array.new(n + 1){ Array.new(n + 1, “N”) }
m.times do
s = gets.split.map(&:to_i)
case s[0]
when 1
a[s[1]][s[2]] = “Y”
when 2
(1..n).each do |i|
a[s[1]][i] = “Y” if a[i][s[1]] == “Y”
end
when 3
b = a.clone
(1..n).each do |i|
M1 Mac (macOS Monterey) で therubyracer を運用することはできるのだろうか?
# 結論
`therubyracer` はもう捨てたほうが良い!いろいろ試しましたが、M1 Mac で `therubyracer` と共存しながら正しくアプリケーションを動作させる方法は、少なくとも筆者の調べでは見つけることができませんでした……。
# 削除して大丈夫?
プロジェクトごとに環境はまちまちでしょうから、絶対に大丈夫とは言い難いですが、以下の記事に記載されているとおり、Node.js を実行できる環境であれば、ほとんどのケースでは `therubyracer` を削除しても問題なく動作します。* [How to Install (Or Get Rid Of) therubyracer on M1 or M2 Macs](https://www.rubyonmac.dev/how-to-install-therubyracer-on-m1-m2-apple-silicon-mac)
少なくとも筆者の関わっている Rails アプリケーションでは問題ありませんでした。
やることとしてはとてもシンプルで、`Gemfile` から `gem ‘therubyra
M1 Mac (macOS Monterey) で Ruby のインストールに失敗するときの対処法
# 解決方法
M1 Mac で従来どおりに Ruby をインストールしようとするとビルドエラーが出てしまいます。筆者の環境では以下のコマンドを実行することにより無事インストールすることができました。
“`shell:Shell
brew install openssl@1.1 readline libyamlexport RUBY_CONFIGURE_OPTS=”–with-openssl-dir=$(brew –prefix openssl@1.1)”
export LDFLAGS=”-L/opt/homebrew/opt/readline/lib”
export CPPFLAGS=”-I/opt/homebrew/opt/readline/include”
export PKG_CONFIG_PATH=”/opt/homebrew/opt/readline/lib/pkgconfig”
export optflags=”-Wno-error=implicit-function-declaration”
export LDFLAGS=”-L/opt/homebrew/
【Rails】database.ymlにMySQLのパスワードを設定する方法
# はじめに
今回は、Mysqlのパスワードを変更したことにより、発生したエラーの解消方法についてまとめました。※おことわり※
基本的に学習内容のアウトプットです。
初学者であるため、間違い等あればご指摘いただけますと嬉しいです。# この記事の目的
以下内容のアウトプット
– Mysqlのエラーとその解消方法
– database.ymlにMySQLのパスワードを設定する方法# 開発環境
– Ruby 2.6.5
– Ruby on Rails 6.0.0
– MySQL 14.14# この記事の内容
1. Mysqlのエラー
2. Mysqlのパスワードを確認
3. database.ymlにMySQLのパスワードを設定# 1. Mysqlのエラーの概要
Mysqlのパスワードを設定(変更)したことにより、ローカルでサーバを立ち上げた際にエラーが発生しました。※エラー解消のプロセスでNOとYESのエラーに遭遇しましたが、最終的にエラー解消できました。
“`
Mysql2::Error::ConnectionError: Access denied for u
RuboCop Rails (rubocop-rails) のリリース内容で Rails の情報をキャッチアップする
# この記事は?
Ruby の静的コード解析の定番 Gem の [RuboCop](https://github.com/rubocop/rubocop)。そのひとつひとつのルールのことを Cop と呼びます。そして、[RuboCop Rails](https://github.com/rubocop/rubocop-rails) は Rails 向けのルールを RuboCop に追加するための Gem です。
ふと、RuboCop Rails で追加された Cop (ルール) を確認することで、Rails の知らない機能を知るいい機会になるのではと思いました。そこで、試しに 2022/09/09 (金) にリリースされたバージョン 2.16.0 の内容を見てみました :eyes:
https://github.com/rubocop/rubocop-rails/releases/tag/v2.16.0
そうすると、案の定知らないことばかりで非常に勉強になりました!そこで、実際にどんな学びがあったかこの記事で共有したいと思います ?
# 例: RuboCop Rails 2