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

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

Rails ToDoアプリ タスク管理アプリ (期限切れ・締め切り順・完了ボタン)

# はじめに
雑記事です。また時間を見つけてブラッシュアップいたします。

##完成図
![スクリーンショット 2022-02-19 6.33.38.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1081227/f9517dd6-6b17-785d-7b13-1948c146b7a2.png)

・タスク一覧に残り期限が表示されている
・タスク一覧にタスクが期限順に並んでいる
・期限切れの未完了タスクの表示を変更している
・未完了タスクに完了ボタンが表示されている
・完了ボタンを押すと、完了したタスク一覧に完了日時が表示される

##前提
タスクの簡単なタイトル投稿が作成済みであること
Railsの基礎的な知識を身につけていること

##実装方法
まずタスクを保存する該当のテーブル(本記事ではtweetsテーブル)にタスクの期限を格納するtimeカラムと、タスクが完了した日を格納するdone_atカラムを追加する

### データベース

以下のコマンドでマイグレーションファイルを生成します。

元記事を表示

Ignoring racc-1.5.2 because its extensions are not built. Try: gem pristine racc –version 1.5.2が出た時の対処法

## はじめに
こちら自分用のメモであるためとても雑な記事です。
ただ、同じようなエラーが出た人の助けに少しでもなれば幸いです。
## エラーログ
railsコマンドをターミナルで実行すると無限に以下のメッセージが吐き出される

![スクリーンショット 2022-02-19 2.36.02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1081227/5842c8d9-4536-f834-133e-3927a7a3c897.png)

“`.zsh

Ignoring racc-1.5.2 because its extensions are not built. Try: gem pristine racc –version 1.5.2
Ignoring racc-1.5.2 because its extensions are not built. Try: gem pristine racc –version 1.5.2
Ignoring racc-1.5.2 because its

元記事を表示

区間が重なるためのある条件式と `Range#overlaps?` の定義は同じなのか

