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

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

hidden_fieldを使いたくなかったから、試行錯誤した話

# 寝て起きたら閃いた
撲滅したかった部分のコード

“`rb
<%= f.hidden_field :list_id, value: @list.id %>
“`

外部キーをフォームに持たせるために使っていたがデベロッパーツールで改ざんされるのを防ぐため撲滅することにした。
ああでもないこうでもない、色々と試行錯誤したがストロングパラメーターのあるprivateメソッド内で書くことが一番だと考え、ストロングパラメーターに含めたら、最終的に以下のコードになった。

“`rb
private
def card_params
params.require(:card).permit(:title, :memo).merge(list: find_list)
end

def find_list
@list = List.find(params[:list_id])
end
“`

全体のコード
view

“`rb
<%= form_with model: @card, url: list_card_index_path,

元記事を表示

Railsのhas_manyのデフォルトの挙動

↓以下のコードを例にします。

“`ruby
class User < ApplicationRecord has_many :microposts, dependent: :destroy end ``` **「has_many :microposts, dependent: :destroy」**とすると**Userモデル**と**Micropostモデル**を1対多の関係に紐づけてくれますが、特に**「Micropost」**という記述がなくても動作します。これはデフォルトの挙動のおかげです。 デフォルトでは、「:microposts」の部分を**「{モデル名}s」**と推測します。 つまり**「:microposts」⇨ 「{Micropost}s」**としMicropostモデルと紐づければいよいとrailsが理解してくれます。 紐づけるキー、つまりforeign_keyに関しても**「{モデル名}_id」**がforeign_keyであると推測してくれます。 今回だと、**「user_id」**がforeign_keyであると推測します。 ```ruby cla

元記事を表示

docker-compose 環境で letter_opener_web が動かなかった話

## letter_opener_web が動かなかった

