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

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

No template for interactive request IdeasController#index is missing a template for request formats: text/htmlというエラーが出た

#rails s を行ったら以下のエラーが出た

“`
No template for interactive request
IdeasController#index is missing a template for request formats: text/html

NOTE!
Unless told otherwise, Rails expects an action to render a template with the same name,
contained in a folder named after its controller. If this controller is an API responding with 204 (No Content),
which does not require a template, then this error will occur when trying to access it via browser,
since we expect an HTML template to be rendered for

元記事を表示

Rails RSpecテストを導入しよう!

#経緯
Railsチュートリアルなどではminitestが使われているが
実際の現場ではRSpecを用いたテストを行っているため
今回はRailsにRSpecを導入するまでの手順を乗せていこうと思います。

#利用するテスト用ライブラリ
1 RSpec
2 Capybara
3 FactoryBot
# RSpecのインストールと初期準備

“`Gemfile
group :development, :test do
# Call ‘byebug’ anywhere in the code to stop execution and get a debugger console
gem ‘rspec-rails’, ‘~>3.7’
end
“`
次に以下のgenereteコマンドを実行します。

“`ターミナル
bundle
bin/rails g rspec:install
=>Running via Spring preloader in process 4359
create .rspec
create spec
create

元記事を表示

【Docker + CircleCI + Rails】Missing secret_key_base エラー

## 環境
Ruby 2.7.1
Rails 6.0.3.4

CircleCIを使ってECSへデプロイ時に以下のようなエラーが発生

“`
rake aborted!
ArgumentError: Missing `secret_key_base` for ‘production’ environment, set this string with `rails credentials:edit`
“`

## 結論
Railsのmaster.keyをCircleCIの環境変数に設定しconfig.ymlとDockerfileに設定した環境変数を渡す事で解決しました。

### Step1
CircleCI環境変数設定
nameを`RAILS_MASTER_KEY`とし、
valueに`master.key`の値を入力

### Step2
Dockerfileに追記

“`dockerfile:Dockerfile
ARG RAILS_MASTER_KEY
ENV RAILS_MASTER_KEY ${RAILS_MASTER_KEY}
“`

### Step3
Cir

元記事を表示

【M1チップ】Homebrew経由でのRubyインストールに苦戦した

# 概要

プログラミング勉強真っ只中の私ですが、先日M1チップ搭載のMacbook Proを購入しました。
そこでRuby on Railsの環境構築をしようとしたところ苦戦しましたが、初心者の私でもなんとか出来たのでやったことを残しておきます。
~~(最初はHomebrewって何?美味しいの?ってレベルでした)~~

参考にさせていただいた記事
https://qiita.com/aiorange19/items/5ffaefc85f912f60c2fa

# 動作環境

・Macbook Pro (13-inch, M1, 2020)
・macOS Big Sur (ver11.0.1)

Xcodeをインストールして無い人は予めインストールしておくと幸せになれるかもしれません。
(App StoreからDL出来ます)
容量約12GBなのでめっちゃ時間かかった。

# Homebrewのインストール

Homebrewをインストールします。
https://brew.sh/index_ja

公式ドキュメントにも記載があるように、M1チップのMacでは「/opt/homeb

元記事を表示

undefined method `upload’ for nil:NilClassが出た時の解決法

# 今回のエラー

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1003934/768ba7ba-98be-4cd8-e0af-9416b4c572d2.png)

# きっかけ
S3を作成中のアプリに導入しようとしたところ、このエラーが出ました。

# 結論
開くべきシェルが間違っていた。

S3を導入する際には、環境変数を指定しなければならないのですが、その際にvimメソッドのインサードモードの中に記述したのですが、その時にターミナルに

“`shell:ターミナル
vim ~/.zshrc
“`

としなければならないところを

“`shell:ターミナル
vim ~/.zshr
“`

と打ち込んで、その中に記述していました。
要するにスペルミスですね。
散々原因を探した後だったので、「今更スペルミスなんか見逃すかよ」、とスペルミスの可能性を削除していたが故のミスでした。これからはもっと謙虚な気持ちでエラーと向き合っていきます。

元記事を表示

Railsのpresent?メソッドの使い方

##present?メソッドとは
オブジェクトであるレシーバーの値が存在すればtrue、存在しなければfalseを返すメソッドです。条件分岐(if文等)をプログラムで書くときによく使います。

例えばアプリの購入機能において「もし選択した商品に紐づく購入記録が存在していたら(空ではなかったら)、”sold out”と表示する」を実装したい場合は該当のビューファイルにおいて

“`:index.html.erb

