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

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

WSL2で ‘rails new’ できるけど ‘rails s’ できない方へ

# はじめに
最近,Ruby on Rails 環境を作成していたのですが,思わぬところで躓きました…

`rails new` はできるんです.
`rails s`した時,サーバーが立ち上がらず,エラーが出てしまいました.

キーワードは`yarn`でした.

# 事前環境
“`
wsl2: Ubuntu-20.04
node: 14.17.1
rails: 6.1.4.1
“`

# webpackerは入っていますか?
`rails s`した時のエラー文に以下のような部分はありませんか?

“`bash
(略)
Please run rails webpacker:install
(略)
“`

`rails webpacker:install`ができませんか?
まさに私と同じ状況ですので,次を見てみてください.

# yarnは入っていますか?
私はまさにこれでした.

“`bash
npm install –global yarn
“`

yarnを導入した後先ほどのコマンドを実行してみてください.
もしくは`rails new`の時に自動で`webpacker

元記事を表示

bootstrap modal とform_withの組み合わせ

bootstrapのmodalにform_withを組み込めないか検証してみた。
結果、上手く機能した。(unreadableで申し訳ないが以下のコードで一応機能した。)

~~~

元記事を表示

railsチュートリアル第6章 長さを検証する

###長さを検証する
各ユーザーは、Userモデル上に名前を持つことを強制されるようになりました。
存在性の有効 valid?
しかし、これだけでは“`十分ではありません“`。
ユーザーの名前はサンプルWebサイトに表示されるものなので、“`名前の長さにも制限“`を与える必要があります。

最長のユーザー名の長さを単に50を上限として手頃な値を使うことにします。
つまりここでは、51文字の名前は長すぎることを検証します。
問題になる可能性もあるので“`長すぎるメールアドレスに対してもバリデーション“`を掛けましょう。
ほとんどのデータベースでは文字列の上限を255としているので、それに合わせて255文字を上限とします。
説明するメールアドレスのフォーマットに関するバリデーションでは、こういった長さの検証はできないので、“`本節で長さに関するバリデーションを事前に追加“`しておきます。

####nameとemailの長さの検証に対するテスト

“`rb
>> “a” * 51
=> “aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa

元記事を表示

railsチュートリアル第6章 フォーマットを検証する

###フォーマットを検証する
name属性の検証には、空文字でない、名前が51文字未満であるという“`最小限の制約しか与えていません“`でした。
email属性の場合は、有効なメールアドレスかどうかを判定するために、“`もっと厳重な要求を満たさなければなりません“`。
これまでは空のメールアドレスのみを禁止してきましたが、ここではメールアドレスに“`おなじみのパターン“`user@example.comに合っているかどうかも確認することを要求します。
最初に、“`有効なメールアドレスと無効なメールアドレスのコレクションに対するテスト“`を行いましょう。
このコレクションを作る方法として、次に示すように、文字列の配列を簡単に作れる“`%w[]“`という便利なテクニックを知っておくと良いでしょう。

“`rb
>> %w[foo bar baz]
=> [“foo”, “bar”, “baz”]
>> addresses = %w[USER@foo.COM THE_US-ER@foo.bar.org first.last@foo.jp]
=> [“USER@foo.

元記事を表示

【Rails】学習アプリにおける進捗状況をprogressバーで表現する

rails 初学者のアウトプット用投稿です。同じ結果を得られるより良い書き方がございましたらコメントでご教示頂けると幸いです。

#実現したいこと
学習アプリ作成においてユーザーの個人ページ(user_controllerのshowアクション)に一週間、どのくらい学習を行なったのかをhtmlのprogressタグで見える化する。

今回はanswerモデルにそれぞれの学習内容が保存されており、answerの作成数をカウントし、それを学習量の算出基準とする。

イメージ図(下記)
![FEBA03C7-F478-4A4E-B8ED-545C9F588945_4_5005_c.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1640672/72761668-1709-023e-484d-fe2c0051f2b2.jpeg)

#実装の流れ
①userに紐づいたanswerモデルから一週間分のデータを配列として取り出す。

②①で取り出したデータからさらに曜日だけを配列として取り出す。

③show.html

元記事を表示

【個人開発】検索サイトのクエリストリングを検索できるwebサービス「searchsearch」をリリースしました!

たとえばQiitaで「AWS ECS docker」について新着順で検索をすると、URLはこうなります。

“`
https://qiita.com/search?sort=created&q=AWS+ECS+docker
“`

`q=`で検索文字列を、`sort=`でソート順を指定しているみたいですね。

Googleで「Ruby docker image」について期間指定を1年以内にして検索するとこうです。

“`
https://www.google.com/search?q=Ruby+docker+image&source=lnt&tbs=qdr:y&sa=X&ved=2ahUKEwi8qee-w5nzAhUTZt4KHQ0GBT8QpwV6BAgBECo&biw=1920&bih=1001&dpr=1
“`

同じく`q=`で入力を指定していそうです。他にも色々とクエリストリングが付いています。

Amazonで「Rails」を検索して、並び替えをレビューの評価順にしたときのURLはこう。

“`
https://www.amazon.co.jp/s?k=Rail

