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

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

【Rails】Ajaxを用いた非同期フォロー機能の実装

#目標

![ezgif.com-video-to-gif.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/579893/4f03a5f1-9776-aa34-d86b-568467e8c135.gif)

# 開発環境
・Ruby: 2.5.7
・Rails: 5.2.4
・Vagrant: 2.2.7
・VirtualBox: 6.1
・OS: macOS Catalina

# 前提

ログイン機能を実装済み。

ログイン機能 ➡︎ https://qiita.com/matsubishi5/items/5bd8fdd45af955cf137d

# フォロー機能を実装

### 1.モデル

“`terminal:ターミナル
$ rails g model relationship follower_id:integer followed_id:integer
“`

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

“`ruby:schema.rb
ActiveRecord:

元記事を表示

RailsでjQueryを使う

学習中に作っていたrailsアプリでjQueryを使いたかったのですが、
設定方法があいまいだったのでざっと調べました。
参考にしていただけると幸いです。

# jQueryを使いたい。

## 作業内容
**1.  ’jquery-rails’の導入**
**2.  turbolinksの停止。**
**3.  読み込みの確認。**

### 1.  ’jquery-rails’を導入する
最下行にjquery-railsを記載します。

“`ruby:Gemfile
gem ‘jquery-rails’
“`

### 2.  turbolinksを停止させる
Gemfileからturbolinksをコメントアウトする。

“`ruby:Gemfile
~変更前~
# Turbolinks makes navigating your web application faster. Read more: https://github.com/turbolinks/turbolinks
gem ‘turbolinks’, ‘~

元記事を表示

第13章〜マイクロポストを作る〜

#ユーザーのマイクロポスト
今回ユーザーが短いメッセージを投稿できるような機能を実装する。
#マイクロソフトモデルの作成
このMicropostモデルはデータ検証とUserモデルの関連付けを含んでいる
マイクロポストの内容を保存するcontent属性と特定のユーザーとマイクロポストを関連付けするuser_id属性の2つだけの属性だけをもつ。
Micropostはstring型ではなくtext型を使用する。
140文字制限をつけるので表示できる文字数などは差がないがtext型のフォームのほうがより自然な投稿フォームを実現できる。
Userモデルとの最大の違いはreferences型を利用している点である。
これを利用すると自動的にインデックスと外部キー参照付きのuser_idカラムが追加され、UserとMicropostを関連付けする下準備をしてくれる。

“`
add_index:micropost,[use_id,:create_at]
“`
このコードはあるユーザーを検索したいときにUsersテーブルのnameカラムにインデックスを張ってないと、プログラムは、Userテーブルの

元記事を表示

【Rails】繰り返し処理でメニューを簡単に作る方法

#はじめに
下の記事「【爆速実装】夢と魔法のeach文【Rails-haml】」の記事を見て爆速でメニューが作れることを知りました。
https://qiita.com/enjoy_omame/items/c9f14f9cbb9bd2408a18
すげぇ。なんじゃこりゃ!

で、この記事なんですが、あくまで”簡単に作る方法”を解説してくれています。遷移先などの実装には触れていません。
きっと**「ここからは自分で考えて実用的にしましょうね」**という意図があるのだろう。と、言っているんだと思います。僕には聞こえました。そんな副音声が!
なので、自分なりに考えて実用的な実装をしてみたので今回記事にしてみます。

#実装した内容
こんな感じのメニューを繰り返し処理で実装します。
今回は、usersコントローラ内のshowアクション(ここで繰り返し処理の元になるネタをしこむ)を介して、show.html.haml(ここで仕込んだネタを繰り返し処理して)表示するといった感じに処理が走ってます。
スクリーンショット 2020-04-09 0.46.1</p></blockquote>
</blockquote>
<aside class='widget widget-post'>
<div class='tag-cloud-link'>Ruby</div>
<div class='tag-cloud-link'>Rails</div>
<div class='tag-cloud-link'>配列</div>
<div class='tag-cloud-link'>each</div>
<div class='tag-cloud-link'>初学者向け</div>
</aside>
<div><a style='width:100%;' class='btn__link' href='https://qiita.com/dr_tensyo/items/5dc9b769e168249def8e'>元記事を表示</a></div>
<h3 id=AWS初心者の自分でも、RailsアプリをAWS EC2にデプロイ成功できた方法

