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

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

アプリ作成(rails ver.6.0.0)

## Ruby_on_Railsでアプリを作る

“`
[Terminal]
#指定のファイルに移動。(例えば、projectsディレクトリ内でアプリを作成する)
% cd ~/projects

#アプリを作成(データベースはmysqlで作成)
% rails _6.0.0_ new [app_name] -d mysql

#アプリのディレクトリ内に移動
% cd [app_name]

#データベースを作成
% rails db:create
“`
以上のようにターミナル内にてRailsアプリを作成し、この後、MVCモデルを作っていきます。

元記事を表示

semgrepでbelongs_toにoptional: trueを一括で追加した

Rails のバージョンを上げて `belongs_to_required_by_default` を変更したり、 `load_defaults` を指定するときに、 `belongs_to` に `optional: true` をつけるか、古いバージョンでの `required: true` 相当でも動くようになっている必要があります。

その書き換えに `semgrep` を使ってみるとうまくいったので、その紹介です。

## 動作確認バージョン

* Ruby 2.7.6
* Rails 6.0.6
* semgrep 0.122.0

## belongs_to_required_by_default の例

“`ruby
# 古い挙動に戻す
# config.load_defaults 5.0以上の直後に追加
config.active_record.belongs_to_required_by_default = false

# 新しい挙動にする(config.load_defaults 5.0以上と同じ)
# https://github.com/rails/rai

元記事を表示

Stimulus 1: はじめに

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

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

# Stimulusについて

Stimulusはささやかな野心を持つJavaScriptフレームワークです。他のフロントエンドフレームワークとは異なり、Stimulusは単純な注釈を使用してJavaScriptオブジェクトをページ上の要素に接続することにより、静的またはサーバーでレンダリングされたHTML(”既に持っている HTML”)を強化するように設計されています。

これらのJavaScriptオブジェクトはコントローラーと呼ばれ、Stimulusは継続的にページを監視し、HTML`data-controller`属性が表示されるのを待ちます。各属性についてStimulusは属性の値を調べて対応するコントローラークラスを見つけ、そのクラスの新しいインスタンスを作成し、それを要素に接続します。

これは次のように考えることができ

元記事を表示

【rtesseract】Railsアプリ上でOCRとAI-OCRしてみる【Cloud Vision API】

# はじめに

本記事は[RUNTEQ Advent Calendar 2022](https://qiita.com/advent-calendar/2022/runteq)の11日目の記事です。
当初は「今年のテーマは新しく挑戦した技術」という触れ込みだったので、自分のポートフォリオとかとは全く関係ないですが、前職のプロジェクトで間接の間接くらいでお世話になっていたOCR技術に今更ながら入門してみました!
もしもポートフォリオでOCRを何らかの形で利用してみたいという方の参考になれば幸いです。
(ソースコード自体はコントローラにロジックをベタ書きしていたりと汚いので参考程度で、、)

# サンプルアプリのリポジトリ

https://github.com/da-yoshi-k/ocr-sample

※後述しますが環境変数としてS3やAPIキーを持っています。(.env.sampleファイル参照)また、Rails実行端末上にtesseractのインストールが必要です。

# 2つ並べて実行した結果

インプットにした画像と、TesseractとCloud Vision AP

元記事を表示

Herokuの代わりにFly.ioでrailsをデプロイする。(windows版)

>[Fly.ioでRailsアプリをデプロイしてみた for Mac](https://qiita.com/yuuki-h/items/ec23de152368d36672ea)

Herokuが11月末から無料で利用できなくなるという事をお聞きしたので、上記記事を参考にwindows版でのリリースを模索した備忘録です。(macの方は上記記事でデプロイできます!)

勉強不足故、お見苦しい箇所もあるかと思いますが温かい目で読んでいただけると幸いです。

# 手順

1.準備
2.Fly.ioの登録、インストール
3.リリース

# 1.準備
#### 1-1.powershellの準備
###### コマンドプロンプトでは**一部Fly.ioのコマンドが使えない**ため“`PowerShell“`を利用します。

開き方はキーボードで「Windowsキー」+「R」と打つと検索バーが出てくるので
「PowerShell」と打ち込んでEnterです。
![qiita1.png](https://qiita-image-store.s3.ap-northeast-1.amazona

元記事を表示

Railsでアプリを新規作成

railsを勉強し始めたばかりなので、忘れないようにメモとして残します。
# バージョン
Ruby: 3.1.5
Rails: 7.0.4

# 最初に行うこと
ターミナルで以下のプログラムを叩く。
“`
rails new アプリ名
“`
諸々のインストールが完了したら、`$ cd アプリ名`でフォルダに移動。

# サーバーが動いているか確認する
“`
rails server
“`
– server(“s”と省略しても大丈夫) の後ろに`-b 0.0.0.0` をつけると外部の仮想環境からアクセスできるようになる。

# 必要なgemをインストール
エディタでフォルダを開いたら、Gemfileに必要なgemを書き込み保存する。
まだ記述しただけでインストールは完了していないので、ターミナルで以下のプログラムを叩く。
“`
bundle install
“`
– bundleのみでも可

Bundle complete! 19 Gemfile dependencies, 90 gems now installed.
Use `bu

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


【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値が空)なのが原因らしい。

*