- 1. 概要
- 2. model
- 2.1. 【Rails】local: trueとは?
- 2.2. 住所から市区町村を抜き出すのに苦労した話
- 2.3. プルリクの際に不要なアップロードファイルを削除したいとき
- 2.4. 画像投稿機能を実装する
- 2.5. Rails +α メモず
- 2.6. Mac(M2)でmysql2のinstallで泣きそうになった話し
- 2.7. 【Rails】テキストボックスの数を好きに増やしたり減らしたりしてみる
- 2.8. RubyでCSV出力
- 2.9. SigNozでRailsのAPMを取得&ログを無理やり転送する
- 2.10. Rails で CSV と TSV をダウンロード(失敗談)
- 2.11. 【Rails】パーシャル(部分テンプレート)内での変数の使用
- 2.12. docker/docker composeでrailsアプリをdocker化する
- 2.13. 現場で使える Ruby on Rails 5速習実践ガイドを読んだ
- 2.14. 【Ruby,Rails】長いメソッド名をわかりやすい名前に変えて使用してみよう
- 2.15. フォームを扱うヘルパーメソッド
- 2.16. RubyOnRails: チュートリアル: 第3章ほぼ静的なページの作成
- 2.17. アソシエーションのthrough, sourceオプションを図として理解する。
- 2.18. axiosを使わないでいいね機能を非同期化
i18n × form.label の使い方 【Rails】
# この記事のまとめ
**`<%= form.label :column %>` で `ja.yml` の `column` にアクセスしたい時は**例
“`erb:app/views/users/new.html.erb
<%= form.label :email %>
<%= form.email_field :email, id: :user_email, class: "form" %>
“`以下のように
`locals/activerecord/ja.yml` に `activerecord: attributes: model: column`
に記述すれば良いです。例
“`yml:locals/activerecord/ja.yml
ja:
activerecord:
models:
user: ユーザー
attributes:
user:
email: メールアドレス
“`# i18n × `form.label`
いつものごとくRailsの魔術です。
“`erb
<%= for
通知機能つけてみた
概要
ToDoアプリに「いいね」や「コメント」などがついた時の通知を受け取れるようになるためのコードを書いた。
前提として通知させたい機能は既に制作したものとする。
model => controller => view の順でプログラムしていこうと思う完成イメージ
model
“`ruby:create_notices_rb
class CreateNotices < ActiveRecord:
【Rails】local: trueとは?
# local: trueとは
Railsにおける`local: true`は、リンクやフォームなどのHTML要素で使用されるオプションの一つで、リンクやフォームの送信をローカルなリクエストとして扱うことを指定します。通常、Railsではリンクやフォームを生成する際に、外部のURLや他のサーバーに対してリクエストを送信するようになっています。しかし、`local: true`を使用することで、そのリンクやフォームの送信を現在のアプリケーション内で処理されるローカルなリクエストとして扱います。
例えば、以下のように`link_to`ヘルパーを使用してリンクを生成する際に`local: true`を指定することができます。
“`html
<%= link_to "Home", root_path, local: true %>
“`
この場合、`root_path`へのリンクがクリックされたときに、そのリクエストはローカルなリクエストとして処理されます。つまり、ページ遷移が発生せず、**現在のページ内でリクエストが処理される**ようになります。このオプションは、特にAjaxを
住所から市区町村を抜き出すのに苦労した話
## はじめに
実務で住所を使った処理を実装することがあり、そこで苦労したため、今後同様の対応で苦労しないように記載しました。
## 苦労したこと
以下のようにお客様の住所の都道府県と市区町村の情報を入力するフォームは元々ありました。そのフォームから入力されたデータを使用したバッチ処理を実装することになりました。すでに作成されたテーブルの中にある都道府県と市区町村を取得したかったのですが、市区町村のデータを取得するのに苦労しました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/673263/d49cd96b-f8bb-213d-7474-318504c990a0.png)
なぜなら、市区町村部分は以下のような形式で入っていたため、「さいたま市北区」だけを取得したいという処理が想像以上に難航しました。
“`
さいたま市北区ホゲホゲ1-1-1
“`最初は正規表現で市区町村部分だけ取得すればよいのでは?と思い、調べていたところ以下の記事を見つけま
プルリクの際に不要なアップロードファイルを削除したいとき
## .gitignoreの設定を忘れて画像ファイルなどまでaddしてしまった時は・・・
### ファイルをコミットした後にファイルを削除したい時
“`
git rm –cached ファイル名
“`### コミット&pushした後にファルを削除したい時
“`
git rm ファイル名
“`
でリモートリポジトリから削除。
画像投稿機能を実装する
Gem carrierwave(Webアプリケーションにファイルアップロード機能を提供するGem)を使用する。
## アップローダーとは
・アップローダーとはクラスオブジェクトである。
・アップローダーから生成されたオブジェクトを使って、ファイル名やファイルの保存先を取得できる。
・アップローダーにはファイルアップロードに関する設定を書ける## 実装の流れ
1. アップローダーを作成
2. アップローダーをモデルで使用するように宣言
3. アップロードの設定を各ファイルで行う## 達成したいこと
▪️掲示板に画像を設定できること
▪️サムネイルと表示されたラベルをクリックすると、ファイル選択画面が表示されること
▪️掲示板入力フォームで画像のみが未入力で作成ボタンを押した場合でも、掲示板一覧画面にリダイレクトして「掲示板を作成しました」というフラッシュメッセージが表示されること
▪️carrierwaveで使うカラムはBoardモデルにboard_image という名前で追加
▪️画像ファイルを登録する際に
→・画像は必須項目に含めない
・アップロードできるファイルは
Rails +α メモず
# はじめに
メモ群なので、気になった見出しをご覧ください!
# メモず
## `scaffold`って何?
**「全生成便利コマンド」**> Railsのscaffold(スキャフォールド)は、Ruby on Railsフレームワークの機能の一つで、CRUD(Create, Read, Update, Delete)操作を行うための基本的なアプリケーションコードを自動的に生成するツールです。RailsはRuby言語で書かれたWebアプリケーションフレームワークで、開発を迅速かつ簡単にするための多くの便利な機能を提供しています。
>
> scaffoldを使用すると、以下のようなコンポーネントが生成されます:
>
> 1. **モデル(Model)**: データベースのテーブルに対応するRubyクラス。データの検証(バリデーション)、関連付けなどのロジックを含む。
>
> 2. **ビュー(View)**: アプリケーションのユーザーインターフェース。通常、HTMLテンプレートであり、ERB(Embedded Ruby)が使用されることが多い。
>
> 3
Mac(M2)でmysql2のinstallで泣きそうになった話し
Mac(M2)で、RoRの開発環境をローカルにとりあえず準備しようとしたらハマった。
mysql2がinstallできなくて泣きそうだったという話し。PATHの問題なんだろなと思って、下記を参考に試したらできた。
https://github.com/brianmario/mysql2/issues/1175#issuecomment-846496862
下記が実行と結果。
“`terminal
❯ gem install mysql2 — \
–with-mysql-lib=$(brew –prefix mysql)/lib \
–with-mysql-dir=$(brew –prefix mysql) \
–with-mysql-config=$(brew –prefix mysql)/bin/mysql_config \
–with-mysql-include=$(brew –prefix mysql)/includeBuilding native extensions with: ‘–with-mysql-lib=/opt/homebrew/
【Rails】テキストボックスの数を好きに増やしたり減らしたりしてみる
どうもこんにちは。
今回は、Railsでフォームを作る時に使用するGemの「`nested_form`」について解説します。
# テキストボックスの数を増やしたり減らしたりってどういうこと?
以下のようなフォームがあるとして、「追加」ボタンや「削除」ボタンをクリックしたときに、対象の要素を追加したり削除したりすることを今回は実現します。
![スクリーンショット 2024-02-09 11.32.27.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2711491/7ab30aef-5ea7-04d8-9e69-3b1ba2a2cb5d.png)
# 実装手順
## 1. Gem導入
“`Gemfie:Gemfile
gem ‘nested_form`
“`“`sh
bundle install
“`## 2. ビューファイルを作成する
“`erb:app/views/content_groups/edit.html.erb
<%= nested_form_for @con
RubyでCSV出力
## まえがき
実務でデータをcsvにまとめて、出力してほしいといわれた。
今回はPostというオブジェクトのデータをcsvに出力してみる。#### 使用技術
– CSV(Ruby組み込みライブラリ)
https://docs.ruby-lang.org/ja/latest/library/csv.html## 手順
– rakeタスクの定義
– csv出力ロジックの製造
– タスク実行## 1, rakeタスクの作成
以下コマンドで“`lib/tasks/csv.rake“`が生成される。
“`ruby
$ rails g task ファイル名
$ rails g task csv
“`“`lib/tasks/csv.rake“`の中身は以下のようになっている。
“`ruby
require ‘csv’namespace :csv do
end
“`試しにhelloを出力するだけのタスクを作成する。
“`ruby
desc “test”
task greet: :environment do
puts “hello”
end
SigNozでRailsのAPMを取得&ログを無理やり転送する
## 結論
– SigNozでAPMを取得するのはわりかし簡単
– 2024/02現在でログを転送するは若干面倒## 前提条件
– Ruby on Rails7.1の環境をDockerとdocker-compose.ymlで構築済み
## 手順
### SigNozを構築する
https://signoz.io/docs/install/docker/
を手順通りに実行
“`sh
git clone -b main https://github.com/SigNoz/signoz.git && cd signoz/deploy/
docker compose -f docker/clickhouse-setup/docker-compose.yaml up -d
“`http://localhost:3301
にアクセス
### SigNozでログの転送準備
https://signoz.io/docs/userguide/send-logs-http/
の手順通りに– deploy/docker/clickhouse-setup/docker-c
Rails で CSV と TSV をダウンロード(失敗談)
Rails で,あるモデルのデータ一覧を CSV でも TSV でもダウンロードできるようにするとき,ちょっとハマったのでメモ。
# やりたかったこと
ItemsController の `index` アクションで
“`rb
def index
@items = Item.all
respond_to do |format|
format.html do
endformat.csv do
endformat.tsv do
end
end
end
“`みたいなことがしたかった。
要するに,リクエストが
* `/items` なら HTML を
* `/items.csv` なら CSV を
* `/items.tsv` なら TSV を返す,と。
んで,CSV の場合のテンプレートは Ruby で記述し `/app/views/items/index.csv.ruby` というファイルで提供する。
ここまではよくある話。
では TSV のテンプレートをどうするか?
# 最初にやった方法
【Rails】パーシャル(部分テンプレート)内での変数の使用
# はじめに
この記事では学習中に出会ったエラーとその解決までの道のりを自分のために記録しています。
初学者のため、理解が不十分なところがあるかもしれません。
その場合はご指摘いただけると幸いです。# 起こった問題
パーシャルにローカル変数を渡そうとしたが上手くいかなかった# 結論
localsオプションを使用してローカル変数を渡すときは
“`
<%= render partial: ‘パーシャル名’, locals: { ローカル変数名: インスタンス変数名} %>
“`
の**partial**を省略せずに書く
またはpartialを省略するならlocalsも省略する# 解決までの道のり
### 前提条件
– Solidusを使用してECサイトを作成中
– 商品カテゴリーページへのリンクを含むヘッダーをパーシャル化### なぜパーシャル内でインスタンス変数を使用しないほうがいいのか?
パーシャルとコントローラーが結びついてしまうと、コントローラー内の変数を変更したときにパーシャル内の記述も変更しなければならなくなり、せっかくパーシャルとして切り出したのに使い勝手
docker/docker composeでrailsアプリをdocker化する
## はじめに
dockerとdocker composeでrailsアプリをDocker化する方法について記載します。
dockerとdocker composeについては勉強している程で記載しています。## Dockerおすすめ本
下記勉強に使用した本ですが、初学者でも分かりやすかったので共有します。Docker&仮想サーバー完全入門 Webクリエイター&エンジニアの作業がはかどる開発環境構築ガイド
![スクリーンショット 2024-02-09 20.32.53.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1003708/5123ba74-3c16-9c89-1dae-d090868961fb.png)https://amzn.asia/d/b6qGAbr
## 構築環境
“`
Ruby 3.2.2
Rails 7.0.6
postgres 12
“`## ①必要ファイルの作成を行う
以下の4つのファイルの作成が必要です。
– Dockerfilehttps://docs
現場で使える Ruby on Rails 5速習実践ガイドを読んだ
## はじめに
今回はRailsのインプット用の教材として[現場で使える Ruby on Rails 5速習実践ガイド](https://www.amazon.co.jp/%E7%8F%BE%E5%A0%B4%E3%81%A7%E4%BD%BF%E3%81%88%E3%82%8B-Ruby-Rails-5%E9%80%9F%E7%BF%92%E5%AE%9F%E8%B7%B5%E3%82%AC%E3%82%A4%E3%83%89-%E5%A4%A7%E5%A0%B4%E5%AF%A7%E5%AD%90/dp/4839962227/ref=sr_1_6?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&crid=7NL117JN69F3&keywords=Rails&qid=1642106965&sprefix=rails%2Caps%2C252&sr=8-6)
を読んだので、その感想について記事にします。## 良かった点
Railsの機能について実際にアプリを作ってみながら解説するという流れで
解説していてわかりやすかったです。
テスト
【Ruby,Rails】長いメソッド名をわかりやすい名前に変えて使用してみよう
どうもこんにちは。
今回は、Ruby,Railsでメソッド名を自分のわかりやすい名前に変更して使用する方法を紹介します。
# メソッド名を変更して使用する方法
大きく分けて2つです。
1. `alias`や`alias_method`を使用する
1. 独自のメソッド名変更メソッドを用意するただし、`alias`や`alias_method`は全てのメソッドに対して使用できる訳ではありません。
以下のメソッドに対して`alias`や`alias_method`を使用することができます。1. **明示的に定義されたメソッド**: クラス内で明示的に定義されたインスタンスメソッドやクラスメソッドには、通常、エイリアスを定義することができます
1. **継承されたメソッド**: スーパークラスから継承されたメソッドに対してもエイリアスを定義することが可能です一方で`alias`や`alias_method`を使用できないメソッドは以下のようなものです。
1. **動的に生成されるメソッド**: メタプログラミング技術やフレームワークの内部機構によって動的に生成されるメソッ
フォームを扱うヘルパーメソッド
Railsを使ったアプリケーション作成の流れと、よく使いそうなフォームを生成するメッセージヘルパーを少しまとめました。
実行環境
ruby 3.0.1
rails 7.1.3## Railsアプリケーションの作成
“`ruby
~/ルートディレクトリ$ rails new for_form_helper_method -d postgresql
cd for_form_helper_method
“``$ rails new [任意のアプリケーション名] -d [使用するデータベースアプリケーション名]` でアプリケーションを作成し、作成したアプリケーションのディレクトリに移動。
“`ruby
[~/for_form_helper_method]$ rails g scaffold AccountCreate name:string
“``$ rails g scaffold [モデル名] [カラム名①:データの型① カラム名②:データの型②・・・]` でマイグレーションファイル、モデル、コントローラー、ルーティング、ビューを生成。
“`rub
RubyOnRails: チュートリアル: 第3章ほぼ静的なページの作成
こちらのページとほぼ同じことを行いました。
[第3章ほぼ静的なページの作成](https://railstutorial.jp/chapters/static_pages?version=7.0#sec-static_pages)確認した環境
“`text
$ ruby –version
ruby 3.1.2p20 (2022-04-12 revision 4491bb740a) [x86_64-linux-gnu]$ rails –version
Rails 7.1.3$ bundler –version
Bundler version 2.5.6$ bundle –version
Bundler version 2.5.6
“`## プロジェクトの作成
“`bash
rails new sample_app
cd sample_app
bundle install
“`サーバーの起動
“`bash
rails server -b 0.0.0.0
“`## ページの作成
“`bash
rails generate contro
アソシエーションのthrough, sourceオプションを図として理解する。
# きっかけ
Railsを使って掲示板をブックマークする機能を実装する勉強中、中間テーブルを絡めたアソシエーションの理解に苦しんだ。
特に、後述の`bookmarked_boards.destroy(board)`と、`bookmark.destroy(bookmark)`が同じ意味であることのイメージができなかった。
図としてイメージをすることでさらに理解を定着させたい。:::note warn
※部分は独自の解釈が含まれるので、間違いであればご指摘いただけると幸いです。
:::# 環境
ruby 3.14
rails 7.0.3.1
mac OS Sonoma 14.2.1
docker 24.0.7
docker compose v2.23.3-desktop.2# したいこと
* 多対多のアソシエーションにおけるthroughオプションと、sourceオプションを理解する。
* `bookmarked_boards.destroy(board)`と`bookmarks.destroy(bookmark)`が何故同じ結果になるのかを図で理解する。# 今回のポイン
axiosを使わないでいいね機能を非同期化
こんにちは、普段はプログラミングスクールでメンターをやっている@takokkeです。
今回はいいね機能の非同期化手順を学習記録としてまとめてみました。axiosなどのjsライブラリを使わず、シンプルにjQueryだけで実装したいと思います
# 非同期処理の大まかな手順
1. いいねボタンを押したら、javascriptリクエストがコントローラに送られる
1. アクションがデータ処理を行い、いつもならhtml.erbにインスタンス変数を渡すが、今回はjs.erbへ渡す
1. js.erbに記述したjsコードが、いいねボタンの部分だけ書き換えるポイントは、いつもならコントローラで定義したインスタンス変数がhtml.erbに渡るのを、**js.erb**に渡すということです。
# いいねボタンのHTMLを部分テンプレート化
いいねボタンの部分テンプレートを作成します。“`erb:app/views/favorites/_favorite-btn.erb
<% if book.favorited_by?(current_user) %>
<%= link_to book_fa