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

Rails関連のことを調べてみた2020年08月13日
目次

取得するレコードを最新順表示にする方法

#取得するレコードの順番を変える
ツイートを並び替える方法は、表示の時に順番を変えるのではなく、情報を取得するタイミングで先に並び替えておきます。
##order メソッドを使用する
【例】

“`
インスタンス = モデル名.all.order(“並び替えの基準となるカラム名 並び順”)
“`
並び順にはそれぞれAscending/Descendingの略でASC(昇順)とDESC(降順)の2種類があり、値が「小さいものから大きいものになる」または「古いものから新しいのものになる」場合は昇順、その逆は降順を使います。

##tweets_controller.rbを以下のように編集
レコードが作成された日時情報を持つcreated_atカラムを基準に並び替えます。

app/controllers/tweets_controller.rb

“`
def index
@tweets = Tweet.includes(:user).order(“created_at DESC”)
end
“`
orderメソッドの引数として(“created_at DESC”)とすれ

元記事を表示

Ruby on Rails 基礎 覚書

Ruby on Rails覚書

Ruby on Rails の基礎を勉強中なので、自分自身で覚えるためにも覚書として残しておきます。

そもそもRuby on Railsとは

Rubyで書かれた、Webアプリケーションフレームワーク。MVC(Model, View, Controller)モデルを採用している。プログラマーの負担を軽減するために、必要なものを事前にフレームワークに用意してある。
基本理念として、「Don’t Repeat Yourself」, 「Convention over Cofiguration」の二つがある。

アプリケーションの新規作成

“`
rails new アプリケーション名
“`

アプリケーション名のフォルダが作成される

サーバを立ち上げる

“`
rails server
“`

トップページの自動作成

“`
rails generate controller home(コントローラ名) top(アクション名)
“`

トップページの自動作成

元記事を表示

ポート番号指定で、Railsサーバーを停止したい

デタッチモードでサーバーを起動する(`$rails s -d`)と便利なのだが、
よく停止するのを忘れてどのプロジェクトファイルがそのポート番号を使っているのかわからなくなり、tmp/pids/server.rbのファイルを消去して停止するという方法がとれない時がある。

そういう時は、

`$ Sudo kill -9 $(lsof -i :任意のポート番号 -t)`

で消す事ができる。