<% if item.purchase.present? %>

Sold Out!!

<% end %>
“`

という様に記述します。

“<% if item.purchase.present? %>“の部分ですが
itemモデルとpurchaseモデルにテーブル間のアソシエーションが組んであれば
“商品(item)に紐づく購入記録(purchase)が存在していたら(空ではなかったら)=true“
という解釈になります。

以下のサイトにはpresent?メソッドと逆のbla

元記事を表示

ActionMailerを使用した問い合わせ機能の実装

#実装機能
問い合わせフォームからメールを送信、それを指定したメールアドレスで受信する。
(アプリの利用者から管理者に向けてのメール機能として実装)

ActionMailerでは他にもメルマガ配信のように運営側からユーザーに対してメール送信を行ったり、問い合わせに対するメールの返信機能なども実装が可能とのことだが、今回は一番シンプルなこちらの機能を実装。
またGmailアカウントでのメールの受信方法の為、前提としてGmailのアカウントを持っている体で話を進めていく。

##**完成イメージ**

![スクリーンショット 2021-01-24 18.46.45.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/936377/cbdf89fd-9cbb-aa56-9722-7a8d59f6bfdb.png)

#実装内容
##1.コントローラの作成
使用するビューファイルはnewのみな上にルーティングの修正が面倒な為、アクションの指定はせずにコントローラファイル単体で作成。

“`
$ rails g c

元記事を表示

Railsで並び替え機能を実装する

##自己紹介
初めてQiitaに記事を投稿します。
9月から独学でプログラミング学習を開始し、
11月からスクールを使って学習しています。
現在はポートフォリオの作成中です。
知識を定着させるために、学びをアウトプットします。
また、これから学び始める方の参考になることを願っています。
***
##開発環境
– Ruby 3.0
– Ruby on Rails 6.0.3.4

#並び替え機能を実装する

現在、映画情報を保存するための“`Movie“`というテーブルがあるとします。
まずは“`Movie“`モデルを編集します。

“`rb
class Movie < ApplicationRecord scope :sort_movies, -> (sort) { order(sort[:sort]) }
scope :sort_list, -> {
{
“並び替え” => “”,
“作成の古い順” => “updated_at ASC”
“作成の新しい順” => “updated_at DESC”
}
}

元記事を表示

ユーザー登録時のウィザード形式に変更

## はじめに
オリジナルアプリ制作にあたり、ユーザー登録時に**ウィザード形式**(対話するように順番に操作が進んでいく方式)を用いるように変更しました。
ウィザード形式にすることで、ユーザーからすると見やすく使いやすいとのことだったため、変更することにしました。

変更前はユーザー登録と本人確認が以下の画像のように一緒の画面にある状態。
1ページが縦長になってしまい、少しわかりづらい。(スクショにも全部納まっていないし…。)
なので、今回はユーザー情報登録画面と本人確認登録画面に2ページに分けていきたいと思います。

## 変更前・変更後のテーブルの状態
**変更前** 
現状、会員情報入力と本人確認が同じテーブルになっている。
・Userテーブル

| Column | Type | Options

元記事を表示

listen tcp 0.0.0.0:xxx: bind: address already in us の対処法

##目的
Ruby on Railsでポートフォリオを作成していた途中にdocker-compose upをした際に、listen tcp 0.0.0.0:xxx: bind: address already in usとエラーが出たのでその時の対処方法を忘れないように書きます。

##エラー内容
“`
$ docker-compose up -d
————————-
————————-
Error starting userland proxy: listen tcp 0.0.0.0:3306: bind: address already in use
ERROR: Encountered errors while bringing up the project.
“`

##対処方法
最初にこのコマンドを打ちます。

“`
$ sudo lsof -i -P | grep “LISTEN”

name1 633 ~~~~~~ 10u IPv4 0xc46fc7

元記事を表示

pg_hba.confファイル内のクライアント認証の優先順位

「現場で使える Ruby on Rails 5 速習実践ガイド」のChapter 6-9-3 「production環境用のデータベースを作成する」で詰まったのでメモ書きします。

