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

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

単体テストコード

# 導入方法

① Gemfileのgroup :development, :testというグループの中にgem ‘rspec-rails’, ‘~> 4.0.0’と記入してbundle install
② % rails g rspec:installとターミナルに打ち込んでRSpecを使用できるようにする
③ .rspecに–format documentationを追記

テストコード
① specディレクトリにFactoryBotのファイルを生成
② テストする単体モデルのモデル.rbを作成
FactoryBotで指定
(例)
spec/factories/users.rb
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
FactoryBot.define do
factory :user do
name {Faker::Name.last_name}
email {Faker::Internet.free_email}
password = Faker::Internet.password(min_length: 6)
pas

元記事を表示

部分テンプレート

# 部分テンプレートのやり方

例えば、tweetを作ってたとすると
下のようなコードを記述したとする

app/views/tweets/index.html.erb
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーー

<% @tweets.each do |tweet| %>
 < div class="content_post" style="background-image: url(<%= tweet.image %>);”>
< div class="more">
< span><%= image_tag 'arrow_top.png' %>
< ul class="more_list">
< li>
<%= link_to '詳細', tweet_path(tweet.id), method: :get %>
< /li>
<% if user_signed_i

元記事を表示

その他の機能

# コメントする時など・・

Userモデル以外で他のモデルidを取得したい

ルーティングファイル

resources :(コントローラーA) do
resources :(コントローラーB)
end

こう記述すれば、コントローラーBで
def index
@a = A.find(params[a_id])
end
みたいに紐付けられたモデルのid取得可能

元記事を表示

Web制作の一連の流れ 〜メインとなるモデル

# 手順 メインモデル作成

① rails g model (モデル名)
② マイグレーションファイルに必要なカラムを記述、Userモデルと紐づける必要があるなら、
t.references :user, foreign_key: true
みたいに記述
③ rails db:migrateでテーブル作成

## モデル
① バリデーション、アソシエーションの作成
② 写真等の投稿がある場合
  ⅰ) Gemfileにgem ‘mini_magick’  gem ‘image_processing’, ‘~> 1.2’を記述して
bundle install
ⅱ) rails active_storage:installでActive Storage導入してrails db:migrate
ⅲ) そのモデルにバリデーション、アソシエーションの設定
    has_one_attached :image
    validates :image, presence: true

## コントローラー、ルーティ

元記事を表示

Ruby on Railsで基本的なWebページを作る一連の流れ 〜devise編

# 手順

% cd ~/projects
% rails _6.0.0_ new (プロジェクト名) -d mysql   ⏪ 新規プロジェクト作成
% cd (プロジェクト名)                  ⏪ そのプロジェクトフォルダに移動
% rails db:create                 ⏪ データベース作成

※ この後、必要に応じてencoding: utf8mb4をencoding: utf8へ変更したり、README.mdを作成したり

————————————————————————–
## ユーザー管理機能

① Gemfileにdeviseを記述し、bundle install
② rails g devise:installでdeviseをインストール
③ rails g devise userでUserモデル作成   ※rails g model userではないため注意
④ マイグレーションファイルに必要なカラムを記述
 Eメール、パスワー

元記事を表示

Railsポートフォリオ作成 #10 Dockerの導入

