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

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

文字列の結合の種類

RubySilverの勉強中、文字列の結合のメソッドがいくつか出てきたので備忘録として記していきます。
##文字列の結合
文字列を結合する方法は主に + 演算子とconcatメソッド、<< の3種類あります。 concatと << は破壊的メソッドなのに対し、 + 演算子は非破壊的メソッドです。 ### + 演算子の使い方 ```ruby:例 s1 = Leo s2 = Messi puts s1 + s2 # => LeoMessi
“`

### concatの使い方
“`ruby:例
s1 = Leo
s2 = Messi

s1.concat(s2)

puts s1
# => LeoMessi
“`

### << の使い方 ```ruby:例 s1 = Leo s2 = Messi s1 << s2 puts s1 # => LeoMessi
“`

参考記事
[【Ruby】concatを使って文字列や配列を結合する](https://style.potepan.com/articles/27074.html)

元記事を表示

RSpecの導入と単体テストコードを書く

#①.nicknameに対するバリデーションを設定

サンプルアプリを例として、事前準備します!

実装時においては、nicknameに対してバリデーションを設けていません!

今回はバリデーションに関するテストを実装します!

そこで、「nicknameを入力しないと、ユーザーが登録できない」というバリデーションを設定します!

user.rbを開き、以下のように記述します!

“`php:app/models/user.rb
class User < ApplicationRecord # Include default devise modules. Others available are: # :confirmable, :lockable, :timeoutable, :trackable and :omniauthable devise :database_authenticatable, :registerable, :recoverable, :rememberable, :validatable has_many :eats h

元記事を表示

Macで.devドメインに繋げない場合の対処法

Macのブラウザから `http://lightship.dev` に接続しようとすると403が出たので調べました。
.devドメインがlocalhost(127.0.0.1)を指してたので、以下の手順で解決しました。

### 修正手順

ターミナルで、次のコマンドを入力します。

`cd /etc/resolver/ && ls`

Enterキーを押したときにエントリ名が表示された場合、これはワイルドカードリゾルバであり、.devドメインへのアクセスのすべての試行を127.0.0.1にポイントしている可能性があります。

これは以下のコマンドで削除できます。

`sudo mv dev dev.ignore`

これで.devドメインにアクセスできます。

元記事を表示

railsチュートリアル第13章 User/Micropostの関連付け

###User/Micropostの関連付け

####マイクロポストがユーザーに所属する関連付け
app/models/micropost.rb

“`rb
class Micropost < ApplicationRecord # ApplicationRecordを継承したモデルが作られます belongs_to :user # userモデルとの間に「1対1」のつながりが設定 # 割り当てる validates :user_id, presence: true # presence これは存在するか # presenceメソッドはオブジェクトが存在すればそのオブジェクトを返し、 # オブジェクトが存在しなければnilを返すメソッドとなります validates :content, presence: true, length: { maximum: 140 } # 最大140文字まで end ``` ####ユーザーがマイクロポストを複数所有する(has_many)関連付け app/models/user.rb ````rb clas

元記事を表示

railsチュートリアル第13章 マイクロポストを改良する

###マイクロポストを改良する
#####デフォルトのスコープ
新しい順にマイクロポストを表示させる。
そのためにdefault scopeというテクニックを使う。

####マイクロポストの順序付けをテストする
test/models/micropost_test.rb

“`rb
require ‘test_helper’
.
.
.
test “order should be most recent first” do
assert_equal microposts(:most_recent), Micropost.first
# microposts(:most_recent) データベース上の最初のマイクロポスト
# Micropost.first fixture内のマイクロポスト
# 上二つが等しいか?
# マイクロポストのfixtureがあるという前提に依存しています。
end
end
“`

####マイクロポスト用のfixture
test/fixtures/microposts.yml

