- 1. VSCode + Docker + Docker-compose +Railsのデバッグの設定方法
- 2. Ubuntu 22.04 で Rails 4.2 を動かすには?
- 3. ほぼChatGPTまかせでTwitterライクなSNSを作ったので、対話全文と手順・所感など
- 4. rbenvでRuby 3.2.2をinstall するとBUILD FAILEDになる
- 5. 【Rails】CSV出力機能を作成する
- 6. Ruby + Goで魔法のスプレッドシートの更新を通知するSlackAppを作ってみた
- 7. 【Rails】has_manyでオートセーブが設定できるのは便利
- 8. 【Rails】ActiveRecord::Base.transactionについて
- 9. 【Rails】Rspecで500エラーが出る
- 10. Railsでログインを押すとログアウトに表示を変更する方法
- 11. Devise 使用 Rails アプリで、パスワード変更機能をユーザー情報編集から分離➡パスワードリセットと統合してみた話
- 12. 【Rails】意図していないアクションが実行されてしまう時に確認してほしいこと
- 13. dockerコンテナ内でrails dbconsoleが使えないエラーが出た時の対処法
- 14. 【Rails】destroyではなくshowが実行される
- 15. 【Rails】buildメソッド結構有能かもしれない
- 16. 繰り返し処理
- 17. 【Ruby・Rails】nil? ・empty? ・blank? ・present?の使い方
- 18. 麻雀AI対戦サーバMjaiのインストール
- 19. インターフェースを活用したトレイトプログラミングとプロパティパターンマッチングの相性が素晴らしいという話
- 20. 【Rails】namespaceで管理者と利用者ごとにcontrollerとviewをわけて処理を変える。
VSCode + Docker + Docker-compose +Railsのデバッグの設定方法
# 概要
`Dev container`の環境を作らず、ステップ実行でデバッグが出来る環境を作成しました。今回は、その方法を記載します。# 事前設定
以下がインストールされている事が前提です。
– **Docker Desktop**
– **Visual Studio Code**
– **VSCode rdbg Ruby Debugger**# ディレクトリー構成
“`sh
.
├── db/
│ ├── conf/
│ │ └── .env
│ └── postgres_volume # ← コンテナー起動時に自動生成
├── web/
│ ├── vscode/
│ │ └── lanuch.json
│ ├── # rails関連のファイル
│ ├── Dockerfile
│ ├── Gemfile
│ └── Gemfile.lock
└── compose.yml
“`# 環境構築
– `Dockerfile`の構成は下記
“`Dockerfile
FROM ruby:3.2.2
ENV LANG=ja
Ubuntu 22.04 で Rails 4.2 を動かすには?
あるRailsアプリケーションを8年ぶりに動かそうとしています。
実行環境は、WSL上の Ubuntu 22.04 です。動かせるでしょうか?8年前は2016年、Rails 5.0 がリリースされた年です。
残念ながら、このアプリケーションのRailsのバージョンは`5.0`ではなく、`4.2`でした。
Rails 4.2 がサポートしているRubyのバージョンは`2.2`です。## 問題
Ubuntu 22.04 では Ruby 2.2 が動きません。正確には `gem install` できません。
実行すると次のエラーが出ます。“`sh
►gem install bundler
ERROR: While executing gem … (RuntimeError)
Marshal.load reentered at marshal_load
“`実行したときに、このエラーが出ずにsegmentation faultすることもあります。
Ruby 2.2には`bundler`が含まれません。
`gem install`できないと`bundle
ほぼChatGPTまかせでTwitterライクなSNSを作ったので、対話全文と手順・所感など
というわけで、ChatGPTにコードを出力してもらい、TwitterライクなSNSサービスを作りました!
使ってくれる人がいる限りメンテナンスはし続けるつもりなので、ぜひ使ってみてください。URL: https://trad.7rpn.net
tradという名前のWebサービスです。
古き良き(=Traditional)つぶやきSNSという意味を込めてこの名前にしました。![IMG_0545 2.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/268599/e969ae46-7378-b712-40c0-e14b89c91ccb.jpeg)
### なぜ作ろうと思ったか
**「最近のX(旧Twitter)がひどいので、自分の理想に近い快適なSNSを作りたかった」**
これです。もう今のXはいろいろとひどすぎる。何とかならないのか。
震災の時のXは本当にひどくて、人の命がかかっているのにインプレッション稼ぎのためにデマを流しているような投稿があったりしました。
これはさすがにダメだろと思った
rbenvでRuby 3.2.2をinstall するとBUILD FAILEDになる
## 環境
– macOS Monterey 12.6.2
– rbenv 1.2.0
– Homebrew 3.4.7
## rbenv を使ってRubyをinstallすると失敗する。
Ruby3.2.2をインストールしようとすると、以下のようにエラーが発生してビルドが失敗してしまうので、解決のために実施したことのメモになります。“`
$ rbenv install 3.2.2
BUILD FAILED (macOS 12.6.2 using ruby-build 20230717)
“`## 対応
最初に環境構築をしてから、しばらくソフトウェアのアップデートなどしてこなかったので、今回関係ありそうなツールのアップデートから始めました。
– Homebrew, ruby-buildの更新
“`
$ brew update
$ brew upgrade ruby-build
$ brew upgrade rbenv
“`
上記コマンド実行後、再びインストールを試しましたが、解決しませんでしたので続きます。
– opensslのアップデート [参照](https://g
【Rails】CSV出力機能を作成する
## はじめに
Railsでモデル(Item)のデータを取得しcsv出力する機能を作成する## 環境
`ruby 2.7.2p137`
`Rails 6.0.3.4`## コンロトーラー
~~~ruby:app/controllers/items_controller.rb
require ‘csv’def export_csv
items = Item.all # 出力したいデータと取得します
headers = [‘id’, ‘name’]
data = CSV.generate do |csv|
csv << headers # 1行目ヘッダーになるため、項目をheadersに代入して初めにcsvに書き込みます。 items.each do |item| csv << [item.id, item.name] # 1行目にヘッダーを書き込み終えたら、2行目以降はitemsをループ処理で書き込んでいきます。この時ヘッダーの項目と出力する値が乖離しないように同じ順番にしています。 end end send_data
Ruby + Goで魔法のスプレッドシートの更新を通知するSlackAppを作ってみた
## はじめに
IT企業のインターン情報が多数掲載されている[魔法のスプレッドシート](https://magic-spreadsheets.pages.dev)ですが、新しい募集が掲載されても変更の通知を受け取ったり差分を確認する機能がないため、優秀な人材と企業がマッチする機会が損なわれるという課題を感じていました。そこで今回は、魔法のスプレッドシートが更新されたときにSlackに通知を流すSlackAppを作ってみました。
完成したコードはGithubで公開しているので参考程度にどうぞ。
https://github.com/piny940/magic-spreadsheet-notifier
SlackAppはこちらのサイトから追加できるようにしました。
https://magic-spreadsheet-notifier.piny940.com
## 技術選定
今回作るSlackAppの動作は写真のようになります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3
【Rails】has_manyでオートセーブが設定できるのは便利
どうもこんにちは。
今回は、モデル同士の関連付けを定義する時によく使用される`has_many`での便利なオプション`autosave: true`についてメモします。
以降は、以下の記事の知識(`build`メソッド)を使用しています。
https://qiita.com/PDC-Kurashinak/private/413059bf52c7ab14ed16
## has_manyってなに?
`has_many`とは、モデル同士を関連付けるために`belongs_to`と一緒に使用するものです。
UserモデルにPostモデルが子として紐づいていることを定義したい場合は、以下のように定義します。
“`ruby
# Userモデル
class User < ApplicationRecord has_many :posts end # Postモデル class Post < ApplicationRecord belongs_to :user end ``` has_manyにはオプションがいくつかあり、最も使用されるものは`dependent:
【Rails】ActiveRecord::Base.transactionについて
どうもこんにちは。
今回はRailsでDB操作をする時に便利な`ActiveRecord::Base.transaction`についてメモします。
# トランザクションって何?
トランザクションをネットで検索すると、**「ここからここまでワンセット」な処理単位が「トランザクション」** というわかりやすく説明してありました。
まさにその通りです。
この考えをDBの操作でも活用しているものがRailsにおけるトランザクションです。
# 使い方
基本的に、データの登録、更新、削除する時のメソッドとして使われます。
`ActiveRecord::Base.transaction do … end`ブロックでsaveメソッドやupdateメソッド処理の箇所を囲うようにして使用します。
“`ruby
def create
## データを登録するためのデータを作成
user = User.find(params[:id])
profile = Profile.new(user_id: user.id, hobby: ‘野球をすること’, favori
【Rails】Rspecで500エラーが出る
# はじめに
この記事では、学習中に出会ったエラーとその解決までの道のりを自分のために記録しています。
初学者のため理解が不十分なところがあるかもしれません。その場合はご指摘いただけると幸いです。# 起こった問題
Solidusを使用してECサイトを作成中、Rspec(リクエストスペック)を実行したところ500エラーが返ってきた# 結論
テストに使用しない場合でもviewで使用しているデータはテストデータとして作成しておく# 解決までの道のり
### 前提条件
– Solidusに予め用意されているテストデータを使用
– viewには商品カテゴリーのパンくずリスト、商品画像、商品名、金額を表示### 発生したエラー
スペックファイルは下記のように記述
“`spec/requests/product_spec.rb
require ‘rails_helper’RSpec,describe “Products”, type: : request do
describe “GET /products” do
let!(:product) { create(:
Railsでログインを押すとログアウトに表示を変更する方法
## Railsでログインを押すとログアウトに表示を変更する方法
今回はRuby on Railsでログイン機能を実装します!
ログイン機能を実装しようとすると、ログイン・ログアウト・新規登録のボタンが3つできるかもしれません。今回は3つできるボタンを2つで実装し、ログインボタンを押したらログアウトと表示できるようにしていきたいと思います!(イメージは以下の動画です)
![ログイン.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3687617/30d26900-51b4-51bb-0646-223227b9db92.gif):::note warn
注意
この記事は、すでにログイン・ログアウト・新規登録の実装ができていることを前提に書いています。
:::### 目次
1.View周り
2.コントローラー設計
3.ルート周り## View周り
まず、ビューページのどこかに以下のようにログイン・ログアウト・新規登録のボタンを実装しているかもしれません。“`ruby:tweets/i
Devise 使用 Rails アプリで、パスワード変更機能をユーザー情報編集から分離➡パスワードリセットと統合してみた話
## 概要(やってみたこと)
1. ユーザー編集画面で、パスワードとそれ以外の属性の編集画面を別々にする
1. パスワード**以外**の編集時は確定時のパスワード再入力を不要とする
1. パスワード変更画面/処理はパスワードリセットのView/Actionと共用にしてパスワード変更処理を一つにする末筆の通りあまりお行儀は良くない気がするので、コードの量より分かりやすさが重要な状況(大規模プロジェクトetc.)には向かないと思います。
コード量抑制を重視する状況下では使いどころもあるかもしれませんが、こんなやり方もできたという一種の頭の体操的に捉えて頂けますと幸いです🙏なお前提として、本稿内では Devise の認証対象のモデルは「`User`」としています。
モデル名が異なる場合は適宜読み替えてください。## ソース・環境
ソース全文・全履歴は下記になります。なるべく対応内容ごとの変化が分かりやすいようにコミット単位も調整しました。
https://github.com/k-yamauchi-1/passwords_edit_with_devise
ローカル環境は
【Rails】意図していないアクションが実行されてしまう時に確認してほしいこと
## はじめに
Railsでアプリ開発をしていて、意図通りにアクションが実行されないことはよくあると思います。
その原因は様々あると思いますが、今回は未来の自分の為にいくつか例を投稿します。
ついでに初学者の方々の助けにもなれば幸いです。## ルーティングの記述の順番を確認する。
Railsのルーティングは、ルートの定義順によって評価されます。
つまり、最初にマッチしたものが実行されます。
以下の場合`item_export_list_path`をリクエストすると
`item#export_list`ではなく`item#show`が実行されてしまいます。
~~~ruby:config/routes.rb
post ‘items/:id’, to: ‘item#show’, as: ‘items_show’
post ‘items/item_list’, to: ‘item#export_list’, as: ‘item_export_list’
~~~
なので以下のように順番を入れ替えて修正
~~~ruby:config/routes.rb
post ‘items/item_lis
dockerコンテナ内でrails dbconsoleが使えないエラーが出た時の対処法
**概要**
—————————————DBコンソールを起動しようとDockerコンテナ内で以下コマンドを実行したが,エラーが発生。
“`
# rails db
Couldn’t find database client: psql. Check your $PATH and try again.
“`rails dbコマンドを実行したときにPostgreSQLのクライアントであるpsqlが見つからないときに表示されるとのこと。
Dockerfileを訂正し,PostgreSQLをインストールする必要がある。**解決策**
——————————————–
Dockerfile
“`rb
FROM ruby:3.1.4
RUN curl -sL https://deb.nodesource.com/setup_19.x | bash – \
&& wget –quiet -O – /tmp/pubkey.gpg https://dl.yarnpkg.
【Rails】destroyではなくshowが実行される
# はじめに
この記事では、学習中に出会ったエラーとその解決までの道のりを自分のために記録しています。
初学者のため理解が不十分なところがあるかもしれません。
その場合はご指摘いただけると幸いです。# 起こった問題
スクールのカリキュラムでX(旧Twitter)のような短文投稿サイトを作成した際、destroyアクションを実装して投稿の削除ボタンを作成したが、showアクションが実行されてしまった# 結論
RubyのコードではなくJavaScriptの問題の可能性があるためコンソールを確認してみる# 試したこと①
元の記述(これだとdestroyできない)
“`
<%= link_to "削除", user, method: :delete, data: { confirm: "本当に削除しますか?" } %>
“`
この記述で作成した削除リンクをクリックするとshowアクションに飛んでしまいました。
特にエラーが表示されるわけでもありません。
調べたところ、link_toをbutton_toに変更すると解決する場合があるとのことだったので試してみました。
“`
<
【Rails】buildメソッド結構有能かもしれない
どうもこんにちは。
今回はRailsで使いこなすと楽そうな`build`メソッドについて調べました。
# buildメソッドとは?
`build`メソッドは`new`メソッドにかなり似たメソッドです。
ただし、場合によって、`new`メソッドを使用するより`build`メソッドを使用することでコードの簡略化ができます。# newメソッドとの違い
## newメソッド
– Active Recordモデルの新しいインスタンスを作成する
– モデルクラス自体に対して直接呼び出される“`ruby
new_post = Post.new
“`– 関連付けを意識せずに単独でオブジェクトを作成する場合に使用される
## buildメソッド
– `has_many`、`has_one`、`belongs_to`などの関連付けが定義されている場合に使用される
– 関連付けられたオブジェクトの新しいインスタンスを作成し、そのインスタンスを親オブジェクトに自動的に紐付ける
– 関連付けを表すメソッドチェーンの一部として使用される“`ruby
user = User.fi
繰り返し処理
繰り返し処理を2通りで実装しました。
>課題:iを0から9まで10回ループするプログラムを作成しなさい。
while文
“`ruby
# whilei = 0
while i < 10 do puts "Hello" i += 1 end ``` times文 ```ruby 10.times do |i| puts "#{i}: hello" end ```
【Ruby・Rails】nil? ・empty? ・blank? ・present?の使い方
## はじめに
使い分けがフワッとしていたので改めてまとめます。
## メソッドごとの違い| メソッド |判定対象| 出力 |
| — | ———– | ——- |
| nil?| nil |Boolean|
| empty?|””(空文字)|Boolean|
| blank?| nil + “”(空文字) + [] + {} |Boolean|
| present?|nil + “”(空文字)以外か|Boolean|https://railsdoc.com/page/empty
## nil?
“`ruby
hoge = nil
puts hoge.nil?
# true
hoge = “”
puts hoge.nil?
# false
“`## empty?
“`ruby
hoge = “”
puts hoge.empty?
# truehoge = “hoge”
puts hoge.empty?
# falsehoge = nil
puts hoge.empty?
#undefined method `empty?’
麻雀AI対戦サーバMjaiのインストール
## [1.]概要
### [1-1.]目的
麻雀AI対戦サーバ「Mjai」をインストールする手順をまとめます。
### [1-2.]「Mjai:麻雀AI対戦サーバ」とは
「Mjai:麻雀AI対戦サーバ」(以下mjai)とは、麻雀AI同士で対戦することができるrubyベースのアプリケーションです。
詳細は[Mjai 麻雀AI対戦サーバ](http://gimite.net/pukiwiki/index.php?Mjai%20%E9%BA%BB%E9%
インターフェースを活用したトレイトプログラミングとプロパティパターンマッチングの相性が素晴らしいという話
## はじめに
皆様は日頃から各プログラミング言語の特徴や機能についてキャッチアップしていますか?
今回はRubyのmixinの勉強を進めていく中でtraitとの違いが気になり、C#ではどう表現するのか気になり、勉強がてらこの記事を書くに至りました。笑Rubyのmixinてメソッドのオーバーライドに使うってこと?Rubyってアップキャストないの??
うーんまだわからないなー
今更聞けない! Ruby の継承と mixin の概念を継承リストから学ぶ https://t.co/0337g9uS9L #Qiita 【Rails】namespaceで管理者と利用者ごとにcontrollerとviewをわけて処理を変える。
## はじめに
タイトルの通り、namespaceを使って管理者(admin)と利用者(user)でコントローラーとビューをわけたいと思います。
利用者に公開する画面と管理者に公開する画面は別々で、管理者だけがアクセスできる処理を作成するなどよくあることだと思います。
なのでこのような記事は調べれば沢山でてきますが、勉強のためアウトプットを兼ねて投稿したいと思います。
説明を省略する箇所が多いかもしれませんので、深く理解したいかたは他の記事をみることをおすすめします。## namespaceとは
namespaceは名前空間とも呼ばれており、簡単に言うとコントローラーやモデル、ビュー、ルーティングなどをグループ化するために使用される仕組み。## namespaceの使い方
商品一覧を表示するurl`/items`があるとします。
### ルーティング
~~~ruby
Rails.application.routes.draw do
resources :items
end
~~~
通常だとこのようなルーティングを設定することが多いと思いますが、この状態だと管理者(admin