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

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

Ruby if, else問題

# if, elseを使ってプログラムを作成します

条件は以下の通りです。
– 条件1:メソッドの実引数として「1以上の正の整数」を3つ用意し、それぞれを仮引数a,b,c としてnumメソッド内で使用する
– 条件2:第一引数と第二引数は足し算をし、変数abに代入する
– 条件3:第三引数が3以下の場合は変数abを第三引数の値で割り、結果を出力する
– 条件4:第三引数が4以上の場合は変数abを第三引数の値で掛け、結果を出力する
※小数点以下の出力は考慮しなくてかまいません。

模範解答
“`ruby
def num(a, b, c)
ab = a + b
if c <= 3 puts ab / c else puts ab * c end end # 呼び出し例 num(1,5,3) ``` ```:ターミナル 2 # ab = 1 + 5 = 6 # 6 / 3 = 2 ``` ## 解説 条件2に、第一引数aと第二引数bを足したものを変数abに代入するとあるので、その式を2行目に記述します。 if文には第三引数cが3以下の

元記事を表示

【Rails】belongs_toのバリデーションと外部キー制約についてまとめてみた

# 概要
以下のような`User`を親モデルにもつ`Post`モデルについて
`post.user_id`をデータベースに存在しない`User`の`id`や`nil`でセットして保存しようとするとバリデーションエラーが走ります。
“`ruby
class CreatePosts < ActiveRecord::Migration[7.0] def change create_table :posts do |t| t.references :user, null: false, foreign_key: true t.timestamps end end end ``` ```ruby class Post < ApplicationRecord belongs_to :user end ``` ```ruby post = Post.new(user_id: 1) # idが1のUserはまだ作られていないとする post.save # => false
post.errors.messages
# => {:user=>[“を

元記事を表示

Routing Error(uninitialized constant HomesController Object.const_get…)の解決について

# 概要
railsのタグ機能の練習がしたくて、railsの環境を構築しましたが、routingのエラーが起きたので解決の方法を記述します。

# 環境
rails 7.0.4.2
ruby 3.1.2
AWS
cloud9
mac

# エラーの意味
エラー文を[deepl](https://www.deepl.com/ja/translator#en/ja/uninitialized%20constant%20HomesController%20Object.const_get(camel_cased_word)%20%5E%5E%5E%5E%5E%5E%5E%5E%5E%5E%20Did%20you%20mean%3F%20HomeController%20raise%20MissingController.new(error.message%2C%20error.name)%20%5E%5E%5E%5E%5E)で検索します。

uninitialized constant HomesController Object.const_get(camel_cased_word) ^^

元記事を表示

【RSpec】RSpecの導入

# はじめに

Railsなどを中心に勉強中のエンジニア初心者が他の記事を参考にしたり、実際に実装してみたりして、アウトプットの一環としてまとめたものです。
間違っていることもあると思われるので、その際は指摘いただけると幸いです。

# RSpecのGitHub

https://github.com/rspec/rspec-rails#rspec-rails–

# rspecのインストール

### Gemfileへの記載

`Gemfile`に下記の通り追記する。

Railsのバージョンに合わせてどのバージョンの`rspec`をインストールするかは、`GitHub`上で確認することができる。

テストデータを作成するための`Factory_Bot`という`Gem`も、テストを実行する際によく使用するため一緒にインストールすることが多い。

“`ruby
group :development, :test do
gem ‘rspec-rails’, ‘~> 4.0.0’ #Rails 5.xでRspecを使用する場合、このようにバージョン指定する。
gem ‘fact

元記事を表示

rails deviseを使った論理削除と、垢BANさせる機能と復活させる機能

# 管理者側で、会員ステータスを思うがままにする
論理削除で退会したユーザーのデータは残っています。なので、退会したユーザーを復活させることが可能。

チーム開発で管理者権限で垢BANさせる機能の実装ができなかったので、ポートフォリオで実装してみました。そして、復活させることもできます。神ですね。

## 前提

– deviseで、管理者側と、会員側のpublicで分けて実装している。
– データベースにbooleanのデータ型で、default: falseの会員ステータスを作成している。
– public(user)側で退会機能を実装してある。

