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

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

中間テーブルを使ったお気に入り機能の実装!

##実装したいこと

* 掲示板にブックマーク機能を追加したい。

* ユーザーがブックマークした掲示板を一覧できるページを実装したい。

これだけの機能なのに、めちゃくちゃ難しい。いろんなことを調べるいい機会になりました。
かなり多くのものを調べたので順序立てて説明をしていきます。

###実装の大まかな流れ

* 中間テーブルとなるBookmarkモデルの実装
* UserモデルとBoardモデルとのアソシエーションを実装
* Userモデルにお気に入り登録のギミックを定義
* BookmarkControllerの実装
* Routingの設定
* Viewの実装

##Bookmarkモデルの仕組み(多対多)
で、いざお気に入り機能をつけよう!となってもどうやって実装するの・・・?となります。なので、まずどうUserモデルとBoardモデルに紐づけていくのか考えて見ましょう。

###UserとBookmarkとBoardの関係
ユーザーと掲示板とブックマークの関係を見ていきましょう。

ユーザーはたくさんの掲示板をブックマークすることができます。反対に、掲示板はたくさんの

元記事を表示

CSSの記述が間違っていてエラーが出た話

## 環境
macOS Catalina 10.15.7
Ruby on Rails 6.0.0
RSpec 4.0.1
pry rails 0.3.9

## エラー内容
RSpecで `visit root_path` を実行したタイミングでエラーが発生した。

“`terminal:console
Failure/Error: <%= stylesheet_link_tag 'application', media: 'all', 'data-turbolinks-track': 'reload' %>

ActionView::Template::Error:
Invalid CSS after “…kground-color: “: expected expression (e.g. 1px, bold), was “##253141;”

# (sass):8
# ./app/views/layouts/application.html.erb:8:in `_app_views_

元記事を表示

Ruby on railsとLalavelどっちが良い?

技術選定の仕方

・自分のやりたい事が実現しやすい
・情報量が多い

プログラミングはあくまでも手段でしかなく、プロダクトの価値を最大化させることこそが目的である。またプログラミング言語は、基礎文法は少し変わるぐらいで大した差はない。言語に縛られるよりも、自分が言語に合わせて勉強していくほうが、プロダクトの価値も開発効率も上がる。

Ruby on railsを選びました

①scaffoldが便利
MVCの作成はrouteの設定までいい感じに自動で生成してくれる。

②情報量が多い!
ruby自体が日本発の言語ということもあり、qiitaの記事の数をはじめ日本語の説明の記事がlalavelよりも多い。

③コミュニティー内に参考にできるソースコードがある
身近にコードについて質問でき参考にできるコードがあるのは、めっちゃ楽。

>Rails: ある程度の規模まではレールに乗ってサクサク作れるが、アプリケーションが成熟してきて「規約」にはないことをやりたくなってくると、途端に求められる技術力や難易度が跳ね上がる。
Laravel: アプリケーションの雛形

元記事を表示

Vagrant + VirtualBox で初めての開発環境こうちく|既存のRailsプロジェクト + Mysql + Apatch

# はじめに
初めて Vagrant で開発環境を構築する方に向けて手順をまとめました。
初めて構築する方のために、専門用語の説明や、つまづきそうな箇所の説明も載せました。
それでは開発環境を構築していきましょう。

# 仮想マシンスペック
– OS                            :  CentOS release 7.1

– DB                            : mysql Ver

元記事を表示

個人アプリ開発日記 #5

# 投稿したり、投稿詳細表示、削除、一覧表示を実装していきます

まずは,何はともあれ

“`
rails g controller drinks
“`

“`
rails g model Drink
“`
を実行

コーヒーの感想を投稿しあうアプリなので、モデル名や、コントローラー名をcoffeeにしたかったのですが、
coffeeは不可算名詞なので、できるだけ避けた方が賢明。
という事でdrinkと命名しました、、、!!

画像も投稿したいので

“`
% brew install imagemagick
“`

をターミナルで実行

“`gem
gem ‘mini_magick’
gem ‘image_processing’, ‘~> 1.2’
“`

というgemをinstallして

“`
bundle install
“`

# drinks_controller

“`ruby
class DrinksController < ApplicationController include SessionsHelper before_acti

元記事を表示

【Rails】コントローラーの処理をモデル内のクラスメソッドとして記載する。

#テーマ
コントローラー内に処理を記載していき、コードが冗長になったり、同じ処理を様々なアクションで使用する場合、一つのメソッドとしてモデル内で定義することがあると思います。
簡単なやり方と、その際にちょこっとだけつまづいた点をまとめています。

#バージョン
ruby 2.5.7
Rails 5.2.4.4

#やり方

“`ruby:shops_controller.rb
def members