元記事を表示

【Rails】LazyHighChartsで箱ひげ図を作成

## 1.はじめに
閲覧していただきありがとうございます。
今回作成したアプリの経緯や開発の苦悩などをまとめました。
よろしければ、ご覧ください。
## 2.関連URL
アプリ:https://box-test-app.herokuapp.com/
Github:https://github.com/suugakusan/box_test
## 3.アプリ概要
数値を入力するだけでその箱ひげ図を作成することができるアプリです。

* 箱ひげ図の作成・編集・削除機能
* 数値の入力・削除
* ログイン機能
* ゲストログイン機能

## 4.アプリの制作背景
 中学2年生の数学で学ぶ箱ひげ図ですが、教科書の内容を扱うだけでは、理解が不十分になります。特に、四分位数を求めることはできても、箱ひげ図から実際のデータを予測できる力が足りません。
 そこで、数値を入力するだけで箱ひげ図を作成できるアプリがあれば、箱ひげ図を苦手とする生徒を救うことができるのではないかと思い制作しました。

## 5.機能一覧
| |機能 |gem |
|:—: |:—: |:—: |
|1 |

元記事を表示

Rails6でJavaScriptを書く

# はじめに
初めてRuby on Railsを触ることになり、JavaScriptを使ってみることになった。
うまく動く資料が見当たらなかったため、備忘録として書いておくことにした。

# JavaScriptの実装
## JavaScriptの書く場所
app > javascript > packs
– file下に制作のファイルを作成するのがおすすめ
– 自分はusersというファイルを作成し、その下にjsファイルを作成した
## jsファイルに書くべきこと
– 読み込み時に表示

“`js
window.onload = function(){
//中略
//ウィンドウが読み込まれたとき表示する
}
“`
– 動作により呼び出す場合

“`js:app>javascript>packs>user>common.js
window.onchange = function hogehoge(){
//中略
//自分はonchangeで呼び出しをしたためこのように記載した
}
“`

##書いたjsを読み込ませる

“`js:app>javascript>packs>ap

元記事を表示

Rails: assets pipelineでrequire_tree . から特定のファイルを除く

プロジェクトの開始時に、app/assets/styleseets下のapplication.cssに、深く考えずに`require_tree .`と書くと、あとで「しまった、ディレクトリ分けしておけばよかった」となります。

“`app/assets/styleseets/application.css
/*
*= require font-awesome
*= require_tree .
*= require_self
*/
“`

こう書けば、CSSの使い分けができたのに。

“`app/assets/styleseets/application.css
/*
*= require_tree ./main
*/
“`

“`app/assets/styleseets/admin.css
/*
*= require_tree ./admin
*/
“`

“`config/initializers/assets.rb
Rails.application.config.assets.precompile += %w( admin.css )
“`

元記事を表示

[Rails Minitest]’test’ is already defined in Users::SessionsControllerTest (RuntimeError)

## イントロダクション

RailsMinitest中に発生したエラー。

“`
`test’: test_new_test is already defined in Users::SessionsControllerTest (RuntimeError)
“`

エラー文のまま検索したら、検索結果が0件だったので共有しておく。

## 原因

このエラーは、同じテストファイル内で同一のテスト名が指定されている時に表示されるエラーである。

自分のファイルを見返してみると全く同じテスト名のものがあった。

“`ruby
test “new test” do
get new_user_session_path
assert_response :success
end

# ~~~

test “new test” do
get new_user_password_path(format: :json)
assert_response :success
end
“`

なので、どちらか片方のテスト名を編集してやればテストはいつも通り動作する。