### routes.rb
namespace :admin do
:
:
ユーザーを退会させる :idでユーザーのIDが取得できる。
patch “withdrawal/:id” => “users#withdrawal”, as: “withdrawal”
end

### controllers/admin/users_controller.rb

元記事を表示

【Rails】3種類のラベルのうち1つは必ず選択(バリデーション)

## はじめに
現在webアプリ制作に携わらせていただいている中で調べて学んだことをアウトプットしていきたいと思います。
よろしくお願いいたします。

## 開発環境
Rails 6.0.3
Ruby 3.0.1

## 参考記事
[Active Record バリデーション](https://railsguides.jp/active_record_validations.html)
[Railsで特定の条件下で走るバリデーションを作りたい](https://qiita.com/tmzkysk/items/a0c874715ba38eb23350)

## どうしたいか
新規質問投稿時に、3種類のタグから当てはまるタグを複数選択できるようになっているが、`「投稿時にタグを1つは必ず選択させる」`ようなバリデーションを構築したい。

## ER図
questionsテーブルにlabelsテーブル、categoriesテーブル 、kindsテーブルがそれぞれ多対多の関係で紐づいています。
![Qiita.png](https://qiita-image-store.s3.ap-nort

元記事を表示

Railsアプリのローカル開発環境をスマホでも簡単に見られることを今更知ったので仕組みも理解する

## 困ったこと
Railsアプリを開発していて、スマホでの動きはブラウザの開発環境でスマホにして見るくらいしかできないと思い込んでいた。
stagingにデプロイする前にスマホで見られたら便利なのに…と思ってたら、そうか、できるんですね。

## 実装!
操作自体は簡単。
1. Railsアプリ`rails s -b 0.0.0.0`で起動

2. PCのIPアドレスを確認。
macは`システム設定`→`ネットワーク`→接続されているWiFiなどの詳細に書いてある。

3. PCと同じネットワークに繋がっているスマホで、Chromeなどのブラウザを開いて、そのIPアドレスにポート番号を付与してアクセス。

## 仕組みを理解する

まずrailsサーバーを起動するところがいつもと違うので頭を整理。
-bオプションを使っている。

“`terminal
→ rails s -b 0.0.0.0
=> Booting Puma
=> Rails 6.1.3.1 application starting in development
=> Run `bin/rails server

元記事を表示

【TechCamp】受講を終えてからの感想や

# はじめに
– 本記事は、個人の感想や定量的でない内容が含まれたりします。
– また記載内容はすべて、正しい内容が記載されているとは限りません。
– 誤った内容を見つけた場合は、ご指摘をお願いいたします。

# この記事は誰向けの記事か?
– プログラミングスクールの受講を考えている人
– TechCampを受講している人
– TechCampを受講し終えた人

# 私自身について
私は30歳の元ITエンジニア(2023年2月時点)です。以前の職場では、製造業向けのアプリケーション開発現場で約2年、製造メーカーの社内SEとして約2年勤めていました。そのため未経験というわけではなく、経験者という立ち位置で参加させていただきました。元々は仕事と並行しつつ、Webアプリケーションの開発経験を積めるスクールに通いたいなと考えていたのですが、脳の疾患に罹患し、仕事をリタイアしてしまいました。完治するかは未定ですが、今後もITエンジニアとして仕事をしていきたい、という思いもあり、TechCampへ参加することにしました。

# 受講プラン
私が受講したプランの情報は以下のとおりです。
– 短期集

元記事を表示

Railsで新規アプリケーションを作成

## はじめに
アプリケーションを新規作成する時の最初の手順を備忘録として記録しておきます。
## ターミナルで新規作成
**【ターミナル】**
“`terminal
% rails _(railsのバージョン)_ new (アプリケーション名) -d mysql
“`
## 文字コードの変更
必要があれば、文字コードを変更しておきます。

**【config/database.yml】**
“`diff_ruby
default: &default
(省略)
– encoding: utf8mb4
+ encoding: utf8
(省略)
“`
※文字コードを変更するのは何故か?
utf8:1〜3バイトまで対応
utf8mb4:1〜4バイトまで対応
文字化けを起こす可能性があるので、変更する必要がある場合が存在します。

## データベースの作成
ターミナルにて、データベースの作成を行います。

**【ターミナル】**
“`terminal
% rails db:create
“`

## ローカルホストで挙動確認
最後に、ローカルホストで、新規作成した

元記事を表示

【Rails+dynamodb-local 】配列型でカラムを保存したい

# はじめに
こちらの記事に続きになります。

https://qiita.com/does_not_exist/items/19c35639e466844e8b0e

https://qiita.com/does_not_exist/items/23a70dab286ed146b05f

dynamodb-localに保存されたレコードを確認すると、配列として保存されてほしいデータが文字列になっていました。
フロントから配列としてデータを受け取れていたので、dynamoidの設定を見直してみることにしました。

“`backend/app/models/hoge.rb
class Hoge
include Dynamoid::Document

table name: :hoges, key: :id, capacity_mode: :on_demand
field :title, :string
field :comments, :string ,array: true

end
“`

modelを確認すると、配列型の宣言が間違っていました。
dynamoid

元記事を表示

【Rails】後から id 列を追加したい

`id: false` で作成したテーブルに対して、やっぱり id を追加したいってなることもありますよね。

そんなときは以下のマイグレーションで追加できます。

“`rb
class AddIdToUsers < ActiveRecord::Migration[6.1] def change add_column :users, :id, :bigint, primary_key: true, auto_increment: true, null: false, first: true end end ``` これで以下のようなマイグレーションが実行されます。 ```ruby Migrating to AddIdToUsers (20230215062132) == 20230215062132 AddIdToUsers: migrating ======================= -- add_column(:users, :id, :bigint, {:primary_key=>true, :auto_increment=>true, :null=

元記事を表示

Ruby sliceメソッド

# sliceメソッド
配列や文字列から、指定した要素を取り出すことができるメソッドです。

“`ruby:例
# 配列を作成します
array = [0,1,2,3,4,5,6]

# 配列から引数で指定した要素を取得します
ele1 = array.slice(1)
puts ele1
#=> 1 # 0番目から始まるため、1が取り出されました

# 配列番号-4から4つ分の要素をsliceします
ele2 = array.slice(-4,4)
puts ele2
#=> 3, 4, 5, 6

# 配列はもとのままです
puts array
#=> [0,1,2,3,4,5,6]
“`

# sliceメソッドを使って指定した文字列を取り出すプログラムを作成します

条件は以下です。
– 条件1:対象の文字列から末尾にある2文字を取得すること
– 条件2:取得した2文字を3回繰り返して出力すること

“`ruby:模範解答
def extra_end(str)
right2 = str.slice(- 2, 2)
puts right2 * 3
end

#

元記事を表示

【Ruby on Rails】validationの冗長をなくす方法

# 前提条件
– Ruby 3.1.0
– Rails 7.0.4

# 背景
全てのカラムに対して同じバリデーションを設定すると、下記のように同じ記述が繰り返され冗長性がある状態である。
“` ruby:User.rb
class User < ActiveRecord::Base validates :name, presence: true #冗長性あり validates :email, presence: true #冗長性あり validates :age, presence: true #冗長性あり validates :password, presence: true #冗長性あり end ``` # やりたいこと バリデーションの冗長性をなくしたい。 # 方法 ### with_optionsブロックを使う 下記のようにwith_optionsブロックでpresenceをまとめることで、ブロック内のカラムすべてに適用されるようになる。 ``` ruby:User.rb class User < Active

元記事を表示

Gem fileにてGemを取り込む方法 Gemfile.lockの説明

使用しているVer ruby 2.6.5 Rails 6.0.6.1

○Gemとは?
誰かが作ったものを活用するために、Gemが存在します。
プログラマーでよく言われる言葉で、「車輪の再発明をしない」
この言葉の元Gemというものがありそういったもの総称をライブラリーとも言います。
ライブラリーは有名な言語であれば必ず存在します。

○早速Gemを取り込んでいきたいと思います

まずGem fileにてGemの名前を書き込みます。
 今回はfakerを取り入れます。
 

下記をGem fileに記入

gem ‘faker’
ターミナルにて、

$ bundle install

と実行。※$は記入しません。
以上でfakerのダウンロード完了です?

・READMEのドキュメントに使い方やインストールのやり方が記入されています。
https://github.com/faker-ruby/faker
もし、他にも取り入れたいgemがあれば、READMEを参考に使用するか
全て英語で分かりづらい時は、有名なgemであれば検索して日本語で出てくるかと思

元記事を表示

【Rails】Blocked host 解消法

## 状況

任意のホスト名を指定してアクセスしようとした際に次のようなエラーが発生しました。

“`
Blocked host: sample-host.com
To allow requests to sample-host.com, add the following to your environment configuration:
config.hosts << "sample-host.com" ``` ## 解消法 次のように`config/environments/development.rb`に追加しホストを許可することで解消します。 ```rb:development.rb Rails.application.configure do config.hosts << "sample-host.com" end ```

元記事を表示

【Ruby on Rails】ルーティングのネストで発生するActionController::UrlGenerationErrorの解消方法

# 前提条件
– Ruby 3.1.0
– Rails 7.0.4

# エラー事象
ルーティングのネストは正しく記述されているはずなのに、Prefix`new_user_food_path`が利用できない。ActionController::UrlGenerationErrorが発生する。
“` ruby:config/route.rb
resources :users do
resources :microposts
end
“`
“` user/show.html.erb

<%= link_to "新規投稿", new_user_micropost_path %>

“`
# 原因
### new_user_micropost_pathの引数にユーザ情報がなかった
`$ rails routes`でルーティングをよく見ると、
`new_user_micoropost`のURI Patternは`/users/:user_id/~`、
`user`のURI Patternは`/users/:_id/~`

元記事を表示

これでrailsのサーバーが立ち上がらない

# 概要
rails sしてサーバーは立ち上がったが、このようなエラーがターミナルで出る。
解決はすぐだったので書きます。

# 環境
rails 7.0.4.2
ruby 3.1.2
AWS
cloud9
linux
mac

# 解決法
もう一発で書きます。
gemに
“`rails:Gemfile
gem ‘sqlite3’
“`

これを足してbundle install。これで解決。
意外とgemfileは見落としてしまうので、しっかり確認することは初歩的ですが大事だと思いました。

元記事を表示

rails sできない!

# 概要
rails sでサーバーを起動しようとしたのですが、できませんでした。
解決までの道のりをメモ的に記します。初心者向けですので、詳しい方で「もっと良い解決法がある」「その方法はダメだ」ということがあればご指摘ください。

# 起こったこと
“`rails:ターミナル
ec2-user:~/environment/アプリ名 (main) $ rails s
=> Booting Puma
=> Rails 7.0.4 application starting in development
=> Run `bin/rails server –help` for more startup options
Exiting
/home/ec2-user/.rvm/gems/ruby-3.1.2/gems/bootsnap-1.12.0/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:15:in `require’: cannot load such file — listen (LoadError)
~
~
~
`

元記事を表示

bundle installできない!

# 概要
railsチュートリアルで学ぼうとして、環境を構築している最中に起こったことです。
解決までの道のりを自分なりにまとめていきます。

# 環境
mac
AWS
cloud9
linux

# 起こったこと

“`rails:ターミナル
ec2-user:~/environment/アプリ名 (main) $ bundle _2.3.14_ install
Fetching gem metadata from https://rubygems.org/……….
Resolving dependencies…
Bundler could not find compatible versions for gem “activesupport”:
In snapshot (Gemfile.lock):
activesupport (= 6.1.7.2)

In Gemfile:
j

元記事を表示

Railsからdynamodb-localにレコードを作成したい

# はじめに
railsからdynamodb-localにレコードを作成しようとしたところ、以下のエラーが発生しました。

“`
NameError (undefined local variable or method `options’ for #)
“`

これはmodelでApplicationRecordを継承していたことが原因でした。

classに記載している「< ApplicationRecord」を削除して再度レコードを作成すると成功しました。 以下が正しいコードです。 ```backend/app/models/hoge class Hoge include Dynamoid::Document table name: :hoges, key: :id, capacity_mode: :on_demand field :title, :string 略 end ``` ``` > Hoge.create(id: ‘1’, title: ‘test’)
“`

# おわりに

元記事を表示

OTHERカテゴリの最新記事