現在やっているプロジェクトを開始した当初からメール送信のローカル確認のために [letter_opener_web](https://github.com/fgrehm/letter_opener_web) を入れていた。
これは以前からも利用しており特に問題が起きたこともなかったので普通に動くだろうと思って導入した。

が、動かなかった。

正確に言うと `http://localhost:3000/letter_opener` にアクセスしてメール確認画面は何の問題なく表示されるが、メールが届かない。それ以外、どこにも何もエラーが出ていない。。

意味不明な状態だった。

## とりあえず使っている、開発環境

利用している開発環境は以下のような形で、特に特殊なことはしていない

– Docker for Mac
– Rails 6.x
– Ruby 2.x
– docker-compose
– Sidekiq (メールの送信もこちらを使って非同期で送信)

## 結局、、

– Mailer を常に `deliver_l

元記事を表示

ransackを用いて複数ワードの空白区切り、フリーワードでの検索機能を実装する

## はじめに
開発ですぐに忘れそうなことを、簡単に再度調べられるようにするための備忘録です。

## やりたいこと
検索機能を簡単に実装できるransackを用いて、
複数のワードを空白区切りで入力された時の検索と
カラムを跨いだフリーワードでの検索を実装したい。

## 事前知識

例えば、Blogモデルにransackを用いて検索機能を実装する流れとして、

– カラム名_eq, カラム名_contなどのパラメーターを渡す( params[:q][:title_cont]など )
– Blog.ransack(params[:q])で検索
– 検索で得られたオブジェクトに対してresultを用いて、ActiveRecord_Relationに変換する

のような流れで実装していく。

その他、細かな点は
[ソースコード](https://github.com/activerecord-hackery/ransack)や[ピカワカ](https://pikawaka.com/rails/ransack)さんのサイトが参考になりそう。

## 実装の流れ

1. 入力された文字列を空

元記事を表示

(未解決)[TravisCI]The command “docker-compose exec –env ‘RAILS_ENV=test’ web rails db:migrate” exited with 1.というエラー

# はじめに
本記事は、備忘録として現在解決中のエラーを記述します。

# コード

“`Dockerfile:Dockerfile
FROM ruby:2.5
RUN apt-get update && apt-get install -y \
build-essential \
libpq-dev \
nodejs \
postgresql-client \
yarn

WORKDIR /product-register
COPY Gemfile Gemfile.lock /product-register/
RUN bundle install
“`

“`docker-compose.yml
version: ‘3’

volumes:
db-data:

services:
web:
build: .
ports:
– ‘3000:3000’
volumes:
– ‘.:/product-register’
environment:
– ‘DATABASE_PASSWORD=postg

元記事を表示

Rails annotateについて

#annotateとは
***annotate***とはmodelやテストのファイルに
“`schemaなどにあるデータベースの情報などをコメントとして出力させるためのgem“`です。
schemaを確認する手間が省けるメリットがあります。

#導入方法
まず初めにGemfileの中に以下のように追記します。

“`Gemfile
group :development do
gem ‘annotate’
end
“`

その後にbundle installで導入完了です。

#annotateの実行
migrationを実行した時に、schema(データベース)の情報を
ファイルにコメントを出力させたい時には以下のコマンドを実行します。

“`
$ bundle exec rails g annotate:install
“`

“`app/model/memos.rb

# == Schema Information
#
# Table name: articles
#
# id :integer not null, prima

元記事を表示

chartckickで円グラフを実装(2つのモデルにまたがるデータ)

# 概要
家計簿アプリで、月毎やカテゴリ毎に支出を可視化したい!
→グラフを簡単に導入したい!
→chart.jsってのがあるらしい!
→でも、基本的な使い方以外の記事が少ないな…。

ということで、自分なりに試行錯誤した内容を記事にしてみました。

なお、導入や基本機能については以下記事を参照してください。
[公式のgithub](https://github.com/ankane/chartkick)
[導入方法と基本機能](https://qiita.com/Y_uuu/items/0d57748954c7cdb9bbcb)

# 開発環境
Ruby 2.7.4 / Ruby on Rails 6.1.4 / RSpec
Docker / Docker-compode / CircleCI(CI/CD) / Heroku / SendGrid(mailer)

# 完成のイメージ
以下のモデルのアソシエーションから、
![ER2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/176686

元記事を表示

会員マイページのルーティング

#users/:idでurlを指定していたのをmypageで表示するようにする

**Before**

“`ruby:route.rb
get ‘users/:id’ => ‘users#show’
“`

**After**

“`ruby:route.rb
get ‘mypage’ => ‘users#show’
“`
それに合わせてアクションも修正
**Before**

“`ruby:user_controller.rb
def show
@user = User.find(params[:id])
end
“`

**After**

“`ruby:user_controller.rb
def show
@user = current_user
end
“`

これでurlが/mypageで自身の会員情報を見れるようになった。

元記事を表示

[作ってみた]招待コードを画面上で入力して相互フォロー(夫婦・カップル向けアプリに)

# 概要
個人開発として「夫婦・カップル専用の家計簿WEBアプリ」をRailsで作成しました。
「その際、”夫婦やカップル(以下、夫婦)の相互フォロー機能”をどのように実装するか?」にかなり悩みました。
参考記事も見つからなかったので、私なりの実装方法を記事として残してみようと思っています。

# 使用技術
フロントエンド
HTML / CSS / Javascript / Bootstrap 5.1.0
バックエンド
Ruby 2.7.4 / Ruby on Rails 6.1.4 / RSpec
インフラ・開発環境
Docker / Docker-compode / CircleCI(CI/CD) / Heroku / SendGrid(mailer)

# 実装の方針
### 前提
– ユーザーの登録にはEmailとパスワードを使います。
– 相互フォローをすることを前提とします。
ツイッターのような非対称なフォロー(「自分がフォローした人」と「自分をフォローした人」とが不一致になりえるような形)は想定していません。
つまり、Relations#new/c

元記事を表示

データベースとテーブルのコマンド

作成の際に使用するコマンドを書いてみようと思います!

単純ですが、アウトプットのためにも書いて行こうと思います!

#①.モデル作成

モデルやそれに付随するファイルを一度に作成してくれるコマンド!

以下のコマンドとなっております!

“`
rails g model モデル名
“`

注意点は、モデルの命名規則は、単数形を使用することです!

例えば、魚の情報を管理する場合は「fish」、本の情報を管理する場合は「book」という名前になります!

#②.マイグレーションの実行

マイグレーションの実行には、Railsアプリのディレクトリでrails db:migrateコマンドを使用します!

“`
rails db:migrate
“`

これでマイグレーションが反映されます!

#③.マイグレーションを修正

マイグレーションは、一度実行すると再度実行できない仕組みになっています!

マイグレーションを差し戻すには、rails db:rollback

“`
rails db:rollback
“`

これで downになっていれば、差し戻し完了です!

確認方

元記事を表示

[Rails]has_one_attachedもしくはhas_many_attached

##初めに
####この記事の対象者
アプリケーションに画像を添付したいヒト用

####環境
・Macbook Air (Retina, 13-inch,2019)
・プロセッサ 1.6GHz デュアルコアIntel Core i5
・メモリ 8GB 2133 Mhz LPDDR3
・MacOS Big Sur バージョン 11.5.2

####記事の目次
**1)なにができるか**
**2)前提条件**
**3)どうやってつかうか**
**4)最後に**

##なにができるのか
####画像を追加できるようなシステムを利用して、画像を添付させることができる

##前提条件(詳しくは→作成中)
**1)画像を追加できるようなシステムを作る**
####(例:商品のテーブル)
![producttablesample.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1102030/4e9f3cd6-5421-76b9-67a1-a87565289f3a.png)
####(例:画像1枚追加システム)
!

元記事を表示

EC2にデプロイしたロゴ画像が表示されない

件の[ポートフォリオ](https://qiita.com/ryo1103/items/973d05c52b2adb3e84b2)を作成後、`heroku`にてデプロイし次に`AWS`へのデプロイに挑戦しました。
その際に`app/assets/images`下にあるロゴ画像が表示されなかった時の対処の話です。(下記参照)
![スクリーンショット 2021-09-03 19.00.50.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1748419/be2d3a51-3d89-cf7b-c4ac-b0fe72935d1b.png)

# 目次
1. `heroku`でも起きていた現象
1. `AWS`では、原因が異なる
1. 今回の解決策

## herokuでも起きていた現象

– 画像が読み込まれない現象は`heroku`の初期でも起きていました。
– 原因はプリコンパイル関連でサクッと解決。
– 【参考】 [【Heroku】本番環境でアプリに導入している画像が表示されない場合の対応方法(Ru

元記事を表示

[Rails]アソシエーションについて

##初めに
####この記事の対象者
**railsでのプログラミングがはじめまして人向け**

####環境
・Macbook Air (Retina, 13-inch,2019)
・プロセッサ 1.6GHz デュアルコアIntel Core i5
・メモリ 8GB 2133 Mhz LPDDR3
・MacOS Big Sur バージョン 11.5.2

####記事の目次
**1)modelってなんだ?**
**2)modelですること[基本]**
**3)最後に**

##modelってなんだ?
**主にデータベースへ情報を保存したり、保存する情報にルールをつけて制限する場所**
**→model名と同じテーブルへと情報が保存される**
**→(例えば)保存するデータは半角英数字であるべきとルールをつければ、一致できない場合保存不可能になる**

##modelですること[基本]
####アソシエーションを組む(関連付け)
**複数のテーブルがある場合、アソシエーションを組むことでお互いの情報を共有できるようになる!**

**belongs_toの場合(単対単)**
![bel

元記事を表示

Rails コメント機能

##開発環境
Ruby 2.6.5
Rails 6.1.3
##テーブルの作成
投稿内容であるcontentと、誰が投稿したのかというuser_idが入るようにします。

“`create_comments.rb
$ rails g model post content:string user:references
$ rails db:migrate
“`
##モデルとマイグレーションの確認と関連付け
“`models/post.rb
class Post < ApplicationRecord has_many :comments, dependent: :destroy end ``` ```models/user.rb class User < ApplicationRecord has_many :comments, dependent: :destroy end ``` commentモデルに関してはコメントの内容のcontentは空文字ではないようにし、文字数を最大100字にしました。user_id,post_idは存在するかどうかにつ

元記事を表示

rails6でmeta-tegsのmetaタグとOGPを設定する

gemのmet-tagsを使ったOGPの設定の情報が少なく感じましたし、なにせ結構な時間を取られてしまったので、調べてやったことをアウトプットしていこうと思います!

* met-tagsの導入
* デフォルトmeta-tagとOPGの設定
* 個別にmeta-tagとOPGの設定
* 開発環境でのチェック方法

以上の内容で記述していきますね!

# meta-tagsの導入

gemなんで以下のように

“`ruby:gemfile
gem ‘meta-tags’
“`

ターミナルにて
`bundle install`
`rails g meta_tags:install`

これらを実行することで、config/initializers/meta_tags.rb というファイルが出来上がり、ここを編集することでmetaタグとOGP調整できます。

# デフォルトmeta-tagとOPGの設定

“`ruby:config/initializers/meta_tags.rb
# frozen_string_literal: true

# Use this setup bl

元記事を表示

Rails6にDeviseを導入する

# 環境
Rubyバージョン: `ruby 2.7.4p191 (2021-07-07 revision a21a3b7d23) [x64-mingw32]`
Rails Gemバージョン: `6.1.4.1`
devise Gemバージョン: `4.8.0`
devise-i18n Gemバージョン: `1.10.0`
ユーザモデル名: `User`
テンプレートエンジン: `erb`

# 参考になるサイト
英語読める&README読む能力がある方は正直公式見るのが一番早いと思います。

– https://github.com/heartcombo/devise/blob/c82e4cf47b02002b2fd7ca31d441cf1043fc634c/README.md
– https://github.com/tigrish/devise-i18n/blob/802be774c28beda1587333dd7b5c761c9b5f8107/README.md

# この記事ではなにをする?
– [Deviseの導入](#deviseの導入)
– [i18n(日本語)に対応させ

元記事を表示

[簡単] Rails6の標準メッセージを日本語に対応させる(i18n)

# 環境
Rubyバージョン: `ruby 2.7.4p191 (2021-07-07 revision a21a3b7d23) [x64-mingw32]`
Rails Gemバージョン: `6.1.4.1`
rails-i18n Gemバージョン: `6.0.0`

# 参考サイト
https://github.com/svenfuchs/rails-i18n/blob/67d72ccf469c7e5aa50838b0090219bf579f2626/README.md

# 導入

## Gemfileに追加
`Gemfile`の一番下に追加します

“`rb:Gemfile
gem ‘rails-i18n’, ‘~> 6.0.0’
“`

## Gemインストール
ターミナルでコマンド実行

“`shell:Terminal
bundle install
“`

## デフォルトの言語を日本語に変更する
`config/application.rb`の一番下(endよりは上)に追記する

“`rb:config/application.rb
module Exampl

元記事を表示

5分でRailsにletter_opener gemを導入する

# 環境
Rubyバージョン: `ruby 2.7.4p191 (2021-07-07 revision a21a3b7d23) [x64-mingw32]`
Rails Gemバージョン: `6.1.4.1`
letter_opener Gemバージョン: `1.7.0`

# 参考サイト
– https://github.com/ryanb/letter_opener/blob/e501aff72036f67c4bb1840ead48dda0e47340d5/README.md

# letter_openerとは?
メールが送信される代わりに、ブラウザでメール内容が表示される開発用gemです
デフォルトの場合development環境でメールが送信された時コンソールにメール内容が表示されますが、流れてしまって見づらいのでこれを使うと便利です
これを使うとdevelopment環境なのにわざわざgmailを設定するなんて手間も掛からず開発を楽にしてくれます!
※letter_opener_webとは異なるので注意

# 導入

## Gemfileに追加
`Gemfile`の`gr

元記事を表示

railsアプリをHerokuデプロイする際につまづいたエラーたち

herokuにデプロイした際に出たエラーの対応を、備忘として記録します

# 起きたエラーたち
1. Your bundle only supports platforms [“x86_64-darwin-20”] but your local platform is x86_64-linux. Add the current platform to the lockfile with `bundle lock –add-platform x86_64-linux` and try again.
2. Sprockets::DoubleLinkError: Multiple files with the same output path cannot be linked (“sessions.css”)
3. Module not found: Error: Can’t resolve ‘../images’ in ‘/tmp/build_bc38a87c/app/javascript/packs’

## 1. Your bundle only supports platforms

元記事を表示

railsコンソール第七章 Userリソース

###Userリソース
ユーザープロフィールページを作成するには、その前に“`データベースにユーザーが登録“`されている必要があります。
このWebサイトでは、“`登録ページがない状態でどうやってユーザーを登録しておけばよいでしょうか“`。
前回Railsコンソールを使ってユーザーレコードを登録してありました。
したがって、データベースの中に一人のユーザーがいるはずです。

“`rb
>> User.count
(1.5ms) SELECT sqlite_version(*)
(0.7ms) SELECT COUNT(*) FROM “users”
=> 3
>> User.first
User Load (0.8ms) SELECT “users”.* FROM “users” ORDER BY “users”.”id” ASC LIMIT ? [[“LIMIT”, 1]]
=> #

元記事を表示

OTHERカテゴリの最新記事