“`
orange:

元記事を表示

railsチュートリアル第13章 Micropostのバリデーション

###Micropostのバリデーション
####新しいMicropostの有効性に対するテスト
test/models/micropost_test.rb

“`rb
require ‘test_helper’

class MicropostTest < ActiveSupport::TestCase def setup @user = users(:michael) # このコードは慣習的に正しくない @micropost = Micropost.new(content: "Lorem ipsum", user_id: @user.id) # micropostのカラムに情報を入力 end test "should be valid" do assert @micropost.valid? # 有効? end test "user id should be present" do  # あらゆるマイクロポストはユーザーのidを持っているべき @micropost.user_id = nil

元記事を表示

RailsのCredentialsの作り方

Rails触った事ないけどある日突然production.keyを作成する事になり四苦八苦したので記録。

#Railsのproduction.keyとは

production環境の暗号化されたファイル**production.yml**を復号するためのキー。

【Ruby on Rails】production環境での秘密情報の管理(Credentials)

暗号化されたファイルにはプロジェクトの機密情報が含まれ、暗号化されたファイルをバージョン管理し、キーはバージョン管理から外す。
production.ymlというのは作成時に環境を指定したからこの名前になっており、基本的にはcredentials.ymlというのが暗号化されたファイルの名称。

#Credentialsの作り方(基本)

####既存のキーの確認方法
下記のような感じで確認する

“`shell
$ EDITOR=”vi” bin/rails credentials:show
# aws:
# access_key_id: 123
# secret_access_key: 345

# Used as the base se

元記事を表示

【Rails 】Dockerで使用したコマンド集

## 用語
| 名称 | 説明 |
|:-:|:-:|
|Dockerエンジン|Dockerにおいてコンテナ型仮想化を実現するためのコア|
| Dockerコンテナ | Dockerイメージをもとに作成されるコンテナ型仮想環境 |
| Dockerイメージ | Dockerコンテナ作成時に必要な雛形となるもの。できたアプリケーションをイメージとして保存して、別のサーバーでも同じ環境を再現できる。|
| Dockerfile | Docker イメージをビルドする為の手順を記載するファイル|

#コマンド

## Dockerコンテナの起動、構成、Dockerイメージの作成まで一気に実行+(Gemfile変更時)

“`
docker-compose build
“`

## コンテナ起動

“`
docker-compose up

#バックグラウンドでコンテナ起動
docker-compose up -d
“`

## コンテナ停止

“`
docker-compose stop
“`
## コンテナ削除

“`
docker-compose down
`

元記事を表示

Herokuの登録からRailsアプリ(docker)のデプロイまで

#内容

Docker勉強会用にHerokuの登録からデプロイまでの流れをまとめる。
[Docker 公式](https://docs.docker.com/samples/rails/)を参考にRailsアプリを作成する。

#開発環境

MacOS Big Sur

Homebrew:3.3.1
Docker:20.10.8
Docker Compose:v2.0.0
heroku:7.59.1

#登録方法
[heroku](https://jp.heroku.com/)から新規登録する。
無料アカウントを作成後、アカウントをアクティブ化するためのメールが届くので、リンクをクリックする。

[多段階認証(MFA)の登録](https://devcenter.heroku.com/articles/multi-factor-authentication)を求められるので、好きなものを追加する。

これで、登録は完了。

#heroku CLIのインストール

[The Heroku CLI](https://devcenter.heroku.com/articles/heroku

元記事を表示

【Rails】定数の呼び出し方

##環境
Ruby 3.0.2
Rails 6.1.4.1

##定義と呼び出し方

“`ruby
class Hogehoge
TARGET_ARTICLES_COUNT = 100.freeze
end
“`

“`ruby
Hogehoge::TARGET_ARTICLES_COUNT
# => 100
“`

他のクラスやモジュールで定義された定数を参照するには“`::演算子“`を使って定数のパスを指定。
トップレベルの定数を確実に参照するにはパスを“`::“`から始めると外部の定数を絶対パスで指定できる。

##参考

https://railsguides.jp/constant_autoloading_and_reloading.html

元記事を表示

【Rails】lib配下にクラスを自作し読み込む方法

##環境
Ruby 3.0.2
Rails 6.1.4.1

rakeタスク内のメソッドをクラスに切り出してリファクタリングしたいときに使える。

“`lib/tasks/XXXXXX.rake
namespace :XXXXXX do
task hogehoge: :environment do
hogehoge = Hogehoge.new
end
end
“`

“`lib/hogehoge.rb
class Hogehoge
def hugahuga

