- 1. 商品編集機能の実装について
- 2. 【Rails】carrierwaveでローカルに保存したファイルをアクションを経由して取得する
- 3. Rubyを始めるにあたってyumのインストールで躓いた話
- 4. データを取得するために、何気なく使用していた、findメソッド・whereメソッドそれぞれから得られる結果の違いについて
- 5. devise_token_authで作る認証機能
- 6. Ruby 3.3.0 Rails 7.1.3 でYJITを有効にする
- 7. Faradayで302でログイン画面に飛ばされたときに再ログイン
- 8. AWS SDK for Rubyを使ってCloudWatch Logs Insightsの分析内容を取得する
- 9. RoRにおける検索時の表記揺れ対応(漢字、カタカナ、ひらがな)
- 10. gem `better_errors` の使い方【Ruby on Rails】
- 11. Rubyにおけるオブジェクト指向と基本の書き方
- 12. 【Rails】carrierwaveでファイルをアップロードする時に、元々のファイル名(オリジナル名)をカラムに保存されるようにする
- 13. paizaラーニング解答: 正規表現メニュー[Ruby]
- 14. 【個人開発】お弁当作りをサポートするアプリ「いつものお弁当」を作りました!【Rails】
- 15. ChatGPTを使って論文の全文を翻訳する
- 16. しりとり
- 17. 各言語における「symbol」はそれぞれ違う件(Ruby, JavaScript, TypeScript, Dart)
- 18. 経過月数を小数点込みで確認したい(Ruby)
- 19. 【AtCoder】トヨタ自動車プログラミングコンテスト2024#1(AtCoder Beginner Contest 337)解法メモ【Ruby】
- 20. 【Ruby on Rails 】undefined method `image_name’ for nil:NilClass
商品編集機能の実装について
# はじめに
プログラミング初心者です。現在Ruby on Railsを勉強中。
間違っている箇所がありましたらコメントをしていただけるとありがたいです。# 商品編集機能の実装
今回はすでに投稿してある商品データの編集機能を実装しました。
とりあえず編集画面へのリンクを記述してと、、、
今回学んだことは、編集画面に飛んだ際にすでにあるデータが表示されているようにする方法です。
[![Image from Gyazo](https://i.gyazo.com/7b31a3c48e16209d5813274a29de527c.png)](https://gyazo.com/7b31a3c48e16209d5813274a29de527c)
まず、form_withの第一引数にモデル@itemというインスタンスを記述します。
そして、その情報をブロック変数|f|の中に保持させ、
[![Image from Gyazo](https://i.gyazo.com/5ccfb7519f53d627ee8659e22f06155c.png)](https://gyazo.com/5ccfb751
【Rails】carrierwaveでローカルに保存したファイルをアクションを経由して取得する
## はじめに
carrierwaveでpdfファイルを投稿し、そのファイルをクリックするとファイルを開く機能があります。
今回は、ファイルをローカル上のpublicディレクトリに保存しているためurl直打ちでファイルでのファイル表示の対策のために、保存先をpublicディレクトリから変更し、ファイルのパスから取得するのではなくアクション経由で取得する方法に変更してurl直打ちで表示するのを防ぐ対応をしました。
carrierwaveでのファイルの投稿機能などについては今回のテーマの趣旨とは違うため省略します。## 環境
`Rails 7.0.4`## テーブル
| Posts |
|:———–|
| name |
| file |## コントローラー
~~~ruby:app/controllers/posts_controller.rb
def show_file
file_path = Rails.root.join(‘uploads’, ‘post’, ‘file’, params[:id], “#{params[:file
Rubyを始めるにあたってyumのインストールで躓いた話
こんにちは!
最近は気温も寒く何かとやる気が出なくなりがちですが、技術は日々の積み重ねですので気合を入れなおして頑張っていきましょう!!
つい先日、Rubyで開発を行うことになり、初めてのRubyなのですが、セットアップからなにからバタバタしています(´;ω;`)
## 最新のUbuntuではyum ではなくyum4が搭載されている!?!
普段私は個人開発含め、Ubuntu を用いて開発をしているのですが、Rubyを始めるにあたり以下のサイトを見ながら作業を進めていました。
https://www.ruby-lang.org/ja/documentation/
““
sudo yum install ruby
““yum がないよというメッセージが出てきたので、yumをインストールするために以下のコマンドを打ちました。
““
sudo apt install yum
““
とコマンドを打ち込んだところ、どうもうまくいかなかったのです、、、。いろんなサイトを確認し、対応策として以下のコマンドを打つといいとのことで以下のコマンドを打ち込みました。
`
データを取得するために、何気なく使用していた、findメソッド・whereメソッドそれぞれから得られる結果の違いについて
## バージョン
– ruby 3.2.2
– Rails 6.1.7.6
————————-データを取得するために、深く考えずに使用していたfindメソッドとwhereメソッド。だが、スクールで課題に取り掛かっていた時に、得られる結果に奥深い違いがあることを知り、追求したくなったので、とりあえず現時点でわかったことをまとめたいと思います。
今回、tasksテーブルが以下のように定義されている。
|name|content|created_at|updated_at|以下、関係ないので省略…|
|:-:|:-:|:-:|:-:|:-:|## あるタスクの内容(content)のデータを取得しようとwhereを使ったら、エラーになった!!なぜだ!!
`task.content` という形で、あるタスクの内容のデータを取り出すために、まず、
`task = Task.find(39)`として、idが39のデータを取り出そうとしたが、この日の私は、最近findばかり使用しているから、whereにも慣れたいなと考え、whereを用いてデータを取得
devise_token_authで作る認証機能
## devise_token_authとは?
devise_token_authはRailsでトークンベースの認証機能を作れるgemのこと。
フロントとバックを分けて開発している時なんかに使う。
クライアントは、発行されたトークンを用いてユーザー認証を行う。
メールアドレスを用いた本人確認や、パスワードのリセットといった、webアプリケーションによくある機能もこのgemで作ることができる。## 実行環境
Ruby 3.3.0
Rails 7.0.8## 環境設定
まずは必要なgemをインストール。
“`
gem ‘devise_token_auth’
gem “devise”
gem “rack-cors”
“`
“`
bundle install
“`
:::note info
CORSの制御のため、rack-corsも必要
:::deviseとdevise_token_authをインストール
“`
rails g devise:install
rails g devise_token_auth:install User auth
“`
:::note in
Ruby 3.3.0 Rails 7.1.3 でYJITを有効にする
あるWebアプリケーションの Ruby on Rails のバージョンを`7.1.3`に上げました。 Ruby のバージョンを`3.3.0`に上げました。
ついでにYJITを有効にしました。
[Enable YJIT · pubannotation/pubannotation@f9284cd](https://github.com/pubannotation/pubannotation/commit/f9284cd97a57af10e05b33360c0c45634749a97e)
次のファイルを追加しました。“`ruby:config/initializers/enable_yjit.rb
if defined? RubyVM::YJIT.enable
Rails.application.config.after_initialize do
RubyVM::YJIT.enable
end
end
“`運用中に何かの理由で無効にしたくなったら、コメントアウトするかファイルごと削除します。
この方法は、最新のRuby on Railsに取り込まれているそのま
Faradayで302でログイン画面に飛ばされたときに再ログイン
RubyでHTTP通信して何か情報を取ってくるときには、だいたい [Faraday](https://github.com/lostisland/faraday)を使うと楽だ。
* 公式ドキュメント https://lostisland.github.io/faraday/#/
* Faradayの使い方 59のレシピhttps://nekorails.hatenablog.com/entry/2018/09/28/152745あたりを見れば大体の使い方はわかる。かりに、使い方が分からなくてもソースコードを読めばなんとなく動きはわかる。
## まえおき
CakePHPで作られた古い社内サービスをスクレイピングするスクリプトを組んでたんだけど、何か知らないけど、ときどきUser/Passを入れ直せと、ログイン画面に飛ばされてしまってた。
* Authorizationヘッダーじゃなくて、クッキーで認証管理されてる
* 再認証のときはHTTP 401ではなく302でログイン画面に飛ばされるだけということで、Faradayの標準の仕組みではどうにもならなさそう、ということで調
AWS SDK for Rubyを使ってCloudWatch Logs Insightsの分析内容を取得する
# はじめに
CloudWatchのログの内容が膨大なときはCloudWatch Logs Insightsを使って必要なログのみを取得し分析していたのですが、AWS SDK for Rubyを使ってCSV形式で出力する機会があったのでその方法についてまとめてみました。CloudWatch Logs Insightsをあまり使ったことがない方、CloudWatchのログデータをCSV形式で取得する方法について興味がある方のお役に立つかと思います!
# CloudWatch Logs Insightsとは?
独自のクエリ構文を使いCloudWatch Logsのログデータをインタラクティブに検索、分析できるAWSが提供するサービスの一つです。:::note info
CloudWatch Logsとは?
CloudWatchの機能の一つで、AWSのリソースやアプリケーションから生成されるログデータを収集、監視、保存する
:::CloudWatchのサイドバーから「ログのインサイト」に進むと操作画面に移ります。
![image.png](https://qiita-imag
RoRにおける検索時の表記揺れ対応(漢字、カタカナ、ひらがな)
## 事象
検索機能を実装する際、表記揺れに対応する必要が生じました。例えば、検索ワードが「東京」の場合、「とうきょう」や「トウキョウ」といったひらがなやカタカナ表記でもヒットさせる必要がありました。また、「コンビニ」というカタカナで入力された場合には、「こんびに」というひらがな表記での検索にも対応することが求められました。この記事では、Ruby on Railsを使用して、これらの表記揺れに柔軟に対応する方法を共有いたします。
また、このアプローチは、「漢字のみ」「カタカナのみ」「ひらがなのみ」といった通常のパターンだけでなく、「漢字とカタカナとひらがな」「漢字とカタカナ」「漢字とひらがな」「カタカナとひらがな」といったイレギュラーなパターンに対しても柔軟に対応できます。これは、各文字が漢字、カタカナ、またはひらがなかどうかを個別に判断し、それに応じて適切な変換を行うことにより実現されています。この方法により、多様な表記揺れに対応することが可能になり、検索機能の精度を高めることができます。
## 対処法
以下のコードスニペットでは、RubyのStringクラスにStringH
gem `better_errors` の使い方【Ruby on Rails】
# はじめに
`bettr_errors`はRubyのgemで、特にRails開発において有用なツールだそうです。
コマンドを覚える必要もなく、開発環境においては入れるだけ得!なgemです。
# 使い方
特徴
– 詳細なエラーページを表示してくれる
– エラーが発生した場所でコードを試行できる
– エラーが発生した時点の変数を確認できる
– エラーが発生したソースコード周辺を表示してくれる以上の特徴により、問題の原因を突き止めやすくなります。
## インストール
### 1. `Gemfile`に追記
“`rb
group :development, :test do
# …省略gem ‘better_errors’
gem ‘binding_of_caller’# …省略
end
“`
`binding_of_caller`は、エラーが発生したコードの呼び出し元も教えてくれるgemです。
`better_errors`と一緒に使用されることが多い。
### 2. 追記したgemのインストール
“`bash
$ docker compose r
Rubyにおけるオブジェクト指向と基本の書き方
Rubyにおけるオブジェクト指向やクラス、インスタンスの生成、クラスの継承に関して理解が難しかったので、アウトプットを兼ねて記事にしてみました。
学び始めて間もないので認識が間違っている場合がありますので、ご了承ください。1. [クラスの作成](#1-クラスの作成)
2. [メソッドの組み込み](#2-メソッドの組み込み)
3. [オブジェクトのインスタンス化](#3-オブジェクトのインスタンス化)
4. [インスタンス変数とinitializeメソッド](#4-インスタンス変数とinitializeメソッド)
5. [ゲッターメソッド、セッターメソッド](#5-ゲッターメソッドセッターメソッド)
6. [クラスの継承](#6-クラスの継承)
7. [モジュール](#7-モジュール)# 1. クラスの作成
“`ruby
class Person#クラス名end
“`
– クラス名は英大文字から始める(Human)
– クラス名はキャメルケース(PerfectHuman)で記述する# 2. メソッドの組み込み
“`ruby
class Person#クラス名
【Rails】carrierwaveでファイルをアップロードする時に、元々のファイル名(オリジナル名)をカラムに保存されるようにする
## はじめに
carrierwaveで投稿に添付ファイルをアップロードする機能を作成しました。
その機能では、ローカル環境に保存するためセキュリティの問題でファイルを保存するときにランダムなファイル名に変更されるようにしております。
しかし、画面にファイル名を表示する時は元々のオリジナルのファイル名を表示する必要がでてきたので、今回はこの問題を対応した。
carrierwaveでのファイルの投稿機能自体については省略します。## 環境
`Rails 7.0.4`## 変更前のテーブル
|Posts|
|:–|
|title|
|text|
|attachment_file|## 実際に対応したこと
Postsテーブルにoriginal_file_nameカラムを追加して、attachment_fileを保存する前ににファイルのオリジナルのファイル名をoriginal_file_nameに保存する処理を追加しました。## original_file_nameカラムを追加します
~~~ruby:db/migrate/20240101XXXXXX_add_column_p
paizaラーニング解答: 正規表現メニュー[Ruby]
# 正規表現メニュー
https://paiza.jp/works/mondai/regular_expression/problem_index?language_uid=ruby## STEP: 1 文字列の検索
“`ruby
s = gets.chomp
puts s.index(/paiza/)
“`## STEP: 2 メタ文字の検索
“`ruby
s = gets.chomp
puts s.index(/\\\(\^\ \.\ \^\)\//)
“`## STEP: 3 任意文字の検索
“`ruby
s = gets.chomp
puts s.index(/p..za/)
“`## STEP: 4 クラス指定文字の検索
“`ruby
s = gets.chomp
puts s.index(/Math[123][ABC]/)
“`## STEP: 5 クラスの否定の検索
“`ruby
s = gets.chomp
puts s.index(/[^0123456789]…../)
“`## STEP: 6 範囲指定文字の検索
“
【個人開発】お弁当作りをサポートするアプリ「いつものお弁当」を作りました!【Rails】
# はじめに
こんにちは、あっぴー(@super-appy)と申します。
プログラミングスクールに通ってRuby on Railsを学習しています。
先日、お弁当作りをサポートするアプリをリリースしたので、アプリの紹介と技術についてまとめます!
よろしくお願いします。## 目次
1. WEBアプリの紹介
1. 技術構成
1. こだわった点
1. 少しだけ後悔している点
1. 参考にした記事など# 1. Webアプリの紹介
今ある材料で作れるレシピを生成できるAIレシピと、お弁当の記録カレンダーでお弁当作りをサポートするアプリです。![ogp.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2724148/3d45634a-ac8a-11cf-6436-36f927069fef.png)
サービスURL(レスポンシブ対応しておりますので、スマホからもどうぞ)
https://everydaylunchbox-d534442e43a4.herokuapp.com/
Github
http
ChatGPTを使って論文の全文を翻訳する
## はじめに
ChatGPTを利用して、自動で論文を翻訳したい人はたくさんいると思います。しかし、PDFの壁、403 Forbiddenの壁、Token数の壁などに阻まれて、サクッとはいきませんよね。
この記事では、オレオレツールを利用して、ChatGPTを利用して論文を日本語に翻訳する方法を紹介しています。あまり整頓された方法ではありませんが、誰がやっても原則は変わらないと思うので、同じようなことをしようとしている誰かの参考になると幸いです。
## 基本方針
1. [Zotero](https://www.zotero.org/) を使ってウェブページのスナップショットを取る
2. Rubyの [Nokogiri](https://github.com/sparklemotion/nokogiri) を使って論文を分割して保存する
3. ChatGPTのAPI版で翻訳する## 利用するツール
– [Firefox](https://www.mozilla.org/firefox/) – ブラウザ
– [Zotero](https://www.zotero.org/)
しりとり
Rubyでしりとりプログラムを作成しました。
“`Ruby
# しりとりプログラム
# 名鉄でんちゃん
# 2024/1/25
# データ数を入力する
def error_msg()
puts “正の整数を入力してください”
enddef correct(num1,num2)
if num1 == num2 then
puts “Yes”
end
endputs “正の整数を入力してください”
while true
data1 = gets.chomp
begin
num = data1.to_i
if num < 1 then puts "1未満の整数が入力されています" error_msg() else break end rescue error_msg() end end a_str = "" b_str = "" count = 1 for i in 0...num do puts "文字を入力してください" data2 = get
各言語における「symbol」はそれぞれ違う件(Ruby, JavaScript, TypeScript, Dart)
# はじめに
色んなプログラミング言語を勉強していくと、違う言語においてある単語が似たようで実は違うものとして使われることがしばしばありますね。今回はその中で今回「**シンボル**」(**symbol**)というものに関して話します。
`Symbol`というクラスは**Ruby**でも、**JavaScript**と**TypeScript**でも、**Dart**でも存在しますが、それぞれの言語でかなり違う概念です。
実際にRubyとDartでのシンボルは大体似ているから、Ruby経験者ならDartのシンボルのことも簡単に理解できるかもしれません。
しかしJavaScriptでは全く別物です。DartがJavaScriptに似ているとよく言われていますが、シンボルに関しては全然違うので、混同してはいけないことです。
確かにDartはあまりRubyに似ていないが、シンボルの概念のことだけはRubyの影響を受けている可能性がありますね。
Dartは比較的に新しい言語で、最近スマホアプリの開発に使われるFlutterの言語として広く知られるようになったばかりで、こうやってDar
経過月数を小数点込みで確認したい(Ruby)
## あらまし
例えば退職された方が、その会社に何か月在籍していたのかを計算する際に「25ヶ月在籍してた」というのはとても簡単に計算出来るけど、日数まで含めて「24.67ヶ月在籍してた」という計算の仕方は意外とサンプルコードが転がっていないようです。無ければ作れば良いという事で作成したので誰かの何かの役に立てれば。
## 考え方
年と月は簡単です。
上記の例では退職日と入社日の差分を取ったうえで”年”は12をかけて”月”と足すだけです。“日”をどうやって小数点にするかですが、退職日から入社日の差分を取り、退職月の日数を取得して割り算をしています。(1月の場合は31日で割り、2024年2月の場合は29日で割ります)
これをせず雑に30で割ると、小数点以下が若干おかしな事になってしまいます。
……と思ってコード書いて完成したつもりでしたが見直してたらバグがありました。
2/2入社、2/29退職 0.97ヶ月 → OK
2/1入社、2/29退職 1.0ヶ月 → OK
1/31入社、2/29退職 0.93ヶ月 → NG (本来1.03になってほしい)## 修正版 考え方
結構
【AtCoder】トヨタ自動車プログラミングコンテスト2024#1(AtCoder Beginner Contest 337)解法メモ【Ruby】
# はじめに
ABC337に参加しました。
今回はA~Eの5問完答できたのでE問題までメモを残します。# [A – Scoreboard](https://atcoder.jp/contests/abc337/tasks/abc337_a)
スコアの合計から勝敗を求める問題。
入力を合計して大小を比べるだけなので素直に実装する。
自分の回答
“`ruby
n = gets.to_i
t = 0
a = 0
n.times do
tt, aa = gets.split.map(&:to_i)
t += tt
a += aa
endif t > a
puts “Takahashi”
elsif t == a
puts “Draw”
else
puts “Aoki”
end
“`# [B – Extended ABC](https://atcoder.jp/contests/abc337/tasks/abc337_b)
Aからなる文字列+Bからなる文字列+Cから
【Ruby on Rails 】undefined method `image_name’ for nil:NilClass
# 初めに
投稿一覧ページでそれぞれの投稿に紐付いているユーザ名や画像を表示できなかったので書きます。
# 問題
以下エラーに遭遇しました。
![スクリーンショット 2024-01-24 20.09.38.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3536873/d6ec7692-41ee-d728-fef1-652a6d0f0b89.png)
# 解決方法
エラー文から推測して、この辺りを調査しました。
① Viewファイルの誤字脱字
② Postsコントローラーのindexアクション内でインスタントメソッドuserの定義忘れ
③ インスタントメソッドの理解不足
②まで調査して、インスタンスメソッドが何をしているのか理解できていなかったので復習しました。復習を終えて、③が原因ではないと分かりました。そこで、こちらの記事を参考にデータベース周りを調べました。
https://qiita.com/TeppeiMimachi/items/755639c775c72cb73ad9