[参考記事①](https://bit.ly/30OpaID)、[参考記事②](https://bit.ly/3fTrz90)

元記事を表示

【Rails】いいね機能を非同期実装

# 1. はじめに
以下のデモ動画の様に、ユーザーが投稿した内容に対して”いいね”が出来る機能を実装していきます。
[![Image from Gyazo](https://i.gyazo.com/9eeae3a3b252bda35ee4b5b4639e7bdb.gif)](https://gyazo.com/9eeae3a3b252bda35ee4b5b4639e7bdb)

# 2. 前提条件
既にユーザー登録機能と投稿機能は実装されている前提で、そこに”いいね機能”を追加実装する。という流れで進めていきます。

下記の様なデータベース構造をイメージしてもらえたら分かりやすいと思います。
![ER 図(Qiita).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/645591/7a8e68e4-4e76-34fc-5712-90773d273815.png)

# 3. いいね機能の実装

**■実装するまでの流れ**

ざっくり説明すると、以下の流れで実装していきます。
・モデルの作成
   ↓

元記事を表示

【初学者向け】【Rails】 命名規則の理解の仕方を纏めてみた

※Qiita初投稿

どうも Toda Masaoです。

Railsを学習中 __”モデル名は単数系 / コントローラー名は複数形”__
といった単数形/複数形の命名規則に出会いました。

「どういう基準で単数・複数形を分けているんや…」
「そもそもこのヘンテコルールは何のために…」
と理解できない部分が多かったため、自分なりに調べてみました。

結果、初学者向けに分かりやすく解説されている記事がなかったので
自分なりの解釈(と調べた結果)を纏めてみました。

他初学者の方の理解を深める手助けになればと思います。
※解釈に誤りがあれば随時修正します

# 単数系と複数形にする理由

__ ・コントローラー名は末尾に”s”を付けて複数形にする
 ・モデル名は末尾に”s”を付けずに単数形にする__

という風にRailsには単数系複数形に関する命名規則があり、
これを遵守しない場合はエラーが発生するという強い制約があります。
まず「何のためにそんな制約を設けているの?」という点について疑問に思ったので調べてみました。

結果:
Railsには__「設定より規約」__というの基本理念があり

元記事を表示

Rails Tutorialを咀嚼する【第2章 Toyアプリケーション】

#2.1 アプリケーションの計画
■rails generate
以下4つの使い方がある。
1.rails generate controller
→コントローラーとビューとルーティングを生成
2.rails generate model
→モデルとマイグレーションファイルを生成
3.rails generate migration
→マイグレーションファイルを生成
4.rails generate scaffold
→全て(コントローラー、ビュー、モデル、マイグレーションファイル、ルーティング)を生成。

以下の説明が分かりやすい
https://diveintocode.jp/blogs/Technology/RailsGenerateCommand

■マイグレーション
マイグレーションファイルを元にDBのテーブル操作を行う仕組み。
直接SQL文を書かずにDBをいじれる。(テーブルの作成ができる)

■マイグレーションファイル
DBを生成する際の設計図。スクリプトファイル。
rails db:migrate を実行することでDBに反映される。

#2.2 Usersリソース
■r

元記事を表示

Railsで検索機能を実装する方法

今回はRailsで検索機能を実装する方法をご紹介いたします。
# 環境
– Ruby 2.5.7
– Rails 5.2.4

# 前提
– ブログサイトの記事を検索する機能として説明する
– 記事のテーブルはposts
– postsのカラムはtitle、body
– 記事一覧画面(index.html.erb)に検索フォーム、検索結果を表示

# 検索のルーティングを設定する

“`ruby:routes.rb
get ‘search’ => ‘posts#search’
“`
# 記事一覧画面に検索フォームを作成

“`html:index.html.erb

<%= form_with url: search_path, method: :get, local: true do |f| %>
<%= f.text_field :keyword, value: @keyword %>
<%= f.submit "検索" %>
<% end %>
【⭐️オススメ便利機能⭐️】~インデントを色で識別!?~

【概要】
—————————————-

1.オススメ便利機能とは

2.なぜ入れた方がいいの?

3.どのように使うの⁉︎

4.導入してわかったこと

1.オススメ便利機能とは
—————————————-
その名も”indent-rainbow

今すぐ、入れるべき‼︎

2.なぜ入れた方がいいの?
—————————————-
下記の画像を見てください!
インデントが列によって、
レインボーに色別されています!

スクリーンショット 2020-08-12 22.45.26.pngwwwなしの、SSL(https)にリダイレクトしたいときのNGINXの設定 -Route 53 + ELB (ACM) + EC2構成-

# 全てのトラフィックをwwwなしの、SSL(https)にリダイレクトしたい

# 結論

長いので先に結論だけ書きます

– SSL証明にACMを使い、ELBに証明書が適応されている状態を想定

– **ELB <-> EC2の接続がHTTP: 80の場合、NGINXはport 80でlistenする** (ここの気付きが重要でした)

– NGINXによるリダイレクトはwwwあり->wwwなしのみでよい

– **httpsリクエストをNGINXの80で受けるという設定に戸惑ったが、動作上これで良さそう**

# 現状と目標

`https`かつ、`www`なしのドメインをリクエストしないとSSL接続されない

理想は以下の全ての条件でSSL接続にリダイレクトしたいが現状は

“`
# wwwあり
http://www.mdclip.xyz -> http://mdclip.xyz (no SSL)
https://www.mdclip.xyz -> http://mdclip.xyz (no SSL)

# wwwなし
http://mdclip.xyz

Ruby on RailsのDevise gemを使ってエラーCouldn’t find User with ‘id’=sign_inが出た時の対処法

#発生したエラー内容
ユーザー登録やログイン認証のためにDevise gemを入れて、さらに自分でUser Controllerを作ったら、以下のエラーメッセージが出て、deviseのログイン画面やユーザー登録画面が動かなくなる、ユーザー情報画面が表示されないといったエラーが発生しました。

– ActiveRecord::RecordNotFound in UsersController#show
– Couldn’t find User with ‘id’=sign_in(sign_up)

###問題が発生した実行環境
– Cloud9(Ubuntu)
– ruby 2.6.3
– Rails 6.0.3.2
– Devise 4.7.2

#問題の原因
この問題が発生したのは、user/:idというルーティングが、user/sign_inやuser/sign_upを包括してしまっていたためでした。Railsのルーティングは上から順に読み込んでいき、合致するルーティングを探しているため、resources :users が先に読み込まれて、sign_inやsign_upをidだと

元記事を表示

ec2使用時にdockerの容量がいっぱいになった際の対処法

dockerを起動しようとしたら以下のエラーが発生した。

“`
$ docker-compose build
Failed to write all bytes for _codecs_cn.so
fwrite: No space left on device
“`

容量不足により起動不可となっているようだ。
以下のコマンドを叩くと容量を喰っているファイルを見つけることができる。

“`
$ df -h
ファイルシス サイズ 使用 残り 使用% マウント位置
devtmpfs 474M 0 474M 0% /dev
tmpfs 492M 0 492M 0% /dev/shm
tmpfs 492M 13M 479M 3% /run
tmpfs 492M 0 492M 0% /sys/fs/cgroup
/dev/xvda1 8.0G 8.0G 22M 100% /  //容量不足
tmpfs

元記事を表示

【Rails】定数は、config gemで管理しましょう

#環境

“`
$ rails -v
Rails 6.0.3.1
“`
“`
$ ruby -v
ruby 2.7.0p0 (2019-12-25 revision 647ee6f091) [x86_64-darwin19]
“`

#まずは、Gemのインストール

“`ruby:Gemfile
gem ‘config’
“`

“`shell
$ bundle install –path vendor/bundle
“`

#configの初期設定を行う

configの初期設定のために関連ファイルをインストールする

“`shell
$ bundle exec rails g config:install
“`

#定数定義と、使い方

“`config/settings.yml
service:
name: ‘vdeep’
url: ‘http://vdeep.net’

authentication_password: “foobarbaz”
“`

“`shell
$ rails c

> Settings.service.name
=

元記事を表示

独学半年の実務未経験がRails+Nuxt.jsでSPA作ったので見て欲しい

## はじめに

アプリを作ったのはいいものの、フィードバックをくれる人がいなかったのでQiitaで紹介記事を書くことにしました。
独学で周りにアドバイスをもらえる人がいないので、改善点などどんどん指摘してくださると幸いです。

# 自己紹介

作者は今年の2月末ごろから独学でプログラミングを学習しています。
高校時代にほんの少しHTMLを触ったことがある程度で、前提知識はほぼありませんでした。
現在はアプリを作成しながら、10月の基本情報に向けて勉強しています。
アプリ制作は今回で2作目になります。
[前作URL](https://faila.herokuapp.com/)
[前作リポジトリ](https://github.com/nizi24/FaiLa)

# アプリ概要

これが作成したアプリです。

[サイトURL](https://polpa.work/)
[githubリポジトリ](https://github.com/nizi24/PolPa)

[PolPa(ポルパ)](https://polpa.work/)は、学習時間に応じてレベルが上がる学習記録アプリです。

元記事を表示

[備忘録] “expect“の後ろは“()“か“{}“か。 (Module: RSpec::Matchers)

# 本編

RSpecのマッチャの書式についての個人的な小メモです。

## RSpecのバージョン

~~~
RSpec 3.9
– rspec-core 3.9.2
– rspec-expectations 3.9.2
– rspec-mocks 3.9.1
– rspec-rails 4.0.0.beta3
– rspec-support 3.9.3
~~~

## “expect“の後ろは“()“か“{}“か?

### 結論

下記のgem(“rspec-expectations (3.9.2)“)のドキュメントでMathersのページに各マッチャの記法が列挙されています。用例も多く掲載されています。([#change](https://www.rubydoc.info/gems/rspec-expectations/RSpec/Matchers#change-instance_method)など)

#### [Module: RSpec::Matchers — Documentation for rspec-expectations (

元記事を表示

jQueryとancestryを使ったカテゴリー選択機能(Ajax)

## はじめに
某プログラミングスクールにてフリマアプリを作成。
自分が実装した内容をメモとしてまとめたものです。
## 開発環境
– Rails 5.2.3
– Ruby 2,5.1
– jQuery
– gem ancestry

## やりたいこと
某メルカリサイトにある「カテゴリーから探す」にマウスを当てると動的に切り替わるカテゴリー表示機能。
[メルカリ](https://www.mercari.com/jp/)
ただし、正直使い難いと個人的に思うので
プラスで以下の条件を付け加えました。

– 親カテゴリー選択後、マウスを動かしただけでは子カテゴリーの表示は変えないこと。
– カテゴリーの枠からマウスが外れてもすぐに消えないこと。
– カテゴリーの表示枠は必要な分の高さだけにすること。

**最初に完成形を見たい方はこちらをクイック**

|[![Image from Gyazo](https://i.gyazo.com/7257d6555b8287ca84f1dac2d62f6753.gif)](htt

元記事を表示

Could not load the ‘listen’ gem. Add `gem ‘listen’` to the development group of your Gemfile (LoadError)というエラーの解決法について

Could not load the ‘listen’ gem. Add `gem ‘listen’` to the development group of your Gemfile (LoadError)というエラーの解決法について

原因は、gemのlistenが開発環境にあることにある。
つまり、
gem ‘listen’をdevelopmentだけではなく、全体に影響させればいいので、gemfileの最後に記述するとかして、bundle install bundle updateすれば、

解決するだろう。

元記事を表示

GitHubに100MB超えのファイルをプッシュしてエラーになった

Railsアプリを開発中に、GitHubにプッシュできなくなりました。
GitHubに100MB制限があることを知らず、少し苦戦しましたので備忘録として。

##エラー

いつもどおり、`git add` `git comit` `git push` と進めるとエラーが出ました。
development.logが100MBを超えてますよ、ということです。

“`terminal
・・・
remote: error: GH001: Large files detected. You may want to try Git Large File Storage – https://git-lfs.github.com.
remote: error: Trace: 13ec04b062a0cd9bb1a20e6a0b921ec7cf7396c0
remote: error: See http://git.io/iEPt8g for more information.
remote: error: File log/development.log is 150.13 MB; this exc

元記事を表示

検索機能の実装

##検索フォームを作成
検索の入力欄とボタンには、フォームを使います。

app/views/tweets/index.html.erb

“`
<%= form_with(url: search_tweets_path, local: true, method: :get, class: "search-form") do |form| %>
<%= form.text_field :keyword, placeholder: "投稿を検索する", class: "search-input" %>
<%= form.submit "検索", class: "search-btn" %>
<% end %>
“`
##searchアクションのルーティングを設定
“`
collection do
get ‘search’
end
“`
を以下のように追加

config/routes.rb

“`
Rails.application.routes.draw do
devise_for :users
root to: ‘tweets#index’
reso

元記事を表示

【Rails】deviseで行うアクセス制限にエラーメッセージを表示させる。

# はじめに
deviseを使っていると必ずと言っていいほど使うアクセス制限をかけるためのヘルパーメソッドauthenticate_user!。
制限をかけた際にログイン画面にページ遷移しますが、何も設定をしないとなぜページ遷移したかわかりにくいので「ログインして下さい。」等々エラーメッセージを表示させた方が、ユーザー目線を考慮したサイトにすることができます。

ポートフォリオを作成していた際に、そんな風に思い組み込んだことを備忘録として書き留めておきます。
①エラーメッセージの表示方法
②エラーメッセージの日本語化

## 前提
・gem deviseを使用している。
・before_action :authenticate_user!を使用したいコントローラに記述している。
【参考サイト】
[Rails deviseで使えるようになるヘルパーメソッド一覧](https://qiita.com/tobita0000/items/866de191635e6d74e392)

## ①エラーメッセージの表示方法
authenticate_user!を使用した際に「ログインもしくはサイン

元記事を表示

Railsアプリで時間を表示したときの「UTC」を消したい(Railsのタイムゾーンの扱い方)

#プログラミングの勉強日記
2020年8月12日 Progate Lv.226

#目標
 Railsアプリで投稿を更新した時間を表示させるようにした。

“`erb:views/posts/index.html.erb
<%= post.updated_at %>
“`
投稿を更新した日時を表示することができたが、時間の後ろに『UTC』という文字列が入ってしまっている。
『2020-08-08 11:56:59 UTC』

これを消して、以下のように表示させたい!!
『2020-08-08 11:56:59』

#方法
 RubyにはTime::strftimeメソッドがあり、これで時刻を好きなフォーマットに変更できる。

“`erb:views/posts/index.html.erb
<%= post.updated_at.strftime("%Y-%m-%d %H:%M:%S") %>
“`
これでUTCが消され、以下のように表示されるようになった。
『2020-08-08 11:56:59』

| 対応する日時 | フォーマットの指定子 |
|:–:|:–:|

元記事を表示

OTHERカテゴリの最新記事