“`ruby
te

元記事を表示

Field ‘created_at’ doesn’t have a default value解決方法

#はじめに
MySQLで下記のテーブルにinsertを実行した際に
「Field ‘created_at’ doesn’t have a default value」とエラーが発生した。

““
mysql> describe tables;
+————+————–+——+—–+———+—————-+
| Field | Type | Null | Key | Default | Extra |
+————+————–+——+—–+———+—————-+
| id | bigint | NO | PRI | NULL | auto_increment |
| name | varchar(255) | NO | | NULL | |
| created_at | datetime(6)

元記事を表示

【Rails】「教材シェア」アプリを作成しました

## 1.はじめに
閲覧していただきありがとうございます。
今回作成したアプリの経緯や開発の苦悩などをまとめました。
よろしければ、ご覧ください。
## 2.関連URL
アプリ:https://teaching-materials-app.herokuapp.com/
Github:https://github.com/suugakusan/teaching_materials_app
## 3.アプリ概要
教員同士で教材をシェアし、生徒と向き合う時間を確保することをテーマにしたアプリです。

* 教材のデータを作成・編集・削除機能
* フォロー機能
* 投稿への「お気に入り」機能実装し「お気に入り」したものは一覧で閲覧可能
* 投稿のタイトル(内容)で検索機能(教科名も可)

## 4.アプリの制作背景
 私が教員として働く中で、生徒と向き合う時間が十分に取れないほど、数多くの仕事で溢れていました。本来であれば、教材研究する時間を確保し、生徒に実りある学習を提供しなければいけません。 しかし、それ以外の業務に時間をかけており、教材研究が全くできないのが今の現状です。同僚も同じように、

元記事を表示

[Rails]基本理念について

# はじめに
本記事では、railsの基本理念について、まとめてみました。

# 基本理念

## DRY
railsでコードを書く時には、
同じ情報を繰り返し記述することは、コード的にも、見る人にも良くはありません。

`DRY`とは、`Don’t Repeat Yourselfの略`
`同じ情報を繰り返し記述しない`というものです。

`スマブラのドンキーコング`を想像してください。
(ちょっと強引ですので、ご容赦)

`DRYを意識していない`ドンキーコング

“`
ジャブ = ドンキーのAボタン
パンチを溜める = ドンキーのBボタン
ジャンプする = ドンキーのYボタン

– 「ドンキー」を修正する場合、3箇所もあるので、工数がかかる
– 一つだけ「ドンキー」のまま未修正に気づかなかった場合のリスク有
“`

`DRYを意識した`ドンキーコング

“`
fighter = ドンキー
ジャブ = fighter の Aボタン
パンチを溜める = fighter の Bボタン
ジャンプする = fighter の Yボタン

– 変更点が1つだけなので、修正工数が少ない

元記事を表示

railsチュートリアル第6章 ユーザーを検証する

##ユーザーを検証する
作成したUserモデルに、アクセス可能なnameとemail属性が与えられました。
しかし、これらの属性は“`どんな値でも“`取ることができてしまいます。現在は(空文字を含む)“`あらゆる文字列が有効“`です。
名前とメールアドレスには、もう少し“`何らかの制限“`があってよいはずです。
例えばnameは空であってはならず、emailはメールアドレスのフォーマットに従う必要があります。
さらに、メールアドレスをユーザーがログインするときの一意のユーザー名として使おうとしているので、メールアドレスが“`データベース内で重複することのないようにする“`必要もあります。

要するに、nameとemailにあらゆる文字列を許すのは“`避ける“`べき。
これらの属性値には、何らかの制約を与える必要があります。
Active Record では検証(Validation)という機能を通して、こういった制約を課すことができるようになっています。
ここでは、よく使われるケースのうちのいくつかについて説明します。
それらは存在性(presence)の検証、長さ

元記事を表示

railsチュートリアル第6章 ユーザーオブジェクトを更新する

###ユーザーオブジェクトを更新する
基本的な更新の方法は2つです。

“`rb
>> user = User.new(name: “Michael Hartl”, email: “michael@example.com”)
=> #
>> user
=> #
>> user.email
=> “michael@example.com”
>> user.save
(0.1ms) SAVEPOINT active_record_1
User Create (1.8ms) INSERT INTO “users” (“name”, “email”, “created_at”, “

元記事を表示

「1 – 20 / 35件 < >」のような日本語ページネーションの追加[Rails, kaminari]

## はじめに

以下のようなページネーションを作成しました。
実現したコードを記載したいと思います。

![スクリーンショット 2021-09-24 17.34.36.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/779676/e9242459-7e07-52f7-80dc-b8ed9e46e2f9.png)

## コード

“`html:app/views/tests.html.erb
<%= page_entries_info @tests %>
<% if @tests.total_count > @tests.limit_value %>
<%= link_to '<', path_to_prev_page(@tests) %>
<%= link_to '>‘, path_to_next_page(@tests) %>
<% end %>
“`

“`ruby:app/controllers/test_controller.rb
def index
@tests = Tes