#はじめに
備忘録も兼ねて、RailsアプリをAWSにデプロイする手順をまとめました。筆者自身、ずっとデプロイをHerokuに頼り切っていたのもあり、そろそろHeroku以外の方法でデプロイをしてみたいなと思い、試みた次第です。
この記事では、非常に解説が丁寧な世界一丁寧なAWS解説シリーズベースにデプロイ作業を進めていき、途中で詰まった箇所をところどころ訂正していきます。概念などの詳しい説明は上記記事を見ていただくのが早いです。

なお、この記事では、コマンドは全てMacでの使用を想定しています。ご了承ください。
また、作業の過程で開発環境(local)でのコマンド操作と、EC2インスタンス内でのコマンド操作(remote)に分かれるので、ターミナルを2ウィンドウ用意しておくと捗るかと思います。

#1.ざっくりとした流れ
この記事では、AWSのRDSを利用せず、EC2インスタンスにDBのシステムそのものをインストールする方式を採用して

元記事を表示

Railsチュートリアル9章攻略の第一歩を踏み出す。【セッション永続化編】

##はじめに
9章の解説は私にとってあまりに複雑だったので
少しだけわかりやすく理解できるように、9章の中でも__セッションの永続化__に関する内容を簡単にまとめてみました。

##前提
Railsチュートリアルでログイン機能が実装してあり、尚且つ9章を一応は終えたがそれでも理解度は低めだと感じている方。

##内容
セッション永続化機能の実装。
簡単に言うと、ブラウザを閉じてもログインを保持することができる機能です。
見たらわかるめちゃくちゃ便利な機能って事で絶対に物にしたいです。

ほぼ箇条書きでまとめてあります。
キリの良いポイントまで一旦まとめてから、コードの記述を行っています。

##実装手順
前置きが長くなりましたが、進めていきます。
ログイン保持機能を実装する手順を簡単にまとめると以下のようになります。

__1.永続セッション作成の準備__
__2.永続セッション作成__
__3.上記を利用して、ログインユーザーのログインを保持する__
__4.永続セッションからログアウトできるようにする__
__5.上記機能実装により発生するバグを修正する__

では、より詳

元記事を表示

【Rails5】個人的に使ってみたいな~って思ったビューヘルパーメソッドまとめ

## はじめに
最近、「もっとRailsのことを知りたいな~」と思い技術書を学習しています!
その中で驚いたのがビューヘルパーメソッドの数!??

全部忘れてしまう前に、「これ使ってみたいな~」と思ったビューヘルパーメソッドをまとめていきます!

ご自身でアプリを作っている方、作ろうとしている方のヒントに少しでもなれたら嬉しいです!??
(※学習している技術書が新しい技術書ではないので内容ちょっとふるいとこあるかもです。)

## フォーム関連のメソッド

### file_field

⇩ファイルの入力ボックスを作成する
file_field.png

