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

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

パイプでつないでgrep?: Railsチュートリアル備忘録 – 8章

調べた内容を3分で振り返ることができるようにメモ

パイプ機能でコマンドをつなぐ?grep?
親切に”ターミナルの”と表記されているのがポイントでした

##演習内容
>ターミナルのパイプ機能を使ってrails routesの実行結果とgrepコマンドを繋ぐことで、Usersリソースに関するルーティングだけを表示させることができます。同様にして、Sessionsリソースに関する結果だけを表示させてみましょう。現在、いくつのSessionsリソースがあるでしょうか?
(Railsチュートリアル 第6版 8.1.1)

##パイプ?
`|`(パイプ)
わかりやすくて大好きです
コマンドの出力結果を次に渡す処理をする

##grep
ファイル中の文字列に対して正規表現を使って検索し表示するLinuxコマンド
(今回は理解した気になって進みます)

##使ってみる
`rails routes`を実行すると

“`
$ rails routes
Prefix Verb URI Pattern Controller#Action
root GET / static_pages#

元記事を表示

【Rails】Cloud Vision APIを用いて画像解析し、過激な画像を検知する方法

# 目標

`refile`でユーザーのプロフィール画像を編集した場合、
アップロードする画像を`Cloud Vision API`で画像解析し、
過激な画像の場合はDBに保存出来なくする。

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

# 前提

下記実装済み。

・[ログイン機能実装](https://qiita.com/matsubishi5/items/5bd8fdd45af955cf137d)
・[投稿機能実装](https://qiita.com/matsubishi5/items/1a5aeab651b5822d1f2c)

# `Cloud Vision API`を有効化

### 1.下記記事の「Geocoding APIを有効化」と同様の手順で、Cloud Vision APIを有効化して下さい。
[Geolocation APIを用いて緯度経度を算出する方法](https://qiita.com/matsubishi5/items/0

元記事を表示

【Rails】redirectとrenderの違いは?

## はじめに

redirectとrenderの違いって何だか分かりますか?
Rails初学者であれば意外と理解できていない人もいるかと思うので簡単に説明します。

## ズバリ違いはこれ

違いは何かというと、**コントローラを経由するかどうか**です。
それぞれ処理の流れを書いてみます。

■ redirect
リクエスト送信
→ ルーティングでコントローラとアクションを特定
→ 指定のコントローラ内のアクションが動作
→ 動作したアクションに対応するビューファイルがレスポンスとして表示される

■ render
指定のビューファイルを表示

## 使い分けは?

良く見かける例でいくと、投稿データを保存するという処理をする場合、保存に成功した場合はredirect、失敗した場合にはrenderを使うという使い分けになるかと思います。
コードの例を使って少し説明してみます。

“`ruby:post_controller
def new
@post = Post.new
end

def create
@post = Post.new(post_params)
if

元記事を表示

【Rails】Catalinaでrails sコマンド実行時に「Could not find a JavaScript runtime.」とエラーが出る場合の対処法

# エラー内容
> Could not find a JavaScript runtime. See https://github.com/rails/execjs for a list of available runtimes. (ExecJS::RuntimeUnavailable)

# 対処法
gem ‘therubyracer’ はハマりやすいのでやめたほうが良い。
Node.jsをインストール
https://nodejs.org/en/

元記事を表示

DockerでRuby2.7.x+Rails6.0.x+MySQL8.0.xな環境を構築する