こんにちは:smiley:
今回はDockerの導入を行いました。
[(前回記事(#9 ゲストログイン機能の実装))](https://qiita.com/yanoo/items/54eed247e3f4e0256c9e)

私は、前職(ホテルの料飲部)における、コミュニケーションの課題を解決するアプリを作っています。

## やったこと
RubyとMysqlのDockerfileを書き、docker-composeの立ち上げを行い、ローカルでアプリを動かせるようになりました。

また、pushするとビルドされるように、自動ビルドを設定しました。

## 参考にした教材

+ [ゼロからはじめる Dockerによるアプリケーション実行環境構築](https://www.udemy.com/course/docker-k/)
こちらで基礎を固めました。
ただ、こちらはポートフォリオの段階では必要でない知識も網羅されていたので、基礎がない状態で見分けるのが難しく、時間を使い過ぎてしまいました。

+ [ホスト環境で動いているRailsアプリケーションをDocker

元記事を表示

【Rails6】herokuデプロイエラー時の対処

#開発環境

Rails 6.1.1
Ruby 2.7.2
git 2.30.0
heroku/7.50.0 darwin-x64 node-v12.16.2
mac 0S Big Sur 11.2.3
#エラーが発生

Railsで作成したアプリをHerokuの登録を行い、

“`
$ git push heroku HEAD
“`
コマンドを入力した際に以下のようなエラーが発生。

“`
! [remote rejected] HEAD -> master (pre-receive hook declined)
error: failed to push some refs to ‘https://git.heroku.com/*********.git’
“`

# bundleのバージョン変更
ターミナルのログを確認すると

“`
buildpack-detect-order
remote: —–> Ruby app detected
remote: —–> Installing bundler 2.2.11
remote: —–> Removin

元記事を表示

複数のdeviseにカラムを追加する

インストールしたdeviseにカラムを追加する。今回はUser modelとClient modelそれぞれにカラムを追加していく。

一. User modelにusername, birthdate, introを追加する

“`
rails g migration add_username_birthdate_intro_to_users username:string birthdate:date intro:text
“`

二. Client modelにcorpname, location, introを追加する

“`
rails g migration add_corpname_location_intro_to_clients corpname:string location:integer intro:text
“`

三. rails db:migrate

“`
rails db:migrate
“`

四. devise_parameter_sanitizerの設定(User側を例に)
app/controllers/users/registra

元記事を表示

Ruby on Rails 複数のdeviseを設定

ログイン等の機能で有名なdevise。
今回はuserとclientの2つを作る。
(deviseをインストールした後を想定)

一. それぞれのmodelを生成してmigrate

“`
rails g devise User
“`

“`
rails g devise Client
“`

“`
rails db:migrate
“`

二. Controllerの生成

“`
rails g devise:controllers users
“`

“`
rails g devise:controllers clients
“`

三. config/initializers/devise.rbの中の以下の記述を、コメントアウトを外してtrueに変更(viewの生成に必要な作業)

“`
config.scoped_views = true
“`

四. viewの生成

“`
rails g devise:views users
“`

“`
rails g devise:views clients
“`

五. routingの変更

“`

元記事を表示

Railsのturbolinksの弊害

`turbolinks`はページ読み込みをしない分ページ遷移を速くするツール。しかし、何かと弊害が生じる原因となっていた。ついに我慢の限界が、さてどうしようか。
ちなみに`turbolinks`は以下の物を指す。

“`erb:application.html.erb
↓の上にあるこれ
<%= javascript_include_tag 'application', 'data-turbolinks-track': 'reload' %>
“`

####【ページ内リンク】
[0.環境](#0環境)
[1.背景](#1背景)
[2.flash.nowが作動しない・・・!?](#2flashnowが作動しない)
[3.turbolinksを残すか、それとも・・・](#3turbolinksを残すかそれとも)
[4.結論](#4結論)

#0.環境
・AWS
・Rails 5.2.4.5
・ruby 2.6.3p62 (2019-04-16 revision 67580) [x86_64-linux]

#1.背景
この記事を書く前に、既に2つ(3つ?)弊害が起きていた

元記事を表示

【注意!】Rubyの全角スペースが原因のエラー

## 概要

Ruby課題を解いていたときに、`syntax error`が出て解決するのに数時間かかった。
結論から言うと、全角スペースが原因だった話。

##書いたコード

さて、どこが原因でしょうか?!
(エディタではなく、Qiitaで見ると分かりやすいですね。)

“`ruby:trip_main.rb
# 旅行プラン
plans = [
{ place: “沖縄”, price: 10000 },
{ place: “北海道”, price: 20000 },
{ place: “九州”, price: 15000 }
]

disp_plans(plans) #プランの表示
chosen_plan = choose_plan(plans) #プランの番号を選択
person_num = num_of_people(chosen_plan) #予約人数を入力
calculate_price(chosen_plan, person_num) #合計料金を表示
“`

## エラー文

“`ruby:error.rb
trip_main.rb:11: sy

元記事を表示

RailsでParameterの確認

#内容
送られてきたParameterをサクッと確認したい際には、コントローラのcreateアクションなどに以下を記述

“`ruby
def create
render plain: params.inspect
end
“`
#コードの理解
renderで:plainオプションを使うことで、平文テキストをマークアップせずにブラウザに送信が可能

“`ruby
def create
render plain: “!!!”
end
“`
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1106668/2d6a99d6-e4ef-d610-7c1b-703ca161ff00.png)

上記を用いてparamsを表示している。
.inspectをすることで、文字列オブジェクトの内容を、
出力したときに人間が読みやすいような適当な形式に変換することが可能

“`ruby
params.inspect
“`

元記事を表示

Railsチュートリアル9章まとめ

#はじめに
Railsチュートリアル9章を勉強していて、自分の中に落とし込むためにまとめてみることにしました。

#9.1
・Remember me機能とは
ブラウザを閉じた後でもユーザーのログイン状態を保持するもの
例.Twitter

記憶トークン(remember token)を生成し、cookiesメソッドによる永続的cookiesの作成や、安全性の高い記憶ダイジェスト(remember digest)によるトークン認証にこの記憶トークンを活用する。

“`

class AddRememberDigestToUsers < ActiveRecord::Migration[6.0] def change add_column :users, :remember_digest, :string end end ``` 記憶ダイジェスト用にマイグレーションを作成する。これでdbにremember_digestカラムが追加される。 記憶ダイジェストとは... ``` def User.new_token SecureRandom.urlsafe_b

元記事を表示

【Rails6】RSpecの導入

# はじめに
モデル、及びコントローラーごとに単体テストを実施すると、テスト実施ファイルを作成するためのコマンドを実行する必要があります。

毎回、手順を見返すのは面倒で、参考書であれば説明文等があるので、目で追うのに少し戸惑うときもあるかと思います。

そこで、テスト実施ファイル作成までの手順をまとめていれば、作業を効率化してテストを実施できるのではないかと考え、本記事を作成しました。
# 概要
テスト実施前の準備手順とテスト実施コマンドについて記述しております。
# 全体像
①gemの追加
②RSpecの導入

モデルの単体テストコード
③モデルのテストファイルを作成
④FactoryBotを導入し、テストを実行
⑤テストコードを実行するコマンド

コントローラーの単体テストコード
⑥コントローラーのテストファイルを作成
⑦テストコードを実行するコマンド

結合テストコード
⑧結合テストのテストファイルを作成
⑨テストコードを実行するコマンド

※インストール完了している場合は③からお進みください。
# ①gemの追加
Gemfileに以下の記述追加してください

“`
ge

元記事を表示

複数枚投稿する際に、投稿ボタンを押すとエラーが出た際の解決

プログラミング学習2ヶ月間。
Qiita初投稿。

写真複数枚投稿機能にて詰まったため、備忘録としてアウトプット。

今回詰まった内容としては複数枚投稿する際に、投稿ボタンを押すとエラーが出たといった内容。

抜粋コード記述

`new.html.erb`

“`
<%= f.file_field :images, name: 'post[images][]', id: "item-image" %>

<% @post.images.each do |image| %>
<%= image_tag image, class: 'item-box-img' %>
<% end %>
“`

`routes.rb`

“`
resources :posts do
resources :comments, only: :create
collection do
get ‘search’
end

元記事を表示

Herokuデプロイ Failed to install gems via Bundlerの解決

#Herokuでデプロイするときのエラーが解決したから共有

Herokuでデプロイしようとしたときに以下の画像にかいてある警告文的なのが出てできず、色々なサイトを参考にしたがうまくいかなかったけどなんとか解決したので共有します。
![スクリーンショット 2021-03-17 15.50.07.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1081108/88832643-2d13-a325-84d0-e10b5f03b41f.png)
他サイトではBundlerのバージョンを変更し解決したとあったので、私もエラー文を参考にバージョンを変えたけどうまくいきませんでした。頭を抱えながらターミナルをにらみ続けていたら以下の画像の文章が目にとまりました。
![スクリーンショット 2021-03-17 15.49.55.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1081108/81a5bb3a-31d8-6fb1-b5a7-

元記事を表示

Rspec テストコード実行時のMysqlエラーについて

# はじめに
Ralisを使って実装中、テストコード実行時にMySQLエラーが発生しましたので、原因と解決策を記載しておきます。
同じ原因でつまづいてしまった方がいた時のお力になれればと思います。
なお、DB内の処理について、深い知見があるほどの技術力ではございません。それ故に、エラーの原因など、「厳密には違う」ということがあるかもしれません。
ご指摘いただければ修正いたしますので、どうか温かい目でご覧ください。

# 開発環境と事前状況
### バージョン
・`ruby 2.6.5`
・`rails 6.0.3.4`
・`mysql 14.14`
### 事前状況
・商品の購入を行うための、ItemBuyモデルを構築済み

“`ruby:app>models>item_buy.rb
class ItemBuy
include ActiveModel::Model
attr_accessor :postal_code, :from_id, :municipality, :house_number, :building_name, :tell, :user_id, :item_

元記事を表示

多対多の関係性にフォームオブジェクトなどが絡んで訳わからなくなった話

### アプリの仕様
– キャンプの記録をするアプリです
– ユーザーはキャンプのタイトルとキャンプスタイルという名のタグをつけて投稿します。
– キャンプタイトルとタグを同時に保存するためにフォームオブジェクトを使用しています。
– ユーザーは自分の持っているアイテムを登録できます。
– キャンプには複数のアイテムを持っていける。アイテムは何度でもキャンプに持っていけることからキャンプとアイテムは多対多の関係です。
– キャンプ記録を作成する際持って行ったアイテムの登録を実現させたい

### 発生したエラー

“`
undefined method `id’ for #
Request
Parameters:

{“authenticity_token”=>”6h75fWC/+zhPx96ZoRyir+kyevpfqLqawP75tlOKrGHOXHlfKtMlG0qvpQMLgrjc5Ld3x1bvduvrtllnJPZagw==”,
“camp_tags”=>{“title”=>”bboobb”, “style”=>

元記事を表示

【Rails6】環境変数をjsファイルで読み込む方法

# 環境
macOS: Big Sur Ver11.2.2
Rails: 6.0.0
Ruby: 2.6.5
Webpacker 4.3.0

# やりたいこと
Google MapのAPIを使ってRailsアプリに地図を表示したところまでは良かったが、コンソールで発行したAPIキーを環境変数に入れ忘れていた。
そこで、今回は *google_map.js* というJavaScriptのファイル内で環境変数を設定することにしたい。

**※ググったところ、gemを入れて *.env* というファイルを作ってそこに環境変数を記述するという方法もあるみたい。興味があればググってみてください。**

# 手順
#### ①ターミナルで環境変数を設定
“`terminal
% vim ~/.zshrc
“`

vimの操作画面が出たら「i」を押すと編集モードになる(画面下部に「insert」と表示が出る)
編集モードになったら以下のように環境変数(名前は自由)を設定する。

“`terminal
export GOOGLE_MAPS_API_KEY=’Googleコンソールで発行したA

元記事を表示

railsで新規アプリを作成した時にmysqlにし忘れた時の対処

# railsで新規アプリを作る際, -d mysqlをつけ忘れた!
deviseの導入をしている時にencodingをutf8にしようと思い
database.ymlを開くと「ん?なんかいつもと全然違うな」と感じました。
utf8mb4(?)だっけの記述も全くなくなぜだーと思っていると
databaseの指定をしておらずデフォルトの設定になっておりました。(-d mysqlのしわすれ)

普段は下記の書き方でやってます

“`
% rails new -d mysql
“`

このままアプリを消して新しく開発を始めるのはスマートじゃないので
ここからmysqlに指定しなおしていきましょう!
(mysqlを使いたいのはただ私がmysqlにしか慣れていないため)

## 手順1 gemfileの修正
まずgemfile内にsqlliteの記述があるのでそれを削除しました
削除した部分に新しくmysql2の記述を入れておきます

“`
#gem ‘sqlite3’, ‘~> 1.3.6’
gem ‘mysql2’
“`

そしてbundle installでmysql2のgemを

元記事を表示

OTHERカテゴリの最新記事