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

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

【Rails】Herokuデプロイ時のbundler エラー

# Herokuへのデプロイ時にエラー発生
rails アプリをHerokuにデプロイしてHerokuを
開こうとしたが、開かず。

“`
BUNDLED WITH
2.2.17
“`

gemfileのbundelerの記述を削除したら解決。

Herokuで使用するbundlerのバージョンと
開発環境で使用するbundlerのバージョンの
差異が原因?かも

以上

元記事を表示

さくらvpsにRailsアプリをデプロイするまで (1) 各種設定

# 0.でぷろいまで
 ついに個人アプリが形になった。つぎはデプロイまですることにした。HerokuやAWSを使う方法があるが、前者は速度が遅いし、後者は金額が高すぎる。AWSには無料枠があって、サービスの種類によってはアカウント取得から1年間無料で利用できるものもあった。しかし、私はすでにアカウントを開設してからしばらくの年月が経っていたのでできない。

 ちょっとかんがえてさくらvpsを使うことにした。月額1000円程度で使えるみたいだし、独自ドメインの設定やhttpsの設定もできるらしい。やっていこう。

 アカウントを取得した。

https://vps.sakura.ad.jp/

# 1.サーバーの設定
 もろもろのやりかたは公式に書いてある。

https://knowledge.sakura.ad.jp/8218/

## 1-1.やっていこう

#### rootログイン

さくらvpsサーバーを起動したら、ターミナルに打っていく。

“`terminal
$ ssh root@xxx.xxx.xxx.xxx
“`

xxx.xxx.xxx.xxxにはサーバーの

元記事を表示

(独習Ruby on Rails)フォームオブジェクトを利用したバリデーション

# 概要
ある程度勉強を進めていたけれど、あまりにも基礎が不足しているので書籍「独習Ruby on Rails」をやり始めたのだけれど、フォームバリデーションのところでサンプルコードどおりに入力しても全然動かなかったのでその対応をメモとして残す。

## 環境
・Rails 7.0.2.2
・ruby 3.0.0
・macOS Monterey 12.2.1

## フォームオブジェクトによるバリデーション

### 例題概要
– 書籍の例題としてはフォームオブジェクトを利用したバリデーションで利用規約のチェック機能を実現するというもの。
– チェックボックスではなくテキストフィールドに’yes’と入力した場合に正常形として画面遷移し、それ以外はエラーを表示するというもの。

(サンプルイメージ)

![スクリーンショット 2022-03-17 0.08.44.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/600163/c88626c1-2a4c-0716-8891-ef83c8487f98.png)

元記事を表示

rails db:reset コマンドの挙動について

# はじめに
1月〜プログラミングスクールで学習しています。
これから平日は~3/25まで毎日何かしらアウトプットのため投稿を続ける予定です。
rails db:resetコマンドを実行した際に疑問に思った事があったのでメモを残します。
※Ruby2.6.5の環境を使用し学習しています。

# 経緯
以前書いた`rails db:migrateを実行した時に出たエラーを解決した話`で書いていなかったのですが、
`rails db:reset`を実行後、再度`rails db:migrate`を実行してしまい、何も出力されずプロンプトが返ってきました。
そこで`rails db:reset`が気になり調べてみました。

