Rails関連のことを調べてみた2022年12月26日

Rails関連のことを調べてみた2022年12月26日

【Rails】コメント削除ボタンをコメントしたユーザーのみ表示させるには。

# はじめに
プログラミング初学者の者です。オンラインでプログラミングを学習させて頂いてるのですが、さらに理解を深めていきたいと思い、学習したことを備忘録として、残して理解を深めていきたいと思います。
また、間違った点など、ありましたら、ご指摘いただけると幸いです。よろしくお願いします。

# コメント削除ボタンをコメントしたユーザーのみ表示させるには。
現状下記の状態では全ユーザーに削除ボタンが現れてしまい、削除できる状態でした。
“`app/views/recipes/show.html.erb

<% @comments.each do |comment| %>

<%= comment.user.user_name %>さんの投稿

<%= comment.content %>
<%=link_

元記事を表示

GitLab開発依存ライブラリからthin gemを排除した

GitLab Advent Calendar 2022 25日目。

[thin](https://github.com/macournoyer/thin)という、”A small and fast Ruby web server” gemがある。`tnir` とも少し字面が似ている。

GitLabの開発が始まって1年ちょっとたったタイミングで当時、初代GitLab CTO(のちのFellowであり、1年ほど前からGitLab Inc.から離れている)dzaporozhetsにより開発用に導入されたgemである。

> dzaporozhets committed on Jan 19, 2013

– https://github.com/gitlabhq/gitlabhq/commit/54a24608a29d113f0c607027cddd8b6947c6a55c

## 何が問題か

GitLab開発用に作られたCLI `gdk` (GitLab Development Kit) というものがあるが、そこのサブコマンドに `thin` というコマンドがあった。ケースによるが一

元記事を表示

2022年の振り返り@Rails Girls

この記事は、[Rails Girls アドベントカレンダー2022](https://qiita.com/advent-calendar/2022/railsgirlsjapan) 最終日の記事です。
Ruby3.2、リリースされましたね。

今年は、Rails Girlsが日本で開催されて10周年(祝!)です。
といいつつ、このアドベントカレンダーでは、今年のRails Girlsに関する振り返りをざっくり書いていこうと思います。
(私にとっての10周年は来年なので、10年については来年にとっておこうかと・・・)

### いちおうねんのため自己紹介
– Rails Girls Nagoya 1st〜5th オーガナイザー
– Rails Girls JPメンバー
– Rails Girls Nagoya more!などに出没。
– クマ好き。特にくまモンが好き。
– 自作キーボード作ったり使ったり。

### 2022年のRails Girls振り返り
– オンサイトでのRails Girls開催!
– 鹿児島と東京で開催。COVID-19の感染が拡大している時期でもあった

元記事を表示

validates, 編集, 新規作成,<%=%>の使い方, postとget

データベースの値をバリデーションで制限する,文字数、重複防止、空欄防止ができる
validates

<%=%>の使い方

編集機能の作成手順
❶ユーザー編集ページの作成
❷変更の保存
❸サクセス時・エラー時の表示

postはsessionの値を変更したいときにも用いる

postとget
post 〇〇 get 〇〇
は異なるものとして扱われる
link_toを用いるとgetを探す
form_tagを用いるとpostを探す

今日の疑問
link_to 第三引数の{method:”post”}とは
いつ<%=%>を使い、<%%>を使うのか

元記事を表示

URLからOGPを取得してDBに保存する

# 概要
LINEでyoutubeやamazonのリンクを送信すると、そのサムネイル画像やタイトルを自動で表示してくますよね?
あれはOGPと言ってurlからそのページに設定されているタイトル、url、概要、画像などの情報を取得する仕組みを利用しています。
javascriptを使ってOGPを取得する記事はたくさんありますが、railsで取得した値をDBに保存するやり方が書かれた記事がなかったので、書いてみました!
## コントローラーとテーブル
コントローラーはpostsコントローラーでアクションはindex, new, create, showの4つ。
テーブルはpostsテーブルで、カラムは以下のようになります。

![db.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2988077/5dfdabf0-2c23-6116-61a9-fe2084f00f7e.jpeg)
図のようにbody, urlカラムは実際にユーザーが入力するためのカラム、
url_image, url

元記事を表示

JavaエンジニアがRubyを使ってみて思ったこと

# 前説
– 株式会社SUPER STUDIOの2022年Adventarの記事です。
– 7年ぐらいJava(Spring)を使っていたエンジニアが初めてRuby(Rails)を使ってみた所感のまとめです。
– JavaもRubyもどちらもまだまだ未熟者が書いた記事です。
– Javaの最新のバージョンもキャッチアップできてないのでちょっと知識が古いです。
– Javaの方がいいとか、Rubyの方がいいとか、対立煽りを助長するつもりはありません。
– 自分と同じでJavaばかり使ってきて、Rubyとかどんな感じなんかなあって思ってる人に読んでもらえたら幸いです。

# Ruby(Rails)を使い始めて思ったことまとめ
– 型宣言が必要ない
– メソッドの引数にデフォルト値を設定できる
– メソッドの戻り値の型の定義が必要ない
– 最終行の結果がreturnされる
– 後置ifが使える
– if文の戻り値が設定できる
– ActiveRecordが便利

1個ずつ見ていきます。

## 型宣言が必要ない
これは解説不要かと思いますが、Rubyは動的型付け言語ですので、Javaのような

元記事を表示

Railsで日時比較をする際に型が違って焦った話

# この記事で伝えたいこと

Railsで日時比較をするときには日付の型を確認しようと言う話をします。

# 日時に応じて挙動が変わる処理の実装

WEBアプリケーションを開発していると、特定期間のみキャンペーンのバナーを表示させたいというような、期間などの時刻で動作する機能を開発する必要があります。
かつての僕は「その時間になったら手動でデプロイするのかな」と思っていたこともあったのですが、コードの中に時間による分岐を入れれば自動で機能がアクティブになることを教えてもらいました。

そんな僕が書いたコードが下記のような分岐です。

“`ruby
Time.zone.now.between?(Date.new(2022, 12, 01), Date.new(2022, 12, 31))
“`

しかし、2022年12月1日0:00(JST)になってもこれではうまく動作しませんでした。

“`ruby
[2] pry(main)> Time.zone.now.between?(Date.new(2022, 12, 01), Date.new(2022, 12, 31))
=>

