- 1. タイトル
- 1.1. Enumが定義されたインスタンス変数を更新する
- 1.2. 【初学者】ログイン機構のまとめ【Webアプリ開発の道~その3~】
- 1.3. カラムの合計値を出す方法
- 1.4. 【Rails】画像と動画、どちらかを表示する方法
- 1.5. 【Ruby】初心者がRuby on Railsをやる!
- 1.6. 鋸の使い方 ?
- 1.7. GemfileでグローバルインストールするGemを管理する
- 1.8. DockerでRuby on Railsの環境を構築する際のentrypoint.shのコマンド及びコード理解
- 1.9. Rails お気に入りランキング実装
- 1.10. 今日からWEB開発 1日目
- 1.11. Ruby と crystal で解く AtCoder ABC248 C-D
- 1.12. fileterメソッドを使用してN+1問題を解決した
- 1.13. 【Rails】cocoonを用いたデータを表示する方法
- 1.14. 【Rails】Gem::Ext::BuildError: ERROR: Failed to build gem native extension.
- 1.15. 【Rails】booleanは実質メソッド!?と感じたこと
- 1.16. RuboCop::Cop::Rails::PresenceというRubocupの指摘
- 1.17. 自作言語でもRubyの map(&:foo) を真似したい!
- 1.18. 画像キャッシュを部分的に無効化する
- 1.19. ransackを使った検索機能実装
100日後くらいに個人開発するぞ!day001
# まずはこれをやってみる!

