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

Ruby関連のことを調べてみた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)

元記事を表示

写真ACのダウンロード数をグラフ化したい【MySQL環連携編】 ~1日10行コーディング~

## 4日目

昨日に引き続きグラフアプリをデータを実際に格納する部分を作成します。

### 【技術テーマ】
環境構築

### 言語
* MySQL

### 目標成果物
今日はMySQLの環境構築を完了させ、前回の情報をDBに格納するところまでやりたいと思います。

### コードと資料

#### 1. MySQLのインストール
https://qiita.com/hkusu/items/cda3e8461e7a46ecf25d
こちらの記事を参考に指定されたコマンドを実行

【実行コマンド】

“`
ruby -e “$(curl -fsSL https://raw.github.com/Homebrew/homebrew/go/install)”
“`

結果

“`
curl: (22) The requested URL returned error: 404 Not Found
“`

参照したデータが古かったせいかダメでした….
と思ったが、これはHomebrewのインストールでそれは確か済んでるはずなので次のMySQLのインストールの部分を実行します

元記事を表示

Rails Tutorial 第6版 学習まとめ 第5章

###概要
この記事は私の知識をより確実なものにするためにRailsチュートリアル解説記事を書くことで理解を深め
勉強の一環としています。稀にとんでもない内容や間違えた内容が書いてあるかもしれませんので
ご了承ください。
できればそれとなく教えてくれますと幸いです・・・

出典
[Railsチュートリアル第6版](https://railstutorial.jp/)

###この章でやること
以前作ったビューにスタイルが適用されていないのでBootstrapで整える。
パーシャルやAssetPipelineなどのビューまわりの機能などについても学習する。

###構造を追加する

CSSをあまり勉強していなくても簡単に洗練されたデザインを適用できるのがTwitter社が公開しているBootstrap
Bootstrapをうまく活用してスタイルを適用していく。

####ナビゲーション
要点となるコードをかいつまんで説明する。

・“`[if It IE 9]“`:条件付きコメントと呼ばれる。IEでサポートされている。今回はHTML5shimをIE9以下に読ませるために使用。

・`

元記事を表示

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】プルダウンボックスを使って、日付やいいねの数などの条件でソートする

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

## 前提
__●環境__
 ・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】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

元記事を表示

ハッシュについて

[前回のシンボルに関する記事](https://qiita.com/mofuko0213/items/c4b660325c54f29823fe)

## ハッシュのキーにシンボルを使う

前回の、シンボルに関する記事で紹介したように、ハッシュのキーには文字列よりもシンボルの方が適しています。
ハッシュのキーにシンボルを使うと次のようなコードになります。

“`ruby
menu = { :food => ‘rice’, :dessert => ‘cake’}
# 値を取り出す場合
menu[:dessert] # => “cake”
# 新しいキーと値の組み合わせを追加する場合
menu[:drink] = ‘water’
p menu # => {:food=>”rice”, :dessert=>”cake”, :drink=>”water”}
“`

シンボルがキーになる場合、=> を使わずに`シンボル:値`という記法でハッシュを作成できます。
(※コロンの位置が左から右に変わります)

(例)

“`ruby
menu = {food: ‘rice’, dessert: ‘

元記事を表示

【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

//

元記事を表示

AWS LambdaとDynamoDB, CloudWatchを使用してQiitaでストックした記事をSlackに定期通知する

## 概要
– AWSサービスを触って学びたい
– 毎週土曜日にメールで通知されるQiitaの「今週ストックした記事」をSlackに通知したい

## 使用するもの

|サービス|用途|
|—|—|
|**[AWS Lambda](https://aws.amazon.com/jp/lambda/)**|Qiita APIからストックした記事を取得してSlackに通知する用|
|**[Amazon DynamoDB](https://aws.amazon.com/jp/dynamodb/)**|Qiita APIから取得した記事には「いつストックしたか」の情報がないため通知情報が重複してしまう。これを防ぐために前回通知した情報を保持しておく|
|**[Amazon CloudWatch](https://aws.amazon.com/jp/cloudwatch/)**|Lambdaの定期実行用|
|**[AWS SAM(サーバレスアプリケーションモデル)](https://aws.amazon.com/jp/serverless/sam/)**|ローカルで構築したアプリケーショ

元記事を表示

OTHERカテゴリの最新記事