end
end
“`
##設定方法

“`config/application.rb
module Futurama
class Application < Rails::Application ... config.paths.add 'lib', eager_load: true end end ``` ##参考 https://qiita.com/mk_0409/items/e930945a0c505ccbac9b

元記事を表示

ユーザーログインの有無で表示を変える実装!

#投稿者本人か確認して表示を変更

例でアプリを見ていきます!

今の状態だと、誰でも他ユーザーが投稿を編集・削除できます!

「ユーザーがログインしている」かつ「投稿したユーザーである投稿だけに許可」という実装をしましょう!

編集ボタンと削除ボタンの表示部分をif文で囲います!

“`php:app/views/eats/index.html.erb

<% @eats.each do |eat| %>

<%= image_tag 'arrow_top.png' %>

  • <%= link_to '詳細', eat_path(eat.id), method: :get

元記事を表示

【Rails × Heroku】HerokuでYouTube APIを実行しようとした時のエラー

# 概要
今回、個人開発のアプリをHerokuでデプロイしrakeタスクでYouTube APIを叩こうとした際にエラーが出たので、その原因と解決方法をまとめました。

# 環境
Ruby : 2.6.6
Rails : 6.0.3
Heroku : 7.59.1
MySQL : 8.0.26
OS : macOS Catalina

# 発生したエラー

“`
$ heroku run rake youtube_task:youtube_video_save

Running rake youtube_task:youtube_video_save on ⬢ mukinator… up, run.8232 (Free)
rake aborted!
NoMethodError: undefined method `[]’ for nil:NilClass
/app/lib/tasks/youtube_task.rake:11:in `block (2 levels) in


/app/vendor/bundle/ruby/2.6.0/gems/rake-13.0.

元記事を表示

【Rails】インデックスアクションのインスタンス変数が複数形である理由

##### はじめに
Rails 学習時にインスタンス変数に関して疑問点があったため、記載します。

##### indexアクションのインスタンス変数が複数形である理由について
下記のindexアクションとshowアクションを見比べてみると分かるのですが、indexアクションのインスタンス変数は複数形@usersになっています。
また、showアクションなど他のアクションのインスタンス変数は単数形@userで表現されています。

“`rb:users_controller.rb
def index
@users = User.all
end

def show
@user = User.find(params[:id])
end
“`
この理由は、indexアクション以外は、パラメータでidを取得しているため、Userデータの1つの配列として格納されているのに対し、indexアクションはビューで利用したい全てのUserデータを取得し、インスタンス変数に格納されます。
そのため、インスタンス変数に格納されている配列が単数か複数かによって、インスタンス変数の表記も単数形

元記事を表示

rials6.1でmarkdownを使用したミニブログアプリを作ってみる

# 1. 開発環境
* M1 Mac Monterey 12.0.1
* ruby3.0
* rails6.1.4.1

githubはこちらです。

https://github.com/taiki-nd/markdown-blog

オリジナルアプリにActionTextかMarkdownかで迷ったのでミニアプリを作って比べてみることにしました。

https://qiita.com/taiki-nd/items/556b804fc367ba30ca15

# 2. 実装開始

## 2.1 アプリ作成、初期設定

まずは新しいアプリの作成をしていきます。
“rails _6.1.4.1_ new markdown-blog -d mysql“

database.ymlの編集をします。

“`ruby:config/database.yml
default: &default
adapter: mysql2
# encoding: utf8mb4
encoding: utf8
pool: <%= ENV.fetch("RAILS_MAX_THREADS")