https://prog-8.com/paths/rails
# 今日はHTMLに触れてみた!
“`
* 開始タグと終了タグ
*開始タグ 終了タグ
*
* 見出しをつける
*見出し
* hはheadingの頭文字
*,
,
,,,
,,,と数字が大きくなるについれて見出しは小さくなる
* 段落をつける
*タイトル
Enumが定義されたインスタンス変数を更新する
仕事のコードを読んでいたところ次の記述に遭遇しました。
“`ruby:sample.rb
(~)? (モデル).accept! : (モデル).refuse!
“`
(~)が真ならば(モデル).accept!、偽ならば(モデル).refuse!を実行するという記述です。「ほう、`accept!`なんてメソッドがあるのか」と思い調べましたが、何も出てきません。
そこでコードに戻ったところ次の記述がありました。
“`ruby:models/sample.rb
enum status: { refuse: 0, accept: 1 }
“`
「`enum`は属性に対応する値をDBに保存するんだったよな…」Railsガイドには次の記述がありました。
https://railsguides.jp/active_record_querying.html#enum
> 以下の!付きインスタンスメソッドは自動で作成されます。最初にstatusの値を更新し、次にstatusがその値に設定されたかどうかをtrue/falseで返します。
“`ruby:railsguide.rb
【初学者】ログイン機構のまとめ【Webアプリ開発の道~その3~】
# はじめに
こんにちは。しばらく投稿の間が空いてしまいました…。
言い訳をしておきますと、(また後で記事にできたらいいなと思っているのですが…)「要件定義」や「基本設計」について、深掘りして勉強しながら、実際にオリジナルアプリの設計をしていたからです。
暫定的な成果物はできたのですが、おそらく、アプリ開発の中で、見直しされていくと思いますので、最終的にアプリが形になってから、記事にしたいと思います。今回は、どのWebアプリでも必ず実装するであろう「ログイン機構」について、学んだことをまとめていきたいと思います。
# 何を書いたか
Ruby on rails チュートリアルの第8章、第9章の内容をベースに、自分なりに咀嚼したものを描いていきます。# なぜ書いたか
学習記録です。特に自分が理解しにくかった部分は、自分なりの解釈を加えています。(間違っている部分はご指摘いただけると幸いです。)# 本題
## 基本的なログイン機構
### ログインの基本的な仕組み
→ブラウザがログインしている状態を保持し、ユーザーによってブラウザが閉じられたら状態を破棄するといった仕組み
カラムの合計値を出す方法
カラムの合計値を出す方法
controller↓
@任意の変数名 = テーブル名.all.sum(:合計を出したいカラム名)
【Rails】画像と動画、どちらかを表示する方法
# content_typeはどうなっているのか?
前提として、今回はcarrierwaveやuploaderを使用していません。今回はactive_storageで画像や動画を保存しているので、今回はactive_storageとcontent_typeを使って画像と動画、どちらかの表示をしていきます。
Sequel Proでは以下のようになっています
[](https://gyazo.com/3a1d810fddb0ffbd30b4e929495e8f1f)
content_typeに注目してください。ファイルの拡張子がjpgにはimage/ 、mp4にはvideo/ と記載されているのがわかるかと思います。
画像を表示するか、または動画を表示するかはこれを使ってコードを記述していきます。# どうやって分けて表示するのか?
結論としては以下のようなコードになります。
“`ruby:diary/index.html.erb
<
【Ruby】初心者がRuby on Railsをやる!
# :star:概要:star:
`Ruby`初心者の僕が`Ruby on Rails`までやってみた!
# :star:初期セットアップ的な:star:
“`shell
rails new
cd
bundle install
bundle update
“``bundle install`をする場所は1つ下の階層でやらなきゃいけない!
エラーが出た際の対処法は、下に掲載しています。# :star:サーバーの起動:star:
“`shell
ubuntu@ubuntuv:~/デスクトップ/projectX/sample$ rails s
“`ブラウザの`127.0.0.1:3000`に行って、これが出ればおっけ。

コンソールで`Ctrl + c`を押して、サーバーを終了
鋸の使い方 ?
# 概要
https://github.com/sparklemotion/nokogiri> Nokogiri (鋸) makes it easy and painless to work with XML and HTML from Ruby. It provides a sensible, easy-to-understand API for reading, writing, modifying, and querying documents. It is fast and standards-compliant by relying on native parsers like libxml2 (CRuby) and xerces (JRuby).
Ruby で XML とか HTML をいい感じに扱えるライブラリ
# サンプル
こんなHTMLドキュメントがあったとして、
“`html
Lightweight language
GemfileでグローバルインストールするGemを管理する
普段プロジェクトごとにGemfileを管理していますが、システム全体で使うGemもGemfileで管理したいと思い方法を調べました。
## 環境
Mac OS Big Sur 11.6
Bundler 2.2.32
Ruby 3.0.2
Gem 3.2.22## 結論
好きな場所にGemfileを作成して
“`ruby
bundle install –system
“`これだけでシステム全体でGemが使えるようになります。
## 保存場所
自分の場合は[rbenv](https://github.com/rbenv/rbenv)を使いバージョン管理をしています。
そこで、 `Gemfiles` というフォルダを作り、その下でバージョンごとに管理することにしました。
“`ruby: 好きな場所
Gemfiles
├── 2.6.3
│ └── Gemfile
│ └── Gemfile.lock
├── 2.6.6
│ └── Gemfile
│ └── Gemfile.lock
└── 3.0.2
└── Gemfile
DockerでRuby on Railsの環境を構築する際のentrypoint.shのコマンド及びコード理解
## なぜ記事を書こうと思ったか
前回の記事のRails用のDockerfileを作成する際にentrypoint.shを指定していますが、今回そのentrypoint.shのコマンド及びコードの理解を備忘録として残すため。– [DockerでRuby on Railsの環境を構築する際のDockerfileのコマンド及びコード理解](https://qiita.com/zakino123/items/5e7ddf96096156ef814f)
## entrypoint.shのコマンド説明
entrypoint.sh
“`
#!/bin/bash
set -e# Remove a potentially pre-existing server.pid for Rails.
rm -f /app/tmp/pids/server.pid# Then exec the container’s main process (what’s set as CMD in the Dockerfile).
exec “$@”
“`以下にコマンド及びコードの解説を致しま
Rails お気に入りランキング実装
この記事は学習中に実装した内容をアウトプットし、更に理解を深めるための記録用投稿になります。
投稿している内容と同じ箇所で躓いている方に少しでもお力添えできれば幸いです。## 実装した内容
今回はユーザーが投稿した内容に複数のユーザーがお気に入り(いいね)をし、そのいいね数の多い順番にランキング形式で表示する内容になります。## 前提条件
・投稿した記事のテーブル名はdishesとします。
・いいね機能のテーブル名はfavoritsとします。
・いいね機能を実装済み## モデル
コントローラで使用するためのメソッドをモデルに記述します。
コントローラの記述を長くしないようにするためのようです。モデルの使い方を再確認!*/app/models/dish.rb
“`ruby
def self.create_all_ranks
Dish.find(Favorit.group(:dish_id).where(created_at: Time.current.all_week).order(‘count(dish_id) desc’).limit(10).pluck(:di
今日からWEB開発 1日目
はじめまして。エンジニアを目指しているPIROSHKIです。
今日からWEB開発ということで、勉強しながら1つWEBアプリの開発を目指していきます。
超初心者なので長い道のりですが、皆さんの記事を見ながら頑張ります。少し前に学校で学んだRubu Railsを使って開発をしようと思っています。
早速RubyとRailsのインストールから
①Rubyのインストール
https://www.ruby-lang.org/ja/downloads/
色々なバージョンがあってよくわからないので最新の3.1.1-1をダウンロード②Rlaisのインストール
コマンドプロンプトで
gem install rails
を実行。③作成するアプリ名のフォルダを作成
rails new アプリ名・・・・
とここで、
Ruby と crystal で解く AtCoder ABC248 C-D
# はじめに
AtCoder さん、ありがとうございます。
# C – Dice Sum
https://atcoder.jp/contests/abc248/tasks/abc248_c動的計画法を応用して解きました。
## Ruby
“`rb
n, m, k = gets.split.map(&:to_i)
MOD = 998244353
dp = Hash.new(0)
dp[0] = 1
n.times do |i|
dp2 = Hash.new(0)
(1..m).each do |x|
dp.keys.each do |key|
if key + x <= k dp2[key + x] += dp[key] dp2[key + x] %= MOD end end end dp = dp2 end puts dp.values.sum % MOD ``` 動的計画法では、配列をコピーしたりしますが、`Hash#keys`でコピーしている様な感じです。 ## crystal ```cr
fileterメソッドを使用してN+1問題を解決した
次の状況でN+1問題が発生しておりました。その解決方法になります。
“`ruby:model/model1.rb
class:Model1
has_many :model3s,
has_many :model2s, through: :model3s
“`“`ruby:model/model2.rb
class:Model2
has_many :model3s,
has_many :model1s, through: :model3s
“`“`ruby:model/model3.rb
class:Model3(Modle1とModle2の中間テーブル)
belongs :model1
belongs :model2
“`“`ruby:controllers/sample_controller.rb
@model1 = Model1.eager_load(:model3s)
“`“`ruby:views/sample.html.erb
# model2_idはループで回される値
@model1.where(model3s: { [
【Rails】cocoonを用いたデータを表示する方法
# cocoonとは?
cocoonとはフォームの追加や削除の実装を行う時とても便利なgemです。
個人的には以下の記事が大変参考になったのでこちらをご参照していただければと思います。https://qiita.com/kmjooh/items/a1613531873a22fa7862
# cocoonで保存したデータをどうやって表示するのか?
ここからはオリジナルアプリの制作時に実装した方法を紹介します。オリジナルアプリは筋トレ日記です。## ゴールは?
ゴールとしては以下のような表示です
[](https://gyazo.com/7a0c1f8fbfaa0a9bbd415f3201442012)
これはオリジナルアプリの一覧表示の一部ですが、種目・重量・回数・セット数はcocoonを用いてフォームを追加・削除したりして複数のデータを保存できるようにしています。## まず日記の一覧表示はどのように実装されているのか?
【Rails】Gem::Ext::BuildError: ERROR: Failed to build gem native extension.
## 開発環境
Rails6.1.4
Ruby3.0.1
macOS Monterey 12.2.1## エラー内容
gem(rinku)を“`bundle install“`しようとしたら、いきなりエラーが発生してインストールできなくなった?
“`terminal:terminal
Installing rinku 2.0.6 with native extensions
Gem::Ext::BuildError: ERROR: Failed to build gem native extension.current directory: /Users/apple/.rbenv/versions/3.0.1/lib/ruby/gems/3.0.0/gems/rinku-2.0.6/ext/rinku
/Users/apple/.rbenv/versions/3.0.1/bin/ruby -I /Users/apple/.rbenv/versions/3.0.1/lib/ruby/3.0.0 -r
./siteconf20220416-552-xpdj2a
【Rails】booleanは実質メソッド!?と感じたこと
# はじめに
Railsアプリケーション開発中にbooleanのカラムに対してこんなコードに遭遇した
“`ruby:db/migrate/create_post.rb
class Posts < ActiveRecord::Migration[5.2] def change create_table :posts do |t| t.string name t.boolean draft, comment: '下書き' end end end ``` ```ruby:post.rb // 下書きがどうかを判定するメソッド def draft? draft == 1 end ``` ## マジックナンバーは使用しない まず大前提としてマジックナンバーの使用は避けた方が良い。保守性に影響がでてしまう。 https://qiita.com/daichi0713/items/d838eda12a664bc04542#4%E3%83%9E%E3%82%B8%E3%83%83%E3%82%AF%E3%83%8A%E3%83%B3%E3%8
RuboCop::Cop::Rails::PresenceというRubocupの指摘
Rubocupでリファクタリングをしていたところ、モデルのメソッドで次の指摘を受けました。
“`ruby:models/sample.rb
C: [Correctable] Rails/Presence:
Use [別テーブルのidを格納した配列を弄る処理].presence || []
instead of [別テーブルのidを格納した配列を弄る処理].blank? ? [] : [別テーブルのidを格納した配列を弄る処理]
変数 = [別テーブルのidを格納した配列を弄る処理] ? [] : [別テーブルのidを格納した配列を弄る処理]
“`元の記述は配列を処理した結果、空配列であれば空配列を、そうでなければ処理した結果の配列を返すという単純なものですが、同じ記述を2回繰り返す点でDRY原則に沿った書き方ではありませんでした。
今回の指摘で簡潔に書けることがわかりましたが、これまで見かけない記述でしたのでまとめておきます。
## 短絡評価について
https://qiita.com/gyu-don/items/a0aed0f94b8b35c43290
>||の
自作言語でもRubyの map(&:foo) を真似したい!
# TL; DR
Rubyでブロックの代わりにシンボルを渡せる記法を、[Pangaea](https://github.com/Syuparn/Pangaea)でもできるようにした!
“`ruby:ruby
# どちらも同じ!
names.map {|name| name.upcase}
names.map(&:upcase)
“`“`pangaea:pangaea
# どちらも同じ!
names.map {|name| name.uc}
names.map(‘uc)
“`# はじめに
2020年から「Pangaea」というプログラミング言語を自作しています。とにかくコードを短くしたい方におすすめ(?)です。
https://github.com/Syuparn/Pangaea
言語の詳細については過去の記事をご覧ください。
– [ワンライナー向け自作言語「Pangaea」の紹介](https://qiita.com/Syuparn/items/87cafc7fd206016a0f8d)
– [自作言語のオンラインチュートリアルを作ってみた【Pangaea
画像キャッシュを部分的に無効化する
Imagemagickを深掘りするため、ユーザー画像とアイテム画像を合成させて、簡易的に試着ができるという機能を実装していた。

上の画像はパンツの画像とユーザー画像を合成させているが、それぞれのアイテムページから試着ページに遷移するとそのアイテムの画像とユーザーの画像が合成されるという機能で、
例えばジャケットのページで試着ボタンを押すとジャケットの画像とユーザー画像が合成される様になっている。が、
ローカル環境では問題なく動いていたのに、AWSにアップロードした後試着ページを表示させると一番最初に合成した画像が別の試着ページに遷移しても表示されてしまい、二回目以降は試着できなくなってしまった。
[
@s