@table_customers = 2
@tables = 3

@all_customers = @table_customers * @tables
Shop.update(members:@all_customers)
#店内の総客数を計算するアクション
end
“`

上記のコードでは店内の客数を計算するアクションになります。
(簡略化のために今回は1つのテーブルの客数を2人、テーブル数を3卓と定義しています。)

このアクションをモデル内に定義する場合を順を追って解説します。

“`ruby:shops_controller.rb
def members

元記事を表示

【Rails】Mysql2::Error::ConnectionErrorの解消

Railsアプリにバリデーションを定義した後の、テストデータ登録の成功が目的の備忘録です。その為、バリデーションの定義、記述は終わっている状態です。
# データ保存したいのに、Mysql2に接続できない

Docker環境下のRailsアプリで、app/modelsにバリデーションを定義し、動作チェックの為にMySQLにデータ登録を試みました。そうしたら…..

“`
Mysql2::Error::ConnectionError at /Unknown MySQL server host ‘db’ (0)
“`

**MySQLに繋がってないよ**と怒られました。

[全く同じエラー](https://teratail.com/questions/289731)にハマっている方も居ましたが、解決策は載っていません。
記事に載っていた**docker-compose up**を実践するも、dockerは正常に起動していました。

いずれにせよ、データが登録できていないので、次はデータベースのチェックを行いました。

“`
①rails db:create
②rails db:m

元記事を表示

【Rails】bcryptを使ってログイン機能を作ったけど失敗した話

Railsでログインページを作っていました。
bcyrptのGemを使って作ろうとしたのですが、正しいメールアドレス・パスワードを登録し、ログインしようとしても「ログインに失敗しました」と表示され、なかなかできず…

#環境
Rails 5.2.4.4
DB:SQLite

#問題のあったコード
・gemfileにてcryptをインストール済み
・userモデルに has_secure_password を定義
・usersテーブルに password_digest:string を追加

“`ruby:users_controller.rb

class UsersController < ApplicationController def sign_in_process user = User.find_by(email: params[:email]) if user && user.authenticate(params[:password]) user_sign_in(user) flash[:success] = 'ロ

元記事を表示

Rails6 bootstrap

rails6にbootstrapをCDNで追加したところ、JSの動作不具合が多かった。下記の方法で実施すると不具合がなくなった為、備忘録として記述する。

参考URL: https://medium-company.com/rails-bootstrap/

Rails6標準の「yarn + webpacker」でBootstrapを導入

“`:console
yarn add jquery bootstrap popper.js
“`
Rails直下にあるpackage.jsonで確認

“`ruby:package.json
{
“name”: “test_pro”,
“private”: true,
“dependencies”: {
“@rails/actioncable”: “^6.0.0”,
“@rails/activestorage”: “^6.0.0”,
“@rails/ujs”: “^6.0.0”,
“@rails/webpacker”: “4.2.2”,
“bootstrap”: “^4.5.0”,

元記事を表示

自分で作成したRubyのアプリを指定した場所から始まるように設定するには

modelやcontrollerを作成しているとして、

例えば、app/views/tweets/indexを最初に表示させたいとして

config/routes.rbに

Rails.application.routes.draw do
 root to: ‘tweets#index’
 resources :tweets
end

と記述すれば最初に表示できる。

「root to:」は最初に表示させたいview(今回の場合は、’tweets#index’)を指定できる。

「resources :〜」はその後に記述するviewに向けてのルートを作成してくれる。

道路に例えると、「resources」で道を作り、「root to」でその道を選ぶという感じです。

元記事を表示

Railsプロジェクトをdocker-composeで環境ごとに構築

Railsのプロジェクト(Redmine)をdocker-composeを用いて、
環境ごとに管理していきます
今回はdockerを用いた環境構築を主軸としたため、
webサーバーなどの詳しい説明は省きます

作成:2020年11月24日
## 環境
Ubuntu18.04
Rails 5
Ruby 2.6.5
Redmine 4.0
nginx 1.15.8
Docker 19.03.13
docker-compose 3
MySQL 5.7

## 必要なもの
Dockerとdocker-compsoeが動く環境(今回はUbuntu18.04で実行)
Redmineのソース
やる気

## ざっくりとした方法
環境ごとにcomposeファイルを作成
環境変数COMPOSE_FILEを環境ごとに指定する

## コンテナ構成
– 開発環境
app(rails), db(mysql)
– 本番環境
app(rails, puma), db(mysql), web(nginx)

## フォルダ構成
docker-compose.develop.ymlが開発環境とテ

元記事を表示

ポートフォリオ作成記録 環境準備編

##目的
ポートフォリオ作成の記録として、Qiitaの投稿にすることに致しました。
また、自分が詰まったエラーなどの内容を記録して、
今後に役立つと思い始めました。
今回は題名の通り、環境構築の過程のメモを投稿しようと思います。

##使用環境
* MacBook Air (13-inch, 2020 )
* macOS Big Sur 11.0.1
* VSCode 1.51.1

##つまづいたこと
いざ、railsを私のMacにインストールといきたいですが、
私の環境が対応してないのでそこを対処が必要になりました。
原因は、エラーメッセージに

「Your CLT does not support macOS 11.0.
It is either outdated or was modified.
Please update your CLT or delete it if no updates are available.」

どうやら、XcodeのCLTを単体のみダウンロードしてインストールが必要でした。
その後、検索した記事内容のrbenvのインストールができました。

#

元記事を表示

Rails 掃除提案アプリのアルゴリズム

#はじめに
オリジナルアプリとして掃除提案アプリを開発しました。その際、苦労したところを忘れずに書き記します。

#目次
1.掃除提案機能の説明
2.必要なカラムとその型
3.Rubyのコード

#1.掃除提案機能の説明
予め掃除箇所の情報を登録する。登録情報に応じて、毎日どこを掃除すれば良いか提案する機能である。なお登録情報は下記3つ。
・掃除箇所名
・掃除頻度(○日に一回掃除する)
・最後に掃除した日付

提案のアルゴリズムとしては下記の通り。
①最後に掃除した日付と今日の日付から経過日数を算出する
②経過日数と掃除頻度を比較する
③結果に応じてtrueもしくはfalesを返す。
④falseとなった場合、提案(画面に表示)する。

#2.必要なカラムとその型
必要なカラムと型を下記に示す。状態は上記のtrueもしくはfalseが入るboolean型のカラムである。

|登録情報 |カラム名 | 型 |
|—————|——————|——-|
|掃除箇所 |place

元記事を表示

requestspecでlet!を使用する

requestspecを使ってコントローラーテストを行っていたのですが、let!の使い方に関して不明点があったため、記録として残しておきます。
letを始めRSpecに関する基礎的な文法についてはこちらの記事を参考にさせていただきました。
[使えるRSpec入門・その1「RSpecの基本的な構文や便利な機能を理解する」](https://qiita.com/jnchito/items/42193d066bd61c740612)

##開発環境
rails (6.0.3.3)
rspec-rails (4.0.1)

## 疑問内容
####なぜletではなくlet!なのか。

destroy以外では“:laundry“に対してletで通ったのですがdestroyアクションの時だけテストが通らずlet!にするとテストが通ります。
挙動としては以下を想定しています。

– 管理者(admin: true) → 削除を実行
– 管理者以外(admin: false) → 削除は行われずトップページにリダイレクトする

コードは以下のとおりです。(該当箇所のみ抜粋しています。)

元記事を表示

Rails on Dockerのgemの永続化について

背景

Dockerを利用したアプリ開発を行っていて、ログイン機能を搭載したくbcryptをGemfileに追加したが以下のエラーが出続け解決不能に。

“`
22: from /usr/local/bundle/gems/spring-2.1.1/bin/spring:49:in `


21: from /usr/local/bundle/gems/spring-2.1.1/lib/spring/client.rb:30:in `run’
20: from /usr/local/bundle/gems/spring-2.1.1/lib/spring/client/command.rb:7:in `call’
19: from /usr/local/bundle/gems/spring-2.1.1/lib/spring/client/server.rb:9:in `call’
18: from /usr/local/lib/ruby/2.6.0/rubygems/core_ext/kernel

元記事を表示

[Rails]exists?メソッド、present?メソッド、presenceメソッドについて勉強してみた![初心者]

#それぞれの違い
“exists?メソッド“
指定した条件のレコードがデータベースに存在するかどうか、真偽値で返すメソッド
“present?メソッド“
レコードの存在確認を行った後に、インスタンスを使って何か処理をしたい時に使用するメソッド
“presenceメソッド“
オブジェクトが存在すればそのオブジェクトを返し、オブジェクトが存在しなければnilを返すメソッド

#exists?メソッド

“`ruby:基本構文
オブジェクト.exists?(条件)
“`

“exists?メソッド“の引数に条件を指定すると、条件にマッチするレコードがあれば“true“を返し、レコードがなければ“false“を返します。

###指定したidのレコードを確認する方法
“`ruby:
pry(main)> User.exists?(1)
=> true
“`

###指定した条件のレコードを確認する方法
exists?メソッドの引数にハッシュ(カラム名: ‘値’)を渡します。

“`ruby:
pry(main)> User.exists?(name: ‘田中’

元記事を表示

Ruby on Railsでの頻出単語(まとめ)

Ruby on Rails似て、よく出てくる単語の意味をまとめたものです。
辞書的に使っていただけると幸いです。

[データベース関係]

rails g model テーブル名(はじめ大文字) カラム名:データ型
新しくテーブルとカラムを作るときに、ターミナルで使う

rails g migration ファイル名
テーブルに新しくカラムを追加するときに、ターミナルで使う

add_column :テーブル名, :カラム名, :データ型
マイグレーションファイルに、新しいカラム名を追加するときに使う

rails db:migrate
データベースに変更を加えるときに、ターミナルで使う

元記事を表示

Refileの使い方

## ImageMagickをインストール
本番サーバーとか開発環境に`image-magick`がないと動かないのでインストールしておく。

“`zsh:インストールされてるか確認
$ convert -version #以下のようにVersion: ImageMagick バージョン名が表示されていればOK
Version: ImageMagick 7.0.10-38 Q16 x86_64 2020-11-16 https://imagemagick.org
Copyright: © 1999-2020 ImageMagick Studio LLC
License: https://imagemagick.org/script/license.php
Features: Cipher DPC HDRI
Delegates (built-in): jng jpeg png tiff zlib
“`
“`zsh:インストール方法(Cloud9の場合)
$ sudo yum -y install libpng-devel libjpeg-devel libtiff-devel g

元記事を表示

このプログラムの考え方が知りたい…[Ruby]

#ひな祭り
##問題
#あなたが持っている 10 体の人形を “A”, “B”, “C”, “D”, “E”, “F”, “G”, “H”, “I”, “J” で表します。ひな壇の各段 (計 3 段) に並べる人形の数が与えられるので、各段にならべる人形の記号を改行区切りで出力してください。人形は必ずもとの A, B, C, … の順番で並べます。

例)