元記事を表示

Ruby、Railsのコーディング規則まとめ

#はじめに
企業や組織が公表しているRuby、Railsのコーディング規約をまとめました。チーム開発のように既にコーディング規約が定まっているのではなく、個人で開発している方は自分の好みの規約を導入してみてはいかがでしょうか?

![rails.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/764771/4659b6e3-d675-1bb5-9eb0-417521fda010.jpeg)

#企業

#Cookpad

https://github.com/cookpad/styleguide/blob/master/ruby.ja.md

#Shopify

https://ruby-style-guide.shopify.dev/

#Airbnb

https://github.com/airbnb/ruby

https://qiita.com/tomoharutt/items/51254ae5dafba645dc6d

#Rubyの組織など

#Rubyスタイルガイド

https://g

元記事を表示

サクッとRailsの開発環境をDockerで構築してみる

## 環境

– macOS Catalina 10.15.6
– Docker 20.10.10
– docker-compose 2.1.1

## DockerでRailsの開発環境を構築する

公式ドキュメントを参考にDockerでRailsの開発環境を構築する。
[Quickstart: Compose and Rails](https://docs.docker.com/samples/rails/)

### ファイルを作成する

以下のファイルを作成する。

“`bash
$ mkdir hello_app/
hello_app$ cd hello_app
hello_app$ touch Dockerfile
hello_app$ touch docker-compose.yml
hello_app$ touch Gemfile
hello_app$ touch Gemfile.lock
“`

“`docker:Dockerfile
# syntax=docker/dockerfile:1
FROM ruby:2.5
RUN apt-get update -q

元記事を表示

【Rails×Vue.js】日本語化した曜日を表示して紐づいたデータを表示する

https://qiita.com/Yuya-hs/items/6265f1aba1a73f38047a
の続きです。
上記記事の「準備」が済んでいる前提です。

曜日を表示して(月、火、水、木、金、土、日)、それに紐づいたデータをvueのテンプレートに表示する方法です。
テンプレート内にjavascriptのメソッドを記入することで実現します。

#実現したいこと

ユーザーが作成したanswerというモデルについて各曜日に何個のanswerを作成したか表示できるようにしたい。

完成イメージ(プログレスバーを使用しています)

![スクリーンショット 2021-11-14 23.00.07.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1640672/7fadbb8c-8273-4efa-f302-db9dcb577a5a.png)
スクリーンショット 2021-11-14 23.00.07

#rails側の実装

“`
//users_controller

def show
@wda

元記事を表示

sassc のインストールがおそすぎる

前々から思ってたけど `bundle install` のとき `sassc` のインストールがおそすぎる

そのせい `Docker` のイメージを作る際に タイムアウトエラーみたいになるのが頻発。

腹が立ったので調べた

## 開発環境
`ruby 2.6.5`
`Ruby on Rails 5.2.5`
`bundler 2.2.24`

https://qiita.com/croquette0212/items/d2f48f30c3ed7dcd0e3c

どうやら環境の問題ではなくこの `gem` が悪いらしい

上の記事を参考にさせていただいて

“`
gem ‘sassc’, ‘2.1.0’
“`

`sassc` のインストールと 2.1.0 というバージョンを明示してやると解決

元記事を表示

rSpec 複数のセレクターを所得して配列みたいに指定する

## 前提
`rSpec` を使ってテストを書いている

## 本題

複数の同じクラスがあってその特定の要素を使用したいとき

“`
find(“.class”)[0]
“`

みたいな書き方はできない

`find` メソッドは一意な要素しか所得しない

上みたいの書き方をしたかったら

“`
page.all(“.class”)[0]
“`

みたいにする

元記事を表示

OTHERカテゴリの最新記事