元記事を表示

【Rails】DMが届いた際の通知機能を実装する

# はじめに

下記2つのQiita記事を参考にして、

* いいね
* コメント
* フォロー
* DM
* ブックマーク

された時に通知される機能を実装しました。

当記事では、**`DMの通知機能`**について
基本文法でつまづいたので、学習記録として残しています。

なお、コントローラーとモデルで分けて
実装していますので、似た構成にしたい方の参考になれば幸いです。

初学者のため、投稿内容に至らない点がありましたら、申し訳ございません…
修正が必要な箇所があれば、コメントなどでお知らせください。

# 参考記事(2つ)

https://qiita.com/nekojoker/items/80448944ec9aaae48d0a

https://qiita.com/facultyoflaw11/items/538862befd327e8dc918

# 前提

・DM機能を実装済み

# 実装前に考える…

まず、通知画面のViewで

* 通知を受け取るユーザーに何を情報として伝えたいか
* どこに画面遷移させると使いやすいか

の2点に留意しないといけません。

元記事を表示

本番環境で背景画像を表示

#課題
ローカル環境で表示できていた、背景画像が本番環境では表示されなくなった。調べてみたところ、アセットパイプラインにおいてエラーが発生していると分かった。備忘録として記録。
#行なったこと
####1.画像配置場所の変更
変更前:`app/assets/images/back.png`
変更後:`public/images/back.png`
####2.image-url( ) の利用
`css`を`scss`に変更し、`url(“back.png”)`を`image-url(“back.png”)`に変更。

“`index.scss
.main{
background-image: image-url(“back.png”);
}
“`
####3.本番環境でアセットパイプラインが自動で通るように設定を変更
変更前↓

“`config/environments/production.rb
config.assets.compile = false
“`

変更後↓

“`config/environments/production.rb
config.asse

元記事を表示

【Ruby on Rails】Captureメソッドを使ってテンプレート化をする方法

#対象者

* captureメソッドを使用したことない人
* テンプレート化を簡単に実行したい人

#目的

* captureメソッドを使用することで簡単にテンプレートを作成する

#実際の手順と実例
###1.captureメソッドとは

> captureメソッドを使用することで、テンプレートの一部を変数に保存することができます。保存された変数は、テンプレートやレイアウトのどんな場所でも自由に使用できます。
※Railsガイド参照

使ってみると使いまわしたい文章や表を簡単にテンプレート化できるなと考えて、使ってみました。

###2.メソッドの使い方

““index.html.erb
<% @greeting = capture do %>

ようこそ!日付と時刻は<%= Time.now %>です

<% end %>
““

この時点では、ページに表示されません。
あとは<%= @greeting %>を自分の好きな箇所に設置すればOKです!

#参考にさせて頂いた記事

* [Railsガイド 6.5 CaptureHelper](htt

元記事を表示

Ruby と Rails のバージョン表

##自分用にRailsとRubyの対応用表まとめてみたよ
|RailsVersion|必須Ruby|推奨Ruby|RubyGem|
|—|—|—|—|
|6.2.0|>= 2.5.0|3.0.x|>= 1.8.11|
|6.1.x|>= 2.5.0|3.0.x|>= 1.8.11|
|6.0.x|>= 2.5.0|2.6.x|>= 1.8.11|
||< 3.0.0||| |5.2.x|>= 2.2.2|2.5.x|>= 1.8.11|
||< 2.6.0||| |5.1.x|>= 2.2.2|2.5.x|>= 1.8.11|
||< 2.6.0||| |5.0.x|>= 2.2.2
< 2.5.0|2.4.x|>= 1.8.11|
|4.2.x|>= 1.9.3|2.2|>= 1.8.11|
|4.1.x to 4.2.0|>= 1.9.3|2.1|>= 1.8.11|
|4.0.5 to 4.1.0.rc2|>= 1.9.3||>= 1.8.11|
|4.0.0 to 4.0.x|>= 1.8.7||>= 1.8.11|
|3.2.x|1.8.7|2.2|>

元記事を表示

OTHERカテゴリの最新記事