“`erb

<%= f.file_field :プロパティ , オプション %>

<%# 使用例 %>
<%= f.file_field :image ,

元記事を表示

セッションハイジャック

##セッションハイジャック
セッションハイジャックとは名前の通り、なんらかの方法を用いて正規利用者ではないものが他人のセッションIDを乗っ取る攻撃手法です。
セッションハイジャックが行われた場合、アプリケーション内で正規の利用者ができることはほとんど実行が可能なので、正規利用者の個人情報閲覧、送金や物品購入、なりすましメールの送信やSNSへの犯罪予告など正規利用者への被害はとても大きくなります。
###セッションハイジャックの攻撃手法と対策
セッションハイジャックの具体的な攻撃手法
①セッションIDの推測
②セッションIDの盗み出し
③セッションIDの強制
###セッションIDの推測
Webアプリケーションに用いられるセッションIDの生成規則に問題があると、第三者にセッションIDが予測され、悪用されてしまう可能性があります。
生成規則に問題があるセッションIDは以下のようなものを元に生成されているものが多いです。
①ユーザIDやメールアドレス
②リモートIPアドレス
③日時
④乱数
上記のものをそのまま使う場合や、エンコードやハッシュ計算というものと合わせて利用される場合があります。

元記事を表示

docker-compose upするだけでDB作成とマイグレーションもしたい!

# はじめに

チーム開発のメンバーからある日こんな要望が。

「docker-compose upした後に毎回rails db:create, rails db:migrateするの面倒すぎる。なんとかしろ。」

とのお達しがあったので、主にDocker、CircleCI、AWS周りを担当する僕が対応することとなりました。

僕も元々Railsからプログラマーの世界に飛び込んでいるので、Railsを書いていた時は思考停止して一つ一つのコマンドを叩いていたのですが、

確かにこれ面倒臭い…。

ということでさっさと自動化していきましょう〜!

# コマンド一発でrails db:createするには?

## 今回実現すること

今まで、

“`shell
docker-compose up
“`

“`shell
docker-compose exec api bin/rails db:create
“`

“`shell
docker-compose exec api bin/rails db:migrate
“`

と順番にコマンドを叩いていたところを、

“`

元記事を表示

Ruby on Railsのチュートリアル ~第3章ほぼ静的なページの作成~

# はじめに
webアプリケーションを作るための学習記録
(マッチングアプリを作る予定)

こちらのチュートリアルを片っ端から進めていく
【Ruby on Rails チュートリアル】
https://railstutorial.jp/

# 第3章ほぼ静的なページの作成
## まとめ
– 新しいRailsアプリケーションをゼロから作成したのはこれで3度目。今回も必要なgemのインストール、リモートリポジトリへのプッシュ、production環境まで行った
– コントローラを新規作成するためのrailsコマンドはrails generate controller ControllerName アクション名 (省略可)。
– 新しいルーティングはconfig/routes.rbファイルで定義する
– Railsのビューでは、静的HTMLの他にERB (埋め込みRuby: Embedded RuBy) が使える
– 常に自動化テストを使って新機能開発を進めることで、自信を持ってリファクタリングできるようになり、回帰バグも素早くキャッチできるようになる
– テスト駆動開発では「red ・ g

元記事を表示

アプリが正しく動かない時に、検証ツール、ターミナルのログ、binding.pry、正しく挙動する別アプリとの比較を使って、原因を探ってみた。

## 「問題の切り分け」と「仮説→検証」の重要性
上手くアプリが動かない時に、闇雲にコードを修正するのではなく、原因となりうる箇所を細かく切り分けながら解決していくことが重要だと、感じます。
そこで今回は、そのような手順でについて、いかに記していきます。

## 【今回の問題点】掲示板を編集し、更新ボタンを押しても内容が変更されない。

掲示板の投稿文を編集し、更新ボタンを押しても、編集前の投稿文から何も内容が変わらないという問題が発生しました。