###### 実行環境
PostgreSQL 10.15
Ruby 2.7.1
Vagrant 2.2.9
CentOS 7.8.2003

###### 問題点
production環境用のデータベースを作成する以下のところでエラー発生

“`
RAILS_ENV=production bin/rails db:create db:migrate
“`

原因はPostgreSQLのユーザー認証がパスワード認証になっていないことのようだった。

###### 修正点
修正にはpg_hba.confというファイルを書き換えてパスワードを使った認証ができるように、設定する必要があるようだった。

ユーザーtaskleafはパスワード認証、元々使っていたユーザーvagrant, rootはそのままにしておきたかったので、できないか調べたところ、pg_hba.confは上方にある記述が優先されるとの記載があっ

元記事を表示

RailsにおけるSQLインジェクション対策について – Rails Tutorial リスト13.46

## はじめに
Rails Tutorialを進めていく中で気になったところを記事にして残してます。

記事に間違いがある場合は教えてください:grin:

## 用語解説

### SQLインジェクションとは

> SQLインジェクションは、Webアプリケーションのパラメータを操作してデータベースクエリに影響を与えることを目的とした攻撃手法です。SQLインジェクションは、認証をバイパスする目的でよく使われます。他にも、データを操作したり任意のデータを読み出したりする目的にも使われます。