# 調べた結果
結論としては下記のような動きをしているようです。
[4.3 データベースをリセットする](https://railsguides.jp/active_record_migrations.html#%E3%83%87%E3%83%BC%E3%82%BF%E3%83%99%E3%83%BC%E3%82%B9%E3%82%92%E3%83%AA%E3%82%BB

元記事を表示

【Heroku】データベース作成

# Herokuにデータベースを作成する。
railsアプリをデプロイしたがエラー発生

“`
2022-03-16T11:32:52.061551+00:00 app[web.1]: [53d442bd-fd35-4dfb-9c9f-eb1fc62006c8] ActionView::Template::Error (PG::UndefinedTable: ERROR: relation “users” does not exist
“`

userテーブルが見つからないよと

## Herokuでもデータベースを作成
ローカルでデータベースを作成するのと同じように
Herokuでもデータベースを作成しないといけないみたい

“`
$ heroku run db:migrate
“`
モデルを作成、変更したら忘れないように

以上

元記事を表示

【Rails】 scaffoldを使ってアプリ作成。

# scaffold を使用をしてアプリ作成。
railsを知るためにscaffoldをつかって簡単にアプリを作ってみる。

## scaffoldとは
モデルやコントローラー、ビューを作っていき、さらに必要なルーティングを作成してくれる便利なものです。

### どうやるか
“`
$ rails g(generate) scaffold <モデル名(単数)> <属性 例:name:string,email:integer>
“`

上記のコマンドで MVCとルーティングができるんです。

model作成後は
“`
$ rails db:migrate
“`
で、migrationファイル(データベースの設計書)の作成
を忘れないように

以上

### 参考文献

覚えておくと超便利!Ruby on Railsのscaffoldの使い方【初心者向け】

https://qiita.com/jackie0922youhei/items/09a7b081e40506f07358

元記事を表示

Mailcatcherインストール時のエラー

# 環境

Mac OS Monterey 12.3
Ruby on Rails 7.0.2.2

# Mailcatcherがインストールできない

Mailcatcherはsmtpサーバを立てて、Mailerで送信するメールをブラウザ上で確認することができるgemです。

Mailcatcherは`bundle`コマンドでインストールすると正常に動作しないとのことで、
“`
$ gem install mailcatcher
“`

を実行しました。

しかし、エラー。。。

“`
Building native extensions. This could take a while…
ERROR: Error installing mailcatcher:
ERROR: Failed to build gem native extension.

current directory: /Users/xxxx/.rbenv/versions/3.1.0/lib/ruby/gems/3.1.0/gems/thin-1.5.1/ext/thin_pa

元記事を表示

【Ruby on Rails】Skipprでスライドショー【Rails6】

地球の皆さんこんにちは。
今回はこの私が何故かできなかった、Skipprとやらを使ってスライドショーの実装を始めていきましょう。
ですが、残念ながら、あなた方にはここで死んでもらいます。
喰らいなさい!!パンチ!!!

何!?効いていない!?まさか!貴様!

なるほど。そういうことですか。

それでは、やっていきましょう。

# Skipprプラグイン

プラグイン!!〇ックマンEXEトランスミッション!!!
よし!まずはSkipprをインストールするよ!熱斗くん!!

[Skipprサイト](http://austenpayan.github.io/skippr/)

まずは、上記サイトに遷移。そしてGithubのリンクをクリックです。Gitのリポジトリに移動するはずです。

移動したら、「Clone or download」をクリックそして「Download ZIP」をクリックしましょう。zipファイルがダウンロードされるはずです。

ダウンロードしたZIPファイルを解凍しましょう。***炎の呼吸 奥義 玖ノ型 煉獄!!***
あ、できない方は普通に解凍しましょう。

解凍された

元記事を表示

【Ruby】指定日付内のランダムな日時を取得する

## 結論

rand関数で取得できます。
クラスに関係なく使えて便利。

“`ruby
# DateTime(時間は0時0分で固定の様子)
> datetime_from = DateTime.parse(‘2022-01-01 00:00:00’)
> datetime_to = DateTime.parse(‘2022-12-31 00:00:00’)
> rand(datetime_from..datetime_to)
=> Sat, 30 Apr 2022 00:00:00 +0000

# Time(ミリ秒まで細かくランダムにしてくれる)
> time_from = Time.parse(‘2022-01-01 00:00:00’)
> time_to = Time.parse(‘2022-12-31 00:00:00’)
> rand(time_from..time_to)
=> 2022-12-05 14:34:05 113996677/134217728 +0000

# ActiveSupport::TimeZone(秒まで)
> timezone_fro

元記事を表示

【Rails】ラジオボタンのラベルにクリック判定をつける

## はじめに
:::note warn
Rails学習のアウトプット記事です。実装の際は参考サイトも併せてご確認ください。
:::

 Ruby on Railsの学習中にて、フォームヘルパー機能を使ってラジオボタンとラベル(キャプション)を実装する際、ラベルとボタンが紐づいておらず、ラベルをクリックしても反応しなかった。
 HTMLだとlabelタグでボタン自体を囲ってしまう方法があるそうだが、フォームヘルパーでラベルを生成する場合はfor属性を使ってボタンを指定する必要がある為、その記述方法を書いていく。
## 開発環境
– Rails 5.2.6
– Ruby 2.6.3
###
## 実装
### 前提条件
– **form_with**を使用
– 記事内で使用されているモデル・値は以下の通り

項目|値
-|-
モデル名|Test
カラム名|status
カラム型|Boolean
### 生成されるHTML(ラジオボタン部分のみ)
“`html
【初心者】ルートのルーティング設定

# 目的
Railsチュートリアル学習の備忘録として

## ルート(root)
Railsアプリを作成し、起動した後「http://localhost:3000/」
などのローカルホストにアクセスすると呼び出される

## ルーティング(route/routing)
URLとアクションを結び付けること

# ルートのルーティング設定とは
簡単に言うと、一番最初に表示されるページ(ルート)を指定(ルーティング設定)しちゃおうということです!

# 設定方法
設定方法は簡単で
「config/routes.rb」のファイルを編集し、ルートに結び付けたいアクションを以下のように設定するだけです!
“`ruby:config/routes.rb
root ‘コントローラー名#アクション名’
“`

たとえば
「applicationコントローラー」の
「helloアクション」をルートに結び付けたい場合は、、
“`ruby:config/routes.rb
root ‘application#hello’
“`
こう設定すると、
「http://localhost:3000/」
にアク

元記事を表示

Rubyで複数の配列を比較して重複の値を取り出したり、排除したりする方法

## 概要
今回は`Ruby`で**複数の配列**を比較して重複する値を取り除いたり、重複する値のみを抽出したりする方法を調べたのでメモとして残しておきます。

## やり方
### 重複した値を抽出

“`ruby
a = [1, 2, 3, 4]
b = [3, 4, 5, 6]

a & b
# => [3, 4]
“`

### 重複した値を取り除く

“`ruby
a = [1, 2, 3, 4]
b = [3, 4, 5, 6]

a – b
# => [1, 2, 5, 6]
“`

元記事を表示

controllerの作成・削除の方法

# controller 作成
“`
$ rails generate controller StaticPages home help
“`

#controller 削除

controller名を間違えてしまった時は
“`
$ rails destroy controller StaticPages home help
“`

で一旦削除というのも1つの手

以上

元記事を表示

アプリ新規作成

# Rails アプリ新規立ち上げ

railsがインストールされていることを確認
“`
$ rails -v
“`

### 返ってきたバージョンで立ちたげる

“`
$ cd <作成したいディレクトリ>
$ rails new <バージョン> <アプリ名>
“`

ズラーとディレクトリやらファイルやら作成される。

rails アプリ立ち上げ完了

以上

元記事を表示

warning ../../package.json: No license field の解決法

# はじめに
Railsチュートリアルを学習中、
rails s を実行すると
“`
warning ../../package.json: No license field
“`
このエラーがずっと表示されていました。(ローカルでのサーバーは起動する)

気になったので、解決法を調べました!

# バージョン
Ruby 2.6.3
Rails 6.0.4

# 結論
まず結論から書きます!
“`
rm -rf yarn.lock
“`

を実行するとエラーが解消されました!

今回はyarn installが適切に行われていないために表れたエラーでした。
yarn.lockのコンフリクトを解消することでエラーが解消されました。

# 解決までに試したこと
warning ../package.json: No license fieldでは
ライセンスが設定されていないということなので、
ググってみると、主に下記の解決法がヒット!

– package.jsonに適切なlicenseをセットする。
– package.jsonに”license”: “UNLICE

元記事を表示

エラー対応 -備忘録

# 環境
* macOS Monterey 12.0.1
* Ruby 2.6.3
* Bundler 2.2.17
* Rails 6.0.4.7

## エラー内容
“`
ubuntu:~/environment/hello_app (master) $ rails s
=> Booting Puma
=> Rails 6.0.4 application starting in development
=> Run `rails server –help` for more startup options
warning ../../package.json: No license field
Puma starting in single mode…
* Version 4.3.6 (ruby 2.6.3-p62), codename: Mysterious Traveller
* Min threads: 5, max threads: 5
* Environment: development
* Listening on tcp:

元記事を表示

Railsのシステムテスト(Minitest)で「期待どおりに404エラーが発生したこと」を検証する方法

Railsのシステムテスト(Minitest)で「期待どおりに404エラーが発生したこと」を検証する方法が意外と厄介だったので説明します。

### 対象バージョン

– Rails 6.1.5
– Capybara 3.36.0
– selenium-webdriver 4.1.0

### おことわり

この方法がベストなのか自信がないので、もっといい方法を知っている人がいたらコメント欄等教えてください?

## 404エラーの発生を検証したいユースケースの例

– ログイン済みユーザーしか表示させたくないページに、未ログインのユーザーがアクセスしてきた場合に404エラーを返すことをシステムテストで検証したい

302リダイレクトでトップページに遷移し、「ログインしてください」のメッセージを表示する、という挙動もありそうですが、ここではあえて404エラーを表示するものとします。

## ベースとなるテストコード

ここでは以下のようなテストコードを書いたものとします(上で書いたユースケースとは関係のない、単なる動作確認用のテストコードです)。

“`ruby
require “

元記事を表示

グループ登録機能を追加してみた:改

前回deviseを使ってgroup機能の登録を試みたが、中間テーブルに保存されないという現象が起きてしまった。
3時間考えた末、いい解決方法が見つからなかったので、思い切って1から作り直すことに。

### 今回試みた事
* group機能の実装はdeviseではなく、“rails g model group“を使用する
* カラムにはパスワードを設定する

### 手順
まずはモデルの作成

“`:ターミナル
rails g model group
“`

次に必要なカラムを記述。
“`ruby:db/migrate/xxxxx_create_group.rb
class CreateGroups < ActiveRecord::Migration[6.0] def change create_table :groups do |t| # 以下の3行を追記 t.string :group_name, null: false, default: "" t.string :password_digest, null: false, def

元記事を表示

Railsの開発環境でAWSサービスを使うとminioの設定とAws.configの競合が発生する

# まとめ

ローカルの開発環境でminioを使いながらAWSのcredentialを同時に扱うことは難しそう

なので、各サービスのクライアント生成時にcredential情報を渡すことになるかも

`config/initializers/aws.rb`

“`rb
creds = Aws::Credentials.new(
Rails.application.credentials[:aws][:access_key_id],
Rails.application.credentials[:aws][:secret_access_key]
)

region = Rails.application.credentials[:aws][:region]

Aws.config.update(
region: region,
credentials: creds
)
“`

と宣言しておき

“`rb
def client
conf = Aws.config
access_key_id_sym = Rails.env.develop

元記事を表示

メタプログラミングRuby クラス定義について

## クラス定義
クラスにはメソッド以外にもあらゆるコードを記述できます。
“`
class Example
puts ‘Hoge!’
end #=>Hoge!

result = class Example
self
end

result #=> Example
“`
クラス定義の中では、クラスがカレントオブジェクトになるんです。つまりselfになるんです。

### クラスインスタンス変数
クラス定義の中で定義されたインスタンス変数のことをクラスインスタンス変数といいます。
実際にコードを見ていきましょう
“`
class Example
@var = 1
def self.read; @var; end
def write; @var = 2; end
def read; @var; end
end

obj = Example.new
obj.read #=> nil
obj.write #=> 2
obj.read #=> 2
Example.read #=> 1
“`
1つ目の“`@var“`は“`obj“`がselfになるんです。

元記事を表示

OTHERカテゴリの最新記事