元記事を表示

カスタムマッチャーをカジュアルに書こう

## カスタムマッチャー書いてますか?
以前[こちらの記事](https://qiita.com/masaakiaoyagi/items/36ce6c88fa2b6deb95e0)で、`shared_examples`ではなくカスタムマッチャーで書いた方が読みやすいRSpecになると思うと書きました。
では、カスタムマッチャーはどう書いたらいいでしょうか?


### カスタムマッチャーの書き方
上の記事で例題として上げていた、以下のように書けるようにする`be_api_response_of`マッチャーを考えてみましょう。
“`ruby
it { expect(response).to be_api_response_of(401, “Unauthorized”) }

context “when logged in” do
include_context “logged in”

context “when page is 1” do
let(:page) { 1 }
it { expect(response).to be_api_response_

元記事を表示

フォロー・フォロワー数の非同期化

フォロー機能の非同期化完了後、ユーザー詳細ページにて、他ユーザーをフォロー(or解除)した際、リロードしなければフォロワー数が変化せず、躓きメンターさんに教えていただいたので、自分メモとして記事にいたしました。
(初心者であるため、専門用語の誤用や読みにくい記事となっているかもしれませんが悪しからず)

# 初めに
まず、私が勘違いしていたこととして、フォローボタンを押すとusers/show画面が変わるため、usersディレクトリにcreate.js.erbを作成したり、users/showに記述してある<%#= link_to @user.followers.count, user_followers_path(@user.id) %> にremote:trueを追記しなければいけないと思っておりました。

しかし、ターミナルのログを確認すると、フォローボタンを押すと、サーバにはRelationshipsコントローラのcreateアクションが送られておりました。

そのため、フォロー機能の非同期化の際に作成したrelationships/create.js.erbに後述する内容を追

元記事を表示

Sidekiq 7の新機能・変更点

## はじめに

Ruby on Rails (以下Rails) でバックグラウンドジョブを実行する際に一番よく使われているのGemである、Sidekiqのバージョン7.0(以下Sidekiq 7)が2022年10月にリリースされました。

このバージョンでは、管理画面へのメトリクスの追加、Pumaなどのプロセスへの埋め込み、キュー毎の同時実行数を制限するカプセルなど、以前よりも大きな機能追加が行われています。

本記事では、Sidekiqの公式サイトの記事や、GitHubの公式プロジェクトの内容を元に、Sidekiq 7の新機能や変更点の解説を行います。

## 注意点

### 本記事で取り扱うエディション

本記事ではGitHubで[公開しているOSS版](https://github.com/mperham/sidekiq)のSidekiqについて記述しています。Pro / Enterprise版を使用している場合は、[公式サイト(英語)](https://sidekiq.org/)を参考にしてください。

### サポートされるRails / Ruby / Redisのバージ

元記事を表示

1年で5社を経験して学んだ駆け出しエンジニアが実務の中で生き残っていく方法

この記事は[RUNTEQ Advent Calendar 2022](https://qiita.com/advent-calendar/2022/runteq)の25日目、最終日の記事です。

2021年12月にRUNTEQを卒業しました。そして、2021年12月からWebエンジニアとしての実務をスタートしてからちょうど1年になります。

この記事では、業務委託で3社、契約社員で1社、正社員で1社(現在)という形で、5社でお仕事をさせてもらう中で学んだ、駆け出しエンジニアが実務の中で生き残っていく方法について書きたいと思います。

その中で、エンジニアとしての仕事を得る上で大層な個人開発アプリ(いわゆるポートフォリオ)は必要ないし、最低限の技術力さえあれば仕事はできるということも同時にお伝えできたらと思っています。
未経験からの転職はハードルが高すぎると感じて挫折してしまう人を少しでも減らすことができたら幸いです。

## なぜ最低限の技術力でいいのか
まず、最低限の技術力をざっくり定義すると、「不明点をググったり、先輩に質問することで、問題解決ができる状態」とします。適切に調査する

元記事を表示

Rails関係記事 リスト一覧[自分の記事のまとめ]

環境構築

      ・[本番環境用のgemを開発環境にインストールしたくない時の対処法](https://qiita.com/Ktsuki16/items/4cee16e285aa842dfd3e)

      ・[rails開発でincompatible library versionが出た時の対処法](https://qiita.com/Ktsuki16/items/4b0290bac7d0499c65cf)

      ・[環境変数の設定に困ったときに読むべき記事[備忘録]](https://qiita.com/Ktsuki16/items/7a95ce679a2ee67ece94)

      ・[nodenvライブラリをインストールしたはずなのに、nodenvコマンドが使えなかったので解決してみた。[パスを通せば解決。]](https://qiita.com/Ktsuki16/items/8e594c015ea4c4d37e6b)

      ・[rbenv localでru

元記事を表示

SET1年目の新卒が、ヒィヒィ言いながら社内の自動テストツールを改善した話

# はじめに
22年度新卒で株式会社LIFULLに入社した[Yamashita-Taiki](https://qiita.com/Yamashita-Taiki)です。

最近35インチのモニターを導入して仕事の質が爆上がりです(してますよね???)

今回は内製OSSの自動テストフレームワークであるBucky-core、その結果レポートを担当しているBucky-managementのUIを改善したので、そこで学んだことを書いていこうと思います。
Bucky-coreやBucky-managementについては以前社員の方が詳細について投稿してくださっているので[その記事](https://qiita.com/rueyjye/items/570ce17d698819f99091)を見ていただければと思います。

# 今回挑戦したこと
実行されたテスト結果を表示するページのUIを改善しました。
まずbeforeとafterの画像を添付します↓

## before(実際には30件並んでいます)
![スクリーンショット 2022-12-22 17.33.03.png](https://q

元記事を表示

Stimulus リファレンス: TypeScriptを使う

:::note
この記事は[Google翻訳](https://translate.google.co.jp/)の結果を編集したものです。
:::

https://stimulus.hotwired.dev/reference/using-typescript

Stimulus自体は[TypeScript](https://www.typescriptlang.org/)で記述されており、そのパッケージ上で型を直接提供します。以下のドキュメントはStimulusプロパティの型を定義する方法を示しています。

# コントローラー要素型の定義

デフォルトではコントローラの要素は`Element`型です。コントローラー要素の型を[ジェネリック型](https://www.typescriptlang.org/docs/handbook/2/generics.html)として指定することでオーバーライドできます。たとえば、要素の型が`HTMLFormElement`であると予想される場合:

“`typescript
import { Controller } from “@hotwi

元記事を表示

【Ruby】Prawn で生成した PDF に旧字体が含まれていると文字化けしてしまう場合の対処法

## 背景

タイトル通り、[Prawn](https://github.com/prawnpdf/prawn) で生成した PDF に旧字体が含まれていると文字化けしてしまう現象が発生。

ex. 「高瀬 真守」という名前のユーザー情報を PDF 出力(※「瀬」は旧字体)

![スクリーンショット 2022-12-25 5.10.49.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/688854/9746f1cf-e65b-0d61-9e72-fa5e99eacc6f.png)

ご覧のように上手く出力ができていません…。

## 原因

フォントの設定に問題がありました。

“`ruby
class PdfeGenerator < Prawn::Document def initialize super(page_size: "A4", margin: 20) font Rails.root.join("app/assets/fonts/mplus-2p-regular.t

元記事を表示

git revert(間違ったコミットを打ち消したいとき )

## 経緯 
railsにてログイン機能を実装していた時、うっかりdevelopブランチのまま作業をしていた…!

“`
% git branch
* develop
main
“`
それに気づかないまま、**git add .** し、 **git commit** してしまった。(コミット名は、**login_user** としていました)

## やったこと
コミットを取り消したいということで、**git revert <commitID>** コマンドを使いました。
“`
git revert
“`
commitIDは、後述の**git log** コマンドを入力して確認できます。

>既存のコミットを取り消すためのコマンドです。
>「取り消したいコミットを打ち消すようなコミットを新しく作成する」という処理によって、既存のコミットを取り消します。
>新しくコミットを追加しているだけなので、既存コミットの履歴が消えるわけではありません(コミットログをみると残っています)。
どんな変更があった

元記事を表示

ngrok でトンネリングすると Rails がブロックする問題

## 問題

ngrok でトンネリングすると、Rails にブロックされる。

その上、`config/environments/development.rb` に?を入れてみてもなおらない
“`
config.hosts << '.ngrok.io' ``` ## 解決 '.ngrok.io' -> ‘.jp.ngork.io’ みたいに .jp を入れると治った

“`
config.hosts << '.jp.ngrok.io' ``` ## 感想 ngork のホスト名かわった?

元記事を表示

Rails リンクが正しく動作しているかテストする方法

Railsではリンクが正しく動作しているかどうかをテストする際に統合テストを用います。

まずはテストファイルを作成します。

“`Bash
rails generate integration_test site_layout
“`

作成されたファイルを開きます。

“`Ruby:sample_app/test/integration/site_layout_test.rb
require ‘test_helper’

class SiteLayoutTest < ActionDispatch::IntegrationTest end ``` このファイルにテストコードを書いていきます。 今回は以下の点についてのテストを行います。

  1. テンプレートが正しく表示されているかどうか。
  2. リンクが正しく動作しているかどうか。

“`Ruby:sample_app/test/integration/site_layout_test.rb
class SiteLayoutTest < ActionDispatch::Int

元記事を表示

Rails ルーティングについて備忘録

Railsを使用したアプリケーションでは、HTTPリクエストをクライアントが送信したときに、ルーティングと呼ばれる作業が実行されます。ルーティングというのは、送信されたリクエストに対してどのコントローラを参照するのかを決める作業です。

例えば、以下のようなコードでルーティングが決定されます。

“`Ruby:routes.rb
Rails.application.routes.draw do
root ‘static_pages#home’ #参照するコントローラ名/アクション
get ‘static_pages/about’ #URL
end
“`
以下のコードでアプリケーションのルートURL(最初に表示するURL)を定義しています。

“`Ruby
root ‘static_pages#home’
“`
また、’static_pages#home#`というのは、static_pagesコントローラのhomeアクションを参照するという意味です。

つまり、上記のコードは、「ルートURLにアクセスした時は、static_pagesコントローラのhomeアクションを実

元記事を表示

Hash.new([]) の挙動にハマった

## はじめに
`Hash.new([])` を使用して処理を書く場面があったのですが、
その際の思わぬ挙動にハマった話とその対処方法について記事にしました

## 問題のコード
“`ruby
processed_ids = ::Hash.new {[]}

# user からは group_id と user_id を参照できる
users.each do |user|
next if processed_ids[user.group_id].include?(user.user_id)

processed_ids[user.group_id].push(user.user_id)
end
“`

processed_ids にキーとして group_id を指定し、それに対して配列で user_id を追加していき、
既に group_id に対応する配列に user_id が追加されていたら、処理をスキップする、という処理を書いています。

上記のような記述で動作する…と思っていたのですが、
実際に動かしてみると想定した通りに動きません。

実際にコンソ

元記事を表示

OTHERカテゴリの最新記事