Rails で定義されている [`Range#overlaps?`](https://api.rubyonrails.org/classes/Range.html#method-i-overlaps-3F) の[定義](https://github.com/rails/rails/blob/2459c20afb508c987347f52148210d874a9af4fa/activesupport/lib/active_support/core_ext/range/overlaps.rb#L8)は

“`rb
def overlaps?(other)
cover?(other.first) || other.cover?(first)
end
“`

となっている。`other` と対比しやすいよう `self` を補うと

“`rb
self.cover?(other.first) || other.cover?(self.first)
“`

となる。

ところで、区間が重なっているか調べるには

“`rb
self.first <= other.end && oth

元記事を表示

【rbenv】`rbenv install 3.1.0`実行時の`BUILD FAILED`を解消した方法【Ruby】【Rails】

##`rbenv install 3.1.0`実行時の`BUILD FAILED`を解消した方法

### 状況
M1 macで以前にRuby 2.7.5をインストールしていました。
OSを11.6.4(Big Sur)から12.2.1(Monterey)にバージョンアップした後にRubyをバージョンアップするために、`rbenv install 3.1.0`を実行した際に、以下のエラーが出てインストールができませんでした。

“`:ターミナル
$ rbenv install 3.1.0
Downloading openssl-1.1.1l.tar.gz…
-> https://dqw8nmjcqpjn7.cloudfront.net/0b7a3e5e59c34827fe0c3a74b7ec8baef302b98fa80088d7f9153aa16fa76bd1
Installing openssl-1.1.1l…

BUILD FAILED (macOS 12.2.1 using ruby-build 20211227)

Inspect or clean up the w

元記事を表示

Provideメソッド

#使い方

:titleに’sample’定義

“`erb:sample.html.erb
<% provide(:title, 'sample') %> 
“`

yieldで:titleに定義した’sample’を受け取って描写

“`erb:sample_application.html.erb
<%= yield(:title) %>
“`

####例)ボタンの文字の場合

:button_textに’Button’を定義

“`erb:button.html.erb
<% provide(:button_text, 'Button') %>
“`

f.submitでボタン作成、そのボタン上の文字にyield(:button_text)で受け取ったButtonを描写する

“`erb:button_application.html.erb
<%= f.submit yield(:button_text), class: "btn" %>
“`

元記事を表示

【Rails】Railsの環境構築(M1 mac)

## はじめに
環境構築はエラーが出ることが多く、その原因の特定も困難であるため完了までに時間がかかってしまうことがありますが、その都度エラー文をしっかりと確認し、一つ一つ解消していけばいつかは必ず環境構築ができますので粘り強く対応してみてください。
本記事に私自身が環境構築をした際に調べた事項について併せて記載していますので参考にしてください。
また、エラーを解消するために情報収集をする際にはGitHubのissueも確認するようにしてください。

https://github.com/rails/rails/issues

## Railsの環境構築(M1 mac)

### Homebrewをインストール
https://brew.sh/index_ja.html

上記URLにアクセスしてください。
![スクリーンショット 2022-02-18 18.35.42.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2342443/e562b960-e37d-2160-8500-1d637785f1d

元記事を表示

FontAwesomeでアイコンを挿入する

#はじめに

学習記録アプリを開発中で、学習履歴を一覧表示していました。そこに削除用のアイコンをつけたいと思い、今回FontAwesomeを導入していきます。

#環境
– rails 6.0.4.4
– ruby 2.6.5

#FontAwesomeの導入
FontAwesomeアカウントを登録したのちに、公式サイトのヘッダー部分の「Kits」をクリックします。
その後、自分専用コードをクリックすると埋め込み用のコードが表示されます。

“` application.html.erb

“`

これをHTMLファイルのhead要素内に記述します。
(今回はRailsなのでapplication.html.erbのhead要素内に記述する。)

補足
ちなみに登録はEmailとpasswordだけ入力すればすぐにできます。
FontAwesome公式 https://fontawesome.com/

# F

元記事を表示

i18n-js を importmap-rails で使う

## はじめに
Rails アプリで使用される [i18n](https://github.com/ruby-i18n/i18n) の JavaScript 版のライブラリとして [i18n-js](https://github.com/fnando/i18n-js) があります。
自分の Rails プロジェクトで Webpacker -> importmap-rails の移行をするにあたって、 i18n-js の移行にかなり試行錯誤したので、自分の使い方を記載しようと思います。

Webpacker -> importmap-rails の移行については別記事を書きました。 -> [Webpacker から importmap-rails に移行した](https://qiita.com/mishina2228/items/d4b9af22d0096ee451d7)

## 前提
元々は、i18n-js のREADME の [Rails with webpacker](https://github.com/fnando/i18n-js/tree/v3#rails-with-web

元記事を表示

[Rails] FactoryBotの実装

# FactoryBot
FactoryBotはRailsでテストサンプルデータを簡単に扱えるように考えられたgem。
rspecと組み合わせて使われる例をよく見ます。

##使い方
###初期設定
“`ruby:spec/rails_helper.rb
config.include FactoryBot:Syntax::Methods # Rspec.configureの中に記述
“`

###Factoryの定義
“`ruby:spec/factories/ex.rb
FactoryBot.define do
factory :ex_user do
name {“user1”}
password {“password”}
end
end
“`
上記の例ではfactoryの名前がex_userでその中に名前とパスワードが格納されています。

###Specへ記述
“`ruby:specテスト内
example “xxxのテスト”
m = build(:ex_user)
end
“`
ex_userをspec内でbuildすることで、テスト内で使用

元記事を表示

[備忘録]ActiveAdminで子モデルの要素を引っ張ってくる記述方法

どうも。

受託開発で管理画面の開発をバリバリやっていたとき詰まったところを書いていく

activeadminで子モデルを参照するとき、
・permit_params
・filter
・index/show
・inputs
で書き方が異なる

##今回使うモデル例
“`user.rb
has_one :profile
has_many :items
“`

“`profile.rb
belongs_to :user
“`

“`item.rb
belongs_to :user
“`

“`schema.rb
ActiveRecord::Schema.define(version: 2022_XX_XX_XXXXXX) do
create_table “users”, force: :cascade do |t|
t.string “username”
t.datetime “created_at”
t.datetime “updated_at”
end

create_table “profiles”, force: :cascade do |t|

元記事を表示

miHub で使用している技術を紹介します

# はじめに
みなさん、はじめまして。
MI-6株式会社でエンジニアリングマネージャーをしています [@_oliverSI](https://twitter.com/_oliverSI) です。MI-6株式会社では AI を用いて素材メーカーの研究開発を効率化する SaaS プロダクト「miHub」を開発しています。

初期のプロトタイプは2019年8月から開発を開始し、その後ユーザー数の増加もありインフラ刷新を経て現在の形に至っています。本記事では、miHub で使用している技術について、その選定経緯および変遷を紹介させていただきます。

# システム構成
まずざっくりとした現状のシステム構成ですが、以下のようになっています。フロントエンドと API サーバーは分離していて、SPAの構成となっております。開発スピードを優先して、モノリシックにした方が良いという意見もありましたが、プロダクトの方針として、使いやすさは重視したいということもあり、最終的に SPA の採用を決定しました。また、 API サーバーとは別に解析ワーカーを用意していて、時間のかかる解析処理を解析ワーカーで行うよ

元記事を表示

Docker Composeを使う際のコマンドrunとexecの違い

## 概要
`docker compose`のコマンドで`run`と`exec`の違いが曖昧だったためメモ用に残しておきます。
`docker compose`について詳しく知りたい場合は下記公式ドキュメント参照。
[Docker Compose公式ドキュメント](https://docs.docker.jp/compose/toc.html)

## docker composeのrun、 execコマンドとは
`run`、`exec`コマンドの用途はどちらも同じです。
コンテナに対してコマンドを実行したいときに使用するコマンドです。
下記のように実行します。

“`terminal
docker-compose run サービス名 実行したいコマンド
or
docker-compose exec サービス名 実行したいコマンド
“`
ちなみにコマンドで出てくるサービス名は、`docker-compose.yml`で指定したサービス名です。
`docker-compose.yml`の記載方法はここでは割愛します。

### コマンド入力例
例えば、`backend`というサービス

元記事を表示

ActionDispatch::Cookies::CookieOverflow (ActionDispatch::Cookies::CookieOverflow)の解決方

## 起こったこと

RailsAPIとNuxt.jsで作成しているアプリでdevise_token_authを使用した認証機能を実装中に、ログインをすると
“`ActionDispatch::Cookies::CookieOverflow(ActionDispatch::Cookies::CookieOverflow)
“`
が発生して、ログイン中のユーザー情報が取得できなかった。

主な原因としては
session 変数に多くのデータを保持する場合や
flash など view 関連のhelper で Objectやtextなど多くの文字列
を渡している場合に出るよう。

(CookieStore: session 情報を全てsecret_key_baseで暗号化し、クライアント側のCookie に保持。)

上記を解決するのに結構ハマったので、備忘録的に記事を書きます。
(何か別の方法等あればコメントにて教えていただけると幸いです)

## 解決法
該当コントローラーに下記メソッドを追加

“`
request.session_options[:skip] = true
`

元記事を表示

【devise】undefined local variable or method `resource_name’の解決策

###解決策 

“`ruby:application_helper
def resource_name
:user
end

def resource
@resource ||= User.new
end

def devise_mapping
@devise_mapping ||= Devise.mappings[:user]
end
“`
こちらのコードをポイっと入れるだけです!
解決!

元記事を表示

CarrierWave使用時はコールバックの設定位置に注意

Ruby on Railsをで画像をアップロードする際によく採用されるCarrierWaveを使っている際にコールバックの設定で詰まったことがあったので備忘録として残しておきます。

### 行ったこと
Imageモデルに対してafter_commitでsave時に追加で処理を設定しました。

“`ruby
class Image < ApplicationRecord mount_uploader :image, ImageUploader after_save_commit :send_message def send_message ... end end ``` ### 発生した問題 `store_dir`に画像が保存されず、`cache_dir`のデータのままデータが変わらなくなってしまいました。 ```bash # 保存前 uploads/tmp/hoge.jpg # 保存後 uploads/images/hoge.jpg ``` after_commitを使用している例もあり、実装としてNGではなさそう。 https://stack

元記事を表示

Railsのcollection_check_boxesで特定データのみチェックボックスにしたい

#言語
HTML/CSS/JavaScript
Ruby 2.6.3

#フレームワーク
Vue 2.6.12
Rails 6.1.3.2

#やりかったこと
collection_check_boxesの仕組みで特定のカレンダーのみ、
新規登録画面に表示させたい。
![スクリーンショット 2022-02-18 12.14.08.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/468139/53750bff-0f97-b7af-95bd-9e7677b63c4d.png)

#困った点
調べて下記の記述でチェックボックを表示させました。
ただ、作ったカレンダーがすべてチェックボックスになってしまいました。

~~~~~
<%= f.label :カレンダーに参加 %>

<%= collection_check_boxes(:calendar, :calendar_id, Calendar.all, :id, :name) do |b| %>

元記事を表示

【Ruby】each_with_objectを使うと便利だよって話

each_with_objectを使う方と使わない方で同じ結果になる。
each_with_objectを使う方が1行コードを減らせるし、すっきりして見やすいのでeach_with_objectを積極的に使っていきたい。

##each_with_objectを使わない

“`ruby
users = User.all
posts = []
users.each do |user|
posts << user.posts end #> posts
#=> [[#],
[#

元記事を表示

ActiveModelSerializerで発生したN+1問題を解決

##前提

UserとPostは1対Nの関係

“`ruby
class Post < ApplicationRecord belongs_to :user end ``` ```ruby class User < ApplicationRecord has_many :posts, dependent: :destroy end ``` ##解消前 テストログを見るとserializerが走ったときにN+1問題が発生していた。 ```ruby def index posts = current_user.posts render json: posts end ``` ##解消後 ```ruby def index posts = current_user.posts.preload(:user) render json: posts end ``` scopeに切ると他でも使えてベター ```model.rb scope :preload_user, -> { preload(:user) }
“`

“`ruby
def inde

元記事を表示

attr_writter, attr_reader, attr_accessorについて

まず、この3つのメソッド話題のときに理解していないといけないのはインスタンス変数です。
インスタンス変数とはその名の通り、インスタンスを格納している変数です。(説明になってないので、[こちら](https://qiita.com/wangqijiangjun/items/787c956dab02e516eab9)の記事をご覧ください。)

インスタンス変数というのはクラス外からは参照できないんです。
実際にコードを書いていきます。
“`
class User
def initialize(name)
@name = name
end
end

user = User.new(“John”)
p user.name
=> NoMethodError (undefined method `name’ for #)
“`

上のコードを見ていただくと分かるのですが、インスタンス変数はクラス外部からは参照できないんです。

## attr_reader
そこで、クラス外からインスタンス変数を参照した

元記事を表示

ActiveStorageでアップロードしたファイルの名前と拡張子を取得したい

## 前提
– `ActiveStorage`を利用しファイルをアップロード後

※ `Active Storage`使用していなくてもOK

## やること
– アップロードしたファイルの拡張子を表示
– アップロードしたファイル名を表示

## 拡張子の取得
※(今回は`User`モデルに`has_one_attached :avatar`を記載した例です)
### 手順
“`.rb
# アップロードしたファイルのurlを取得
avatar_url = rails_blob_path(@user.avatar)
# => “/rails/active_storage/blobs/xxxxxxxxxxxxxxx/ファイル名.jpg”

# ファイルの拡張子を呼び出す
File.extname(avatar_url).downcase
# => .jpg
“`

## ファイル名の表示

“`.rb
# アップロードしたファイルのurlを取得
avatar_url = rails_blob_path(@user.avatar)
# => “/rails/active

元記事を表示

OTHERカテゴリの最新記事