### ソースコード
“`
(app/views/boards/edit.html.erb)
<% content_for(:title, t('.title')) %>

<%= t ('.title') %>

<%= render 'form', { board: @board } %>

元記事を表示

Ruby on Railsのチュートリアル ~第2章Toyアプリケーション~

# はじめに
webアプリケーションを作るための学習記録
(マッチングアプリを作る予定)

こちらのチュートリアルを片っ端から進めていく
【Ruby on Rails チュートリアル】
https://railstutorial.jp/

# 第2章Toyアプリケーション
## まとめ
– Scaffold機能でコードを自動生成すると、Webのあらゆる部分からモデルデータにアクセスしてやりとりできるようになる
– Scaffoldは何よりも手っ取り早いのがとりえだが、これを元にRailsを理解するには向いていない
– RailsではWebアプリケーションの構成にMVC (Model-View-Controller) というモデルを採用している
– Railsが解釈するRESTには、標準的なURLセットと、データモデルとやりとりするためのコントローラアクションが含まれている
– Railsではデータのバリデーション (validation) がサポートされており、データモデルの属性の値に制限をかけることができる
– Railsには、さまざまなデータモデル同士を関連付けを定義するための組み

元記事を表示

Ruby on Railsのチュートリアル ~第1章ゼロからデプロイまで~

# はじめに
webアプリケーションを作るための学習記録
(マッチングアプリを作る予定)

こちらのチュートリアルを片っ端から進めていく
【Ruby on Rails チュートリアル】
https://railstutorial.jp/

# 第1章ゼロからデプロイまで
## まとめ
– Ruby on Railsとは、Web開発のためのフレームワークであり、Rubyプログラミング言語によって記述されている。

– 事前設定済みのクラウド環境を利用することで、Railsのインストール、アプリケーションの生成、生成されたファイルの編集を簡単に行うことができる。

– Railsにはrailsという名前のコマンドラインコマンドがあり、rails newで新しいアプリケーションを生成したり、rails serverでローカルサーバーを実行したりできる。

– コントローラのアクションを追加したり、ルートルーティングを変更したりするだけで「hello, world」アプリケーションを作成できる。

– Gitによるバージョン管理を導入し、Bitbucketの非公開リポジトリにプッシュする理由は

元記事を表示

マイグレーションで指定する、数値型カラムのlimitの値と、PostgreSQLで作成される型の対比

# 環境
Vagrant + Ubuntu 16.04.5 LTS
Rails 5.2.4.2

# はじめに
Railsのマイグレーションでintegerカラムを作る時、limitで指定する値で、実際に作られるデータベースの型が違ってくる。

参考URLでは、MySQLで試したテスト結果だが、PostgreSQLで同じようなテストを行ってみた。

> 参考URL
https://qiita.com/Yinaura/items/cede8324d08993d2065c

# テスト結果(integer)
テストで用意した項目は下記。因みに、**limit:で指定する数値の範囲は、1~8の範囲のみ有効**になります。

“`db/migrate/xxxxx_create_task_test01s.rb
class CreateTaskTest01s < ActiveRecord::Migration[5.2] def change create_table :task_test01s do |t| # t.integer :integer0, limit:

元記事を表示

[Rails]画像の複数投稿とプレビュー機能 ~ fields_for ~