[dockerにあるサンプル](https://docs.docker.com/compose/rails/)で作る環境はRuby2.5+Rails5+PostgreSQLと古め且つPostgreSQLだったので、それぞれ新しいバージョン&MySQLの場合で書き換えたものです。
※2020年6月8日時点ではRuby2.7.1, Rails6.0.3.1, MySQL8.0.20

## ファイルの用意
1. Dockerfile
– Gemfile
– Gemfile.lock
– entrypoint.sh
– docker-compose.yml
– .env

※ docker及びdocker-composeのインストールは済んでいること
※ アプリケーションの名前は`myapp`とし、変更する場合は適宜置き換える

### 1. Dockerfileの用意
“`docker
FROM ruby:2.7
# or latest

# nodejsとmysql-client (default-mysql-client) のインストール
RUN apt-get update -qq

元記事を表示

twitterアイコンをs3に保存する

# やること

twitterログインで取得してくるtwitterアイコンのリンクがすぐに切れてしまうのでs3に保存する。

# 実装内容

– rails
– 画像保存はcarrierwaveを経由でs3

## twitteromniauthの実装

https://qiita.com/puremoru0315/items/f1d459b663fd3b715dee

上記記事が分かりやすかった

## 新規登録時にのみ画像保存の処理

omniauthで下記の処理を書いている

“`user.rb
class User < ApplicationRecord mount_uploader :image_url, ImageUploader #引数に関連するユーザーが存在すればそれを返し、存在しまければ新規に作成する def self.find_or_create_from_auth_hash(auth_hash) #OmniAuthで取得した各データを代入していく provider = auth_hash[:provider] uid =

元記事を表示

サーバレス運用試験

サーバレス環境でのサービスを、Rails関連のフレームワークを組み合わせて、開発運用する試験的な取り組み。

## 構成図

`jet` >- `rails` –< `database, redis, etc` ## 開発手順 RailsのAPIサーバを公開する。 Jetsのプロジェクトを公開する。 上記は、全てローカルでも良い。 git hub等の設定(CI CD)

元記事を表示

Capistranoを用いた自動デプロイ

## Capistranoとは
自動でデプロイが行えるツールです。
Capistranoを使うことで、以下の2つの記事で行ったデプロイ作業が自動化できます。
AWSへのRailsアプリのデプロイ その1
AWSへのRailsアプリのデプロイ その2

## gemのインストール
まずは必要なgemのインストールから行います。

“`
group :development, :test do
gem ‘capistrano’
gem ‘capistrano-rbenv’
gem ‘capistrano-bundler’
gem ‘capistrano-rails’
gem ‘capistrano3-unicorn’
end
“`
“`
bundle install
“`
gemをインストールしたら、以下のコ

元記事を表示

rails-tutorial第13章

#Micropostモデルの作成

投稿はユーザと紐付ける必要があるので、

必要なカラムは、content:text と user_id:integerである。

では、それを作るコマンドを見ていこう

“`
$ rails generate model Micropost content:text user:references
“`
user:referencesをすることで、user_idとidの結びつきを指定することができるらしい。
ショートカットの方法の一つ

そうすると、micropostモデルファイルは、、

“`app/models/micropost.rb
class Micropost < ApplicationRecord belongs_to :user end ``` ###できたマイグレーションファイルにindexを追加する ```db/migrate/[timestamp]_create_microposts.rb class CreateMicroposts < ActiveRecord::Migration[5.0] def

元記事を表示

rails-tutorial第12章

#パスワードの再設定

必要なのは、ユーザーにemailを入力してもらうためのフォーム、アクション、こちらで受け取るためのアクション、

そして、urlをクリックしてもらったら、パスワードを再設定するためのeditアクションとフォーム、updateアクションが必要となる。

###まずはPasswordResetsリソースを作る必要がある。

$ rails generate controller PasswordResets new edit –no-test-framework

–no-test-frameworkは今現在の統合テストで十分足りている時にかく。
これにより、rails g controllerに付随するテストをスキップすることができる。

###ルーティングを設定する。

“`config/routes.rb
Rails.application.routes.draw do
root ‘static_pages#home’
get ‘/help’, to: ‘static_pages#help’
get ‘/about

元記事を表示

rails-tutorial第11章

#アカウントの有効化

###アクションメーラーの流れ

パスワードダイジェストと似ていて、平文をメールで送って、ユーザーに平文付きのurlをクリックしてもらう。getリクエストでそのurlにアクセスさせる。そのurlの中にある平文を参照する。その平文をハッシュ化したものとDBの中身が同じかどうかで判断する。

平文をどこに置くかの違い。頭の中か(パスワード)、ブラウザの中か(クッキー)、インボックスの中か(メール)。

###アカウント有効化の流れ

1.ユーザーの初期状態はunactivated(有効化待ち)
2.signup時に有効化トークンとそのダイジェストを生成
3.DBにダイジェストを保存して、有効化トークンをsignupしたユーザーのメールアドレスに送る。
4ユーザーがメール内のリンクをクリックしたら、emailを使ってDB検索し、ダイジェストと比較する。
5.認証が通れば有効化、通らなければhomeを表示

###AccountActivationsコントローラを作ろう

$ rails generate controller AccountActivations

元記事を表示

【Rails】link_toでデータの受け渡しをしたい(途中)

# やりたいこと

リンクのリクエスト先は同じだが、リンクの押されたページごとに違う処理を行いたい。
そのために、リンクが押された時に、ページ判別用のflagを渡したい。

遷移パターンは以下の通り

– 一覧(scolor/index)→削除→TOPページ(scolor/index)
– 詳細(scolor/[:id])→削除→「削除しました」画面(scolor/delete)

# 実装方法

## destroy_pathをルーティングで定義する

[【Rails入門説明書】redirect_toについて解説](https://web-camp.io/magazine/archives/18271)

## link_toでidとflagのparamを渡す
<%= link_to "削除", destroy_path_url(id: scholor.id, flag: 0) %>

# 参考
– [Railsのlink_toでparamsを飛ばす方法](https://qiita.com/ATORA1992/items/566d76a7092bff40df4c)

元記事を表示

【Rails】プルダウンボックスを使って、日付やいいねの数などの条件でソートする

## 始めに
オリジナルアプリに投稿を日時やいいねの数によってソートする機能が欲しくて、結構ハマりつつ何とか実装できましたので、備忘録として残しておきます。

## 前提
__●環境__
 ・Ruby 2.6系
 ・Rails 5.2系
__●使用ライブラリ__
 ・Slim
 ・devise
__●いいね機能が実装してあること__
 ・[【Rails】いいね機能の実装](https://qiita.com/kurawo___D/items/d8115ecae71164a70f18)(この記事でSlimとdeviseの導入も行ってます)

####↓実装後はこんな感じです↓
(見栄え悪くてゴメンナサイ…)
![ezgif.com-video-to-gif.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/606750/a5639a16-6d5b-c0fc-5034-6bc12e1ff1e7.gif)

## 実装

#### 1. まずはプルダウン用フォームのビューを作成

“`ruby:app/vie

元記事を表示

Rails資産を活かして、webpackによる Vue (Single File Components) 共存を試みた際の調査まとめ

Rails と Vue の共存をしたい。
できれば以前のコードを活かしたい。
既存アプリケーションをいきなりSPAにするには敷居が高い。

そう考えて調査したことをまとめました。

大きな流れではVue単一コンポーネントやSPAへ置き換えていく方向で検討したいが、既存のRails/Hamlで生成しているテンプレートも資産として捨てがたい。という方向け。

# 2つのアセットパイプラインを理解する
まずは、次の2つのアセットパイプラインを理解する必要がありました。
いままでRailsの恩恵を受けて、理解せずにきましたが、ここできちんと理解できたのはよかったです。

端的にいうと、
1. webpack : Rails5.1 で対応し、Rails6 からデフォルトになっている
2. Sprockets : Rails 5 までのデフォルト
であることを理解する必要があります。
Rails5.2 から Rails6 への移行時には、webpack 対応を行うきっかけにもなります。Rails5.1以上であれば webpacker(=Railsのwebpack対応) をいれておいてから Rai

元記事を表示

[Rails]本番環境で画像を表示させる

# こんな時
ローカル環境で表示されていた画像が本番環境で表示されない!
チーム開発中に思わぬところでつまずいたので備忘録残します。

# 解決方法
HamlやScssファイルの記述方法を変えるだけ。

画像はassetsのimagesに保存。

“`html:haml
# 変更前
= image_tag (‘/assets/画像パス.拡張子’)

# 変更後
= image_tag asset_path(‘画像パス.拡張子’)
“`

“`css:scss
# 変更前
background-image: url(“/assets/画像パス.拡張子”);

# 変更後
background-image: image-url(“画像パス.拡張子”);
“`

ありがとうございました。

元記事を表示

【Rails】scssフォルダ構成について

# scssフォルダ構成について

### 目次
1. cssからscssに変更にあたって
2. scssフォルダ構成

## 1. cssからscssに変更

プログラムで利用しているcssをscssに変更しました。
scssを利用すると入れ子構造で記述ができるため、セレクタの記述量が減り、可読性の高いコードになります。また、変数を利用できプログラム言語のような記述をすることが可能になります。その他にも演算・関数を利用できるようになり、従来のcssのような冗長な記述を解消することが可能になります。
scssではフォルダ構成が少し変わるので、備忘録としてまとめました。

## 2. scssフォルダ構成
scssのフォルダ構成は以下のようになります。

|フォルダ | 説明 |
|:–|:–|
| config | プロジェクトの設定ファイルや、scssで使用する変数を定義するファイルなどを管理するフォルダです。 |
| mixin | scss内で使用するmixinファイルを管理するフォルダです。 |
| modules | モジュールを管理するためのフォルダです。 モジュールと

元記事を表示

【Rails・MySQL】データベース論理名の設定について

# データベース論理名の設定について
今回は(contacts[お問い合わせ]テーブルを例に説明)

### 目次
1. 物理名・論理名について
2. 論理名を設定するにあたって
3. 論理名の設定

## 1. 物理名・論理名について

#### 物理名
コンピュータが認識している実際の名前
例:[contacts]テーブル

#### 論理名
人間が認識できるように設定した名前(呼び名)
例:[お問い合わせ]テーブル

## 2. 論理名を設定するにあたって
大規模のプロジェクト開発では、テーブル数が100以上となったり、1テーブルにカラム数が数十個存在するという状況があります。これだけ数が多いとテーブル・カラムを探したり、他のメンバーについて説明を行うことが非常に手間となったりします。英語表記(**物理名**)だけであると、英語の意味を理解できていない場合、検索をしなければなりません。
日本語表記(**論理名**)があると少し楽なんだけど…(簡単に設定できました!)

## 3. 論理名の設定
contacts[お問い合わせ]テーブルを例に説明をしていきます。
以下コマンド

元記事を表示

【Rails】Deviseを使って同一モデルで属性分けして登録する

##はじめに
RailsでDeviseを使ってユーザー登録をする際に、同一モデルにしつつパラメータで属性分けしたい時ってあると思うのですが、意外とこれだっていう記事が無く若干ハマったので記事にしてみます。
想定とするのは新規登録とログインのリンクとは別に他属性用の登録リンクがある感じです(プレミアム会員登録はこちら、みたいな)。
これをUserモデルは一つでビューやコントローラも使い回しつつ、Booleanなどのパラメータを持たせて属性分けしたいわけです。
間違ったことしてたらご指摘頂けると嬉しいです。

##環境
“`terminal:console
Windows10
ruby 2.6.6
Rails 6.0.3.1
psql (PostgreSQL) 12.3
“`
##カラムを追加する
まずは既存のUserモデルを属性分けするためにカラムを追加します(今回はisPremium:booleanにします)。
このカラムの追加も初学者にとっては結構謎みが深く、最初はよくわからず既存のmigraitionファイルに書き足そうとしてましたが、どうやら最初にrails db:migra

元記事を表示

【Railsエラー】DEPRECATION WARNING: Dangerous query method (method whose arguments are used as raw SQL) called with non-attribute argument(s)…

### 始めに
投稿のいいね数の順番によってソートする機能実装中に遭遇したエラーに関するメモです。

### 前提
Ruby 2.6系
Rails 5.2系
Slim導入済
devise導入済

### 実装されている内容
##### 1.User、Post、Favoriteモデルが存在する。
#####2.favoritesテーブルを中間テーブルとして、usersテーブルとpostsテーブルが関連付けされている。

>Favoriteモデル

>“`ruby:app/models/favorite.rb
class Favorite < ApplicationRecord belongs_to :user belongs_to :post end ``` >Postモデル

>“`ruby:app/models/post.rb
class Post < ApplicationRecord belongs_to :user has_many :favorites end ``` >Userモデル

>“`ruby:app/models/user.rb
clas

元記事を表示

【Ruby】paizaで頻出メソッドまとめてみた②

#前編
– [【Ruby】paizaで頻出メソッドまとめてみた](https://qiita.com/umaibou1126/items/cd9192aa008e386d96de)

#参考文献

– [Ruby 標準入力から値を受け取る方法](https://qiita.com/Hayate_0807/items/2e9705091b181a104621)

# ◆ eachメソッド + 配列

“`
//サンプル用の配列作成
sample = [1,2,3,4]

//出力結果を格納する配列を作成
result = []

//オブジェクト:sample配列 
sample.each do |i|

//変数t:sample配列から変数tに格納される
if i == 1

//上記で作成した配列に格納する
result.push(i)
end
“`

# ◆ 入力値の受け取り方4選

“`
//入力値が1行の場合 
input = gets.split.map(&:to_i)

//入力値を一括で配列格納
input = readlines.map &:to_i

//

元記事を表示

OTHERカテゴリの最新記事