各段にならべる人形の数: 2, 3, 5

→ 人形の並べ方:

AB
CDE
FGHIJ
#入力される値
入力は以下のフォーマットで与えられます。

h_1 h_2 h_3
ひな壇の 1 段目、2 段目、3 段目に並べる人形の数を表す整数 h_1, h_2, h_3 がこの順に半角スペース区切りで与えられます。入力は 1 行となり、末尾に改行が 1 つ入ります。
#期待する出力
ひな壇への人形の並べ方を以下の形式で出力してください。

s_1
s_2
s_3
ひな壇の 1 段目、2 段目、3 段目に並べる人形を表す文字列 s_1, s_2, s_3 をこの順に改行区切りで出力してください。

s_i (1 ≦ i ≦ 3)

元記事を表示

【Rails】N+1問題 (Bullet で検出し includes して対策)

# はじめに
未経験からWeb系エンジニアへの転職を目指し、ポートフォリオ(投稿アプリ)を作成中です。
今回は、ポートフォリオにN+1問題を対応させてみたので、まとめてみました!

# 前提
– Ruby2.7.0
– Ruby on Rails6.0.3
– MySQL8.0

# N+1問題とは
– 必要以上にSQLの処理が行われて、システムのパフォーマンスが低下してしまうこと。
– レスポンスが遅く、ユーザビリティの低いサービスの原因の多くは、SQL周りにあることが多いらしい。
– SQLの発行回数を減らし、パフォーマンスを上げることが大事。

# N+1問題の検出
まずは、N+1問題を検出するためBulletというgemを試してみる。

“`ruby:Gemfile
group :development, :test do
gem ‘bullet’
end
“`

“`ruby:ターミナル
$ bundle
“`

Bulletは` config/environments/development.rb`に設定を追加しないと動作しないのでファイルを編集する。

元記事を表示

OTHERカテゴリの最新記事