> [Rails セキュリティガイド – Railsガイド](https://railsguides.jp/security.html#sql%E3%82%A4%E3%83%B3%E3%82%B8%E3%82%A7%E3%82%AF%E3%82%B7%E3%83%A7%E3%83%B3)

つまり、ログインフォームや投稿フォームなどでSQLのデータを処理する際に、不正**(サーバーからみると正常)**なデータが実行されてしまうことです。
これによってログイン偽装やデータの抜き取りが起こります。

#

元記事を表示

bundle exec

#bundle exec をつける時

bundle execをつけずにrailsコマンドを叩くと、デフォルトのrailsが動く
bundle execをつけると、そのプロジェクトで管理している(rbenvなどのバージョンを管理してくれるもの)rails が動く

bundlerとは
そのプロジェクトのgemを管理しているよ
bundle install をするとgemfileの中身が読み込まれる

参考:https://qiita.com/d0ne1s/items/fa2dafcee02e963fe997

元記事を表示

refileで画像を複数投稿したい!

今回はrefileで画像を複数投稿できる機能を作ります。
調べたところ、画像複数投稿には gem ‘carrierwave’を使用する記事がたくさん出てきましたが、うまくいかなかったので今回はrefileで実装してみました。

##画像投稿用のテーブルを作成
画像1枚だけの投稿だと、対象のモデルにimageカラムを追加するだけでいいのですが、複数枚となると別でテーブルを作成する必要があります。

私はpet_imageモデルを新規作成しました。

“`rudy
create_table “pet_images”, force: :cascade do |t|
t.integer “pet_id”
t.string “image_id”
t.datetime “created_at”, null: false
t.datetime “updated_at”, null: false
t.index [“pet_id”], name: “index_pet_images_on_pet_id”
end
“`

##リレーションを組む
1:Nの

元記事を表示

Ubuntu上で作ったRails環境をVSCodeで書けるようにする(Windows)

#はじめに
今回はUbuntu上に構築したRails環境を
VSCode上でコードなどを書くことができる手順となります。
Ubuntu上にRails環境を構築する方法は以下の記事をご参照ください。
[Ubuntu Rails Widowsで環境構築をしたよ(2021年版)](https://qiita.com/nao_109/items/5052d1fde2f45eda7d31/)
VSCodeについては以下のリンクからダウンロードできます。
[Vscode](https://azure.microsoft.com/ja-jp/products/visual-studio-code/)

#VScodeのセットアップ
拡張機能>入力欄に「Remote WSL」を入力。インストールします。
![WSL.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/589667/7de5e999-755e-0405-8ab0-66bbe4168234.png)

次にメニューバーから
ファイル>ユーザ設定>設定>設定(JS

元記事を表示

Rspecでテストを作成する時、各ファイル毎に require ‘rails_helper’ と書くのを省略する

## 環境
Mac OS X
Ruby: 2.7.1
Rails: 6.0.3.4

## 課題
RSpecでテストを作成する時、何も設定しないと以下のように記述すると思う

“`ruby:model_spec.rb
require ‘rails_helper’
Rspec.describe Model, type: :model do

~以下テスト~
“`
しかしrequire ‘rails_helper’と毎回記述するのは面倒くさいので省略できないか調査した

## 解決法
.rspecに以下のコードを追加する

“`ruby:.rspec
–require rails_helper
“`

## 結果
以下のようにしてもテストが動き、コードを削減することができた

“`ruby:model_spec.rb
Rspec.describe Model, type: :model do

~以下テスト~
“`

## 参考記事
https://qiita.com/yuta-ushijima/items/ffb34823b8bba2180c94

## 最後に

お読み

元記事を表示

[Rails + jQuery]初学者向けAjaxを取り敢えず飛ばしてみたい

#課題
初学者が感覚掴むために取り敢えずAjax飛ばしてみたい。

例として以下フォームで入力された文字をサーバに送ってみる。

“`erb:form.erb
<%= text_field_tag :myname %>
“`
“`html:output

“`

![スクリーンショット 2021-01-24 11.18.12.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/239796/d2176686-3110-7b82-179c-2612146cd13a.png)

#結論
以下コードで取り敢えず飛ぶ。

“`javascript:ajax.js
$(“#myname”).change(function(){
let name = $(this).val();
$.ajax({
type: ‘GET’,
url: “/api/v1/users”,
data: { nam

元記事を表示

(備忘録)Everyday Rails 第2章「RSpecのセットアップ」

#「Everyday Rails – RSpecによるRailsテスト入門」
Railsを使用したアプリケーションを作成したものの、テストの記述が全然分からない、という状態になったので、RSpecの勉強をできる教材を探していたところ、なんと[プロを目指す人のためのRuby入門](https://www.amazon.co.jp/dp/B077Q8BXHC/ref=dp-kindle-redirect?_encoding=UTF8&btkr=1) (チェリー本)の著者が翻訳を手がけた本を発見しました。
[こちらのサイト](https://leanpub.com/everydayrailsrspec-jp)から購入できます!
販売方法はなんと、購入金額を自由に設定できるという、画期的なシステムでした(最低購入価格は$19からですが)。
先日、なんとか1周は終わらせたのですが、全然理解できていない部分が多いので、復習がてらアウトプットしていきたいと思います!
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.

元記事を表示

Ruby on Railsでアプリを作ってみよう④

##ビュー
MVCの役割の一つでブラウザにレスポンスとして見た目を返す役割を持っています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1008745/3f2d10cb-a51d-c41f-ebd9-cd174e5a7427.png)

ブラウザに表示するのはHTMLで書かれた物ですが、Rubyの記述も使って表現したい物です。
しかしそのままHTMLの文法で書いてしまうと問題があるので特別な書き方をします。

##ERB(Embedded Ruby)
テンプレートエンジンと呼ばれる仕組みを持った物で
HTMLの中にRubyを埋め込むことができます。
ERBファイルは

“`
ファイル名.html.erb
“`
とhtmlの拡張子に追加してerbを記入することで作れます。

中身の記述をする時に
<%= %>というタグでRubyのコードを挟むことで埋め込んで表示することができます。
埋め込んだコードをブラウザに表示する必要のない場合(条件式など)は<% %> のタグを使います。

元記事を表示

Rails deviseの使い方

#devise(超初心者の備忘録)

どうも、はじめまして!yukkyです。今回が初投稿でQiitaの書き方もよくわかっていないですが記録を残さないとすぐ忘れてしまうため、頑張って書いていきたいと思います。題名にも書きましたが自分は**超**がつくレベルの初心者ですので間違えがあったら(多分いっぱいあります。。)コメントで教えてくれると嬉しいです。さっき調べてみたら初めてvisual studioを入れた日(=初めてプログラムに触れた日)が2020/9/9でした(-_-;)まだ4.5か月ほどしかしてないですね。。

##deviseでできること
ログイン機能が使えるようになる

##使い方

まず練習用アプリとしてlogin_appを作る

“`
rails new login_app
“`

gemにdeviseを追加

“`ruby:Gemfile
gem ‘devise’
“`

“`
bandle install
rails g devise:install
“`
すると以下の画面が出てくれば成功

“`

Depending on your applicati

元記事を表示

OTHERカテゴリの最新記事