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

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

過去一週間でいいねの合計カウントが多い順に投稿を表示する方法


【Ruby on rails】過去一週間でいいねの合計カウントが多い順に投稿を表示する方法

# 初めに
プログラミングスクールに通い始めて2ヶ月目です。
読書本シェアアプリを作っています^^
自身の忘備録として記事を更新していきます!

# アソシエーション
“`ruby:user.rb
has_many :books, dependent: :destroy
has_many :favorites, dependent: :destroy
“`

“`ruby:book.rb
belongs_to :user
has_many :favorites, dependent: :destroy
has_many :favorited_users, through: :favorites, source: :user
“`

“`ruby:favorite.rb
belongs_to :user
belongs_to :book
“`
userモデル,bookモデル,favoriteモデルのアソシエーションが完成しました。
has_many :favorite

元記事を表示

【Rails】gemを使わずに 楽天Apiを動かしてみよう:前篇【ハンズオン】

この投稿は、
[DMM WEBCAMP mentor Advent Calendar 2022](https://qiita.com/advent-calendar/2022/infratop_mentor)
の投稿10日目のエントリーです。

9日目は @takakou さんで
[初学者のためのUnity+clusterによるメタバース空間の構築。](https://qiita.com/takakou/items/065b56d1390d7e676e4f)
です。メタバース・・私もちょっとやってみた事があるので、楽しく読ませていただきました。

## はじめに

最近DMMでメンターをやらせていただいております。 @tomoaki-kimura です。
今回は、 `irb` を使って `Api` を理解するという内容をやってみたいと思います。

## 環境と前提

– ruby 3.1.x

## 1.楽天Api

### 準備

では、早速準備をしましょう。

まず、 [RakutenDevelopers](https://webservice.rakuten.co.jp/docu

元記事を表示

Railsで、dependent: :restrict_with_errorをassertできなくてハマった話

# 結論
## has_many
“`rb
assert my_model.errors.of_kind?(:base, “restrict_dependent_destroy.has_many”.to_sym)
“`
## has_one
“`rb
assert my_model.errors.of_kind?(:base, “restrict_dependent_destroy.has_one”.to_sym)
“`

# ハマったところ

Rails6 から `of_kind?` なんて便利なものが追加されているようだったので、まずはエラーの attribute と type を調べてみた。

“`rb
p my_model.errors
“`
“`
#“my string”}>]>
“`

attribute が `base`

元記事を表示

Ruby Singleton Class

## メソッドの定義場所
メソッドがどこに定義されているのかは“`owner“`メソッドを使うことによって確認できます。
“`ruby
class User < ApplicationRecord def self.from_class return "from class" end def from_instance return "from instance" end end ``` 上記のようなクラスを想定します。 ```ruby pry(main)> User.instance_method(:from_instance).owner
# => User(…)
pry(main)> User.method(:from_class).owner
# => #
pry(main)> User.singleton_class
# => #

元記事を表示

Stimulus 序文: Stimulusの起源

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

https://stimulus.hotwired.dev/handbook/origin

[Basecamp](https://basecamp.com/)では多くのJavaScriptを作成していますが、現代的な意味での”JavaScriptアプリケーション”を作成するために使用することはありません。私たちのすべてのアプリケーションはサーバー側でレンダリングされたHTMLをコアに持ちJavaScriptを散りばめることでそれらを輝かせます。

これが[雄大なモノリスの道](https://m.signalvnoise.com/the-majestic-monolith-29166d022228)です。BasecampはRuby on Railsを使用して作成された単一のコントローラー、ビュー、およびモデルのセットを使用して、ネイティブモバイルアプリを含む6つのプラットフォームで実行されます。単一の場所で更新できる単一の共有インターフ

元記事を表示

【Rails】現在地を取得し、緯度経度をもとに現在地から近い店舗を検索

こんにちは

今回は、Googlemapを用い、
①現在地の緯度経度を取得し、
②上記をもとに、現在地からテーブルに保存済みの店舗までの距離を計算し、
③距離が近い順番に店舗を表示する

という機能を実装していこうと思います

“`Ruby:実装環境
Ruby 3.0.4
Rails 6.1.5
Bootstrap 4.3
“`

⓪まずは下準備

・APIを用いてgooglemapが投稿できる状態にしておく

Googleマップの投稿機能の作成 ➤ [参考記事](https://qiita.com/MandoNarin/items/aa91ffae373a8cfc85d2)
(※後程用いるので、geolocation API も有効可しておくとよい)

・jQueryを導入しておく
※今回はajaxモジュールを用いているので、jQueryは通常使われるslimではなく、uncompressedを用いてください
slimやuncompressedについてはこちら ➤ [参考記事](https://netrandum.com/jquery-slim-build/1

元記事を表示

【サンプル付き!】自分のDockerfileを振り返ってみた(Docker✖️Rails✖️React✖️MySQL)

## はじめに
おーせです!こんにちは!
実はプログラミングスクール(RUNTEQ)に通って5ヶ月が経ちました。現在PFを作成してます!
せっかくだから企業で使っているような技術を吸収しながらPFを開発したいと思い、付け焼き刃覚悟でDockerでの環境構築にチャレンジしました。
そして気づけば年末なので(?)、自分のDockerfileを振り返るという記事を書いてみます。
## この記事で触れること
この記事では主にDockerfileの内容について触れていきます。
先月Dockerでの環境構築はできたものの、なんとなく立ち上がっている感が否めないので、この際振り返って確認することにしました。
ただ今回の記事では基本的なコマンドの説明は割愛しますので、ご了承ください。
## サンプルについて
本記事で修正した環境構築前のDockerfileなどは以下のgithubで公開しております。
ご興味ある方は立ち上げてみたりして、遊んでみてください!(手順はREADMEに記載しております。)

https://github.com/ooooose/Docker_setup

## 使用技術につい

元記事を表示

これはGitでRailsを元に戻そうとした初心者の戦いの記録である。

# はじまり。
Railsで作業をしていてなんかおかしくなったのでGitで元に戻そうと思ったのが全ての始まり。
初心者だけどRailsとGitの操作だけはある程度知っていたのだが・・・。
細かいエラー内容などの記録は残っていないのでいずれ再現したい。

# 我が装備。
Rails 6.1.7
git version 2.38.1
AWS Cloud9

# 戦いの記録。
まずは過去の自分のメモを見ながらやってみよう。

“`sh
git checkout .
“`

確認してみよう・・・

“`sh
git log –oneline
git status
“`

なんか作ったモデルやコントローラのファイル名が赤字でいっぱい書いてあるな。

え、もしかしてまだファイル残ってるの?確認してみよう・・

“`sh
ls app/model/*
“`

き、消えてないだと・・・orz

それならこれはどうだ。

“`sh
git reset .
git checkout HEAD
git checkout HEAD^
git reset –hard HEAD
git res

元記事を表示

MVCモデルについて復習する

 MVCモデルについて学習したことはあるが、なんとなく曖昧だったので、勉強した。
以下の画像を用いて説明する。
![スクリーンショット 2022-12-09 23.50.38.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2884270/eb8bed00-b153-16a8-73ff-bef76600dd67.png)
 まず、ブラウザにURLを打ち込むと、DNS(ドメインネームシステム)によってIPアドレスに変換される。IPアドレスとは現実世界で言う住所のようなものだ。
![スクリーンショット 2022-12-09 23.52.06.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2884270/c790760f-84a9-8a26-fe44-a1836faeddcb.png)
 WEBサーバにリクエストを送る際、**HTTP通信**という方法でリクエストが送られる。すると今度はWEBサーバが「あぁ〜これはここから情報を

元記事を表示

django で has_many のデータ取得 ( Rails と比較 )

たとえばArticleが複数のCommentを持つ場合

# Rails の場合

“`rb
article.comments
“`

# djangoの場合

“`py
article.comment_set.all()
“`

# モデル定義の例

Railsだと

– 親クラスに has_many 関連を書く
– 子クラスに belongs_to 関連を書く

というやり方だが、 djangoだと子クラスにだけ関連を記述すれば良いようだ

“`py
class Article(models.Model):

class Comment(models.Model):
article = models.ForeignKey(Article, on_delete=models.CASCADE)
“`

# チャットメンバー募集

何か質問、悩み事、相談などあればLINEオープンチャットもご利用ください。

https://line.me/ti/g2/eEPltQ6Tzh3pYAZV8JXKZqc7PJ6L0rpm573dcQ

# Twi

元記事を表示

[Rails]本にカテゴリタグを追加し検索する

## 行いたいこと
– 本の投稿時にカテゴリタグを追加する
– カテゴリタグで検索が出来る
## 環境
– Ruby3.1.2
– Rails6.1.7
– device、bootstrap導入済み
– Bookモデル作成済み

# 1.カラムの追加
Bookモデルにタグを保存するために新しくカラム`tag`を作成
“`
# rails g migration add追加したいカラム名To追加したいモデル名 追加したいカラム名:データ型
rails g migration addTagToBook tag:string
“`
“`作成日_add_tag_to_book.rb
class AddTagToBook < ActiveRecord::Migration[6.1] def change add_column :books, :tag, :string end end ``` ``` $ rails db:migrate ``` # 2.コントローラー作成、バリデーション設定 #### バリデーション、ストロングパラメータの設定 ```models

元記事を表示

ActiveRecord::RecordNotFound in UsersController#show エラーの解決方法!検証ツールを使えば…

# エラー内容
* `ActiveRecord::RecordNotFound in UsersController#show`というエラーが表示された。

![ActiveRecord RecordNotFound in UsersController show.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2710373/23e82030-efca-3185-81f5-20af674e4738.png)

# 仮説
* idがshowアクションへ送られていないのでは?と思い、usersコントローラーの`@user`を`@user = User.find_by(id: params[:user_id])`にしてみたが、別のnilエラーになってしまう。問題なかった
* ルーティング間違いかと思い、以下も確認したが、問題なさそう
“`ruby
root to: ‘prototypes#index’
resources :prototypes, only: [:new, :create, :sho

元記事を表示

【Rails】UNKNOWN ACTION ERROR エラーの解決方法。超初歩的なミスだった話

# エラー内容
* `UNKNOWN ACTION ERROR` と表示された。
ええー初めてみるぞこれ。なんだ!?

# 原因
* 超初歩的なミスをしていました。
* comments_controller.rbの一番上が以下のようになっていました。そう、2行目のendが間違いです!汗

“`comments_controller.rb
class CommentsController < ApplicationController end def create # 以下省略 ``` # 解決方法 * 正しくは以下の通り。endは一番下。アクションはその中に入れるように注意しましょう。 * controllerの一番上の誤記は盲点で意外と時間がかかってしまったものです。 ```comments_controller.rb class CommentsController < ApplicationController def create @comment = Comment.create(comment_params) if @comment.save red

元記事を表示

ActionController::ParameterMissing (param is missing or the value is empty: calendars): のエラー解決方法

# エラー内容
* Railsでformを設置したが、フォームボタンを押しても反映(投稿)されない現象が発生。
* 真っ赤の画面でもエラー画面が出てくれれば、なにが問題か調べることができるのだが、なにも反応ないというのは、駆け出しエンジニアにとっては鬼畜のエラー対応というもの!あのエラー画面のありがたさを知った機会でした。

# 対応した手順
* createアクションに`binding.pry`を記入して`plan_params`をチェックしてみると下記のように返ってきた。「パラメータがないか、値が空です」と言われている。

“`
ActionController::ParameterMissing (param is missing or the value is empty: calendars):
“`

* Railsでは、フォームから入力された値はパラメータとして作成したビューのフォームを通し、ブラウザからサーバーに送られる。つまり、パラメーターとは、viewとcontrollerにデータを送るための箱のこと。そのパラメータがない(or値が空)なのが原因らしい。

*

元記事を表示

RailsアプリにDockerを導入した③【redisコンテナ&sidekiqコンテナ】

## やったこと
Railsアプリに、RedisコンテナとSidekiqコンテナを載せた。

## なんのために?
– 非同期処理:時間のかかるタスクやある時間になったら実行したいタスクを「後で処理するリスト」に入れておき、他のタスクを実行しながら「後で処理するリスト」のタスクも並列で行っていく
– 「後で処理するリスト」には __Redis__ のキューがよく使われる。これから処理していく予定のジョブのデータをRedisに永続化することで、Railsプロセスが落ちたとしてもエンキューされたジョブのデータは失われない
– Railsサーバと __Redis__ と __Sidekiq__ の関係:Railsサーバの処理の中で「後で処理するリスト」に任せたいジョブがあれば、 __Redis__ で永続化しているキューにジョブを追加(エンキュー)し、 __Sidekiq__ がジョブを取り出して(デキュー)実行していく
– ↑これらのキュー操作をさまざまな方法で実行するためにインターフェースなどを定めているフレームワークがActive Job

## 手順
1. ローカルで動かす
1.

元記事を表示

Railsで画像をpublic配下ではなくアセットパイプラインを通して配置する

## 指摘されたこと

RailsとReactで動く画像を表示したかったので、画像を`public/img/`フォルダに置いてこのように書きました。

“`react:Hoge.tsx
return (
<>
hoge

)
“`

すると先輩から下記のように指摘を受けました。無断で転載します。

>画像のパスはRailsから渡したほうがいいと思います。
public配下ではなく、アセットパイプラインを通したやつを渡してください。
動きはするんだけど、もし画像を差し替えるとなったときに、パスが固定だとしばらくブラウザのキャッシュが働いてすぐに切り替わらないので。アセットパイプラインを通すと、ファイル名にランダムな文字列が付いて、画像が変わるたびに別のパスになります。

なんとなく言いたいことはわかるんだけど、「なんとなく」を潰したいので、きちんと咀嚼しながら修正します。

## アセットパイプラインとは?

JS,CSS,画像などのファイルを最小化して連結するためのフレームワーク。

http

元記事を表示

Rubyで数字を1行になるまで掛け算する

# 前提
引数のintegerの値を一桁になるまで掛け続けて、何回掛け算を行ったかを返り値にする。

“`
ex
39 –> 3 (because 3*9 = 27, 2*7 = 14, 1*4 = 4 and 4 has only one digit)
“`

# 判定メソッド
“`ruby
def persistence(number)
count = 0

while number > 9 do
num = 1
number.to_s.split(”).each do |i|
num = num * i.to_i
end

number = num
count += 1
end

count
end
“`

“`ruby
def persistence(n)
k = 0
while n > 9 do
n = n.to_s.split(//).map{|x| x.to_i}.inject(:*)
k+=1
end
k
end
“`

“`ruby
def p

元記事を表示

rails開発でincompatible library versionが出た時の対処法

結論

・vendor/bundleファイルを削除して、もう一度bundle installを実行すると動くようになる。

開発環境

・rubyバージョンとパス

“`
which ruby
/Users/sanadatadashitsuki/.rbenv/shims/ruby
ruby -v
ruby 2.7.1p83 (2020-03-31 revision a0c7c23c9c) [x86_64-darwin22]
“`

・gemのパス

“`
which gem
/Users/sanadatadashitsuki/.rbenv/shims/gem
“`

・bundlerのバージョンとパス

“`
which bundle
/Users/sanadatadashitsuki/.rbenv/shims/bundle
bundle -v
Bundler version 2.1.4
“`

発生したエラーコード

“`
bin/rails c
Traceba

元記事を表示

ActionTextをカスタマイズする

## はじめ
 本記事は、Rails7、stimulusを使用した環境のもと、ActionTextをカスタマイズ(主に添付ファイルのアップロードまわり)する方法を紹介します。ActionTextは、[trix](https://github.com/basecamp/trix)を利用しており、これによってリッチテキストコンテンツと編集機能を簡単に導入することができます。デフォルトの挙動のまま使用する分には特に問題にはなりませんが、「こうしてほしい」という要望に応えるためにカスタマイズしていくためには、それなりの理解が必要であり、その前提のもと話を進めていきます。

参考
[RailsガイドのActionTextに関する記事はこちら](https://railsguides.jp/action_text_overview.html)
[ActiveStorageのAPIはこちら](https://api.rubyonrails.org/v6.0.2.1/classes/ActiveStorage/Blob.html)
[trixのイベントはこちら](https://github.com/

元記事を表示

【超簡単】Rails カレンダー導入方法 (シンプルカレンダー,simple_calendar)

## はじめに
Twitterライクのアプリを作っており、タスクや予定の管理などにカレンダーを導入したいと思った方に向けての執筆です!

公式と異なり、scaffoldなしで実装しております!
ご自身の作成中のアプリに必要箇所を取り入れてもらえればと思います!

## 完成形
日時を指定して投稿すると、カレンダー内のその日時に投稿が表示されます!

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1081227/0fdf875d-bb00-130d-fca8-357069342c72.png)

## 実装方法

まずはgemをインストールします。
gemfileに以下のコードを記入します!

“`ruby:Gemfile
gem ‘simple_calendar’, ‘~> 2.0’
“`
“`terminal:ターミナル
$ bundle install
“`

今回はカレンダーに出力したいため :start_timeカラムを新たに作成します!

“`terminal:

元記事を表示

OTHERカテゴリの最新記事