# はじめに
以前に最大1枚の画像プレビュー機能について書きましたが、
この記事では、その応用として画像の複数投稿を実装するまでを書いていきます。
[[Rails]画像選択時にプレビュー表示](https://qiita.com/Masanori_N/items/71dbf648737f32dd8588)
albumモデル(親)
photoモデル(子)
今回はアルバム名をalbumsテーブルのnameカラムに、
写真をphotosテーブルのimageカラムに保存していきます。

– Ruby 2.5.1
– Ruby on Rails 5.0.1.7
– Carrierwave Gem
– 画像投稿は最大5枚
– 今回はalbumモデルを渡した1つのフォームの中でfields_forを用いてphtosテーブルへの保存も行う

なお、Carrierwaveの設定は今回の記事では割愛させていただきます。

## アソシエーションを組む

今回はfields_forを使用するため以下の記述となります。
fields_forについては、また別の記事に書こうと思います。

““album.r

元記事を表示

Rspec速度改善 #1

今回に5つのRspecの速度改善方法をご紹介したいと思います。

[1. Parallel Testing](#1-parallel-testing)
[2. Adding gem `test_prof`](#2-adding-gem-test_prof)
[3. Optimize Setup Time](#3-optimize-setup-time)
[4. Using `stubs` and `mock`](#4-try-using-build_stubbed-or-build)
[5. Using `trait` in Factory](#5-using-trait-in-factory)

# 1. Parallel Testing

## parallel_testsとは

– マルチコアCPUで並列実行するテスト用のGem

## parallel_testsを導入する方法

Gemの[ホームページ](https://github.com/grosser/parallel_tests)に参考してください。

## Note

– CPUのRamをよく食い尽くすので

元記事を表示

テストで流しただけのマイグレーションファイルを履歴から削除する

# 環境
Vagrant + Ubuntu 16.04.5 LTS
Rails 5.2.4.2

# はじめに
テストの目的で作成したマイグレーションファイルが不要になったので、ファイル自体を、rmで削除したのだが、マイグレーションの履歴には下記のように残ってしまう事になります。気持ちが悪いので履歴からも削除してみましょう。

“`
$ rails db:migrate:status

database: syougai_development

Status Migration ID Migration Name
————————————————–
up 20200407073641 Create tasks
up 20200408005922 ********** NO FILE **********
up 20200408005924 ********** NO FILE **********
up 20200408005926 Chan

元記事を表示

[Rails] Microsoft TeamsのタブにRedmineを表示する

# TeamsのタブにRedmineを表示したい

Teamsには、任意のWebサイトをタブに表示する機能があります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/59475/6c4b990a-636d-0ffc-2c2c-a78f05306f18.png)

## けど、できない

Railsアプリはデフォルトで`X-Frame-Options: SAMEORIGIN`ヘッダを出力するようになっているので、`iframe`を使っているTeamのタブには表示されません。

## HTTPヘッダを変更する

Railsアプリの出力するHTTPヘッダは、**/usr/lib/ruby/vendor_ruby/action_dispatch/railtie.rb**に設定されています。

“`ruby
config.action_dispatch.default_headers = {
‘X-Frame-Options’ => ‘SAMEORIGIN’,
‘X-XSS-Prote

元記事を表示

【Rails】deviseを用いた名前ログイン機能の実装

#目標

![ezgif.com-video-to-gif.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/579893/6387f46a-3013-7da2-c528-424d29c64530.gif)

# 開発環境
・Ruby: 2.5.7
・Rails: 5.2.4
・Vagrant: 2.2.7
・VirtualBox: 6.1
・OS: macOS Catalina

# ログイン機能を実装

### 1. アプリケーションを作成

“`terminal:ターミナル
$ rails new devise_name
“`

### 2. トップ画面を作成

“`terminal:ターミナル
$ cd devise_name
“`

“`terminal:ターミナル
$ rails g controller homes top
“`

“`ruby:routes.rb
Rails.application.routes.draw do
root ‘homes#top’
end

元記事を表示

【SearchConsole】data-vocabulary.orgが非推奨に、パンくずgemのgretelを互換性のあるbuoysに乗り換え

# railsの超有名gemであるgretelからbuoysに乗り換えました。
railsの言わずと知れたパンくずのgemである、gretelですが現時点(2020/04/08)ではdata-vocabulary.orgを利用しているため
schema.orgを利用している buoys にライブラリを乗り換えました。

乗り換え方法はページ下部に記載。

## rails の gretel もそのうち対応されそうです。
現時点では対応されておりませんが。
グレーテルのFork先でPRが作られた、対応される見込みはあるとおもいます。

https://github.com/WilHall/gretel/pull/17

issueの方でも対応する予定はありますとコメントがありますね。
https://github.com/WilHall/gretel/issues/16

なので今は慌てて対応せずモンキーパッチで対応するのも良いかと思われます。

@yamitake@github 先生の記事が参考になります
https://qiita.com/yamitake@github/items

元記事を表示

OTHERカテゴリの最新記事