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

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

Apache2 + Passenger + Sinatra でREST APIを構築する。

# REST API構築方針
すでにApache2でメインサービスを運用しているので、REST APIのためにネットワーク設定を変更したくない。ということでApache2でSinatraを動かす。万が一性能面で問題があったらFFI越しにRustの関数を呼び出すつもり。
Sinatraは、Apache2が公開しているメインアプリと並列にREST APIを公開する。以下の形で呼び出せるようにする。

“`
http://localhost:8080/main_app
http://localhost:8080/sinatra
“`

## 参考資料
1. [Installing Passenger + Apache on Ubuntu 18.04 LTS (with APT)]
(https://www.phusionpassenger.com/library/install/apache/install/oss/bionic/)
2. [Deploying an app to a sub-URI or subdirectory]
(https://www.phusionpasseng

元記事を表示

RailsでCarrierWaveとRMagickを使い、円形のプロフィール画像を実装する方法

#Carrierwaveとは
画像ファイルのアップロード機能を簡単に追加する事が出来るgemです。

#RMgickとは
画像ファイルのサイズの変更や画像の中心切り取りなどができます。
長方形の画像でも綺麗な正方形の画像にできます。
(中心から指定したサイズで抜き取ることが可能なため)

※他に**minimagick**という画像ファイルのサイズの変更ができるgemがありますが、
こちらは長方形の画像を正方形にできないので、今回は割愛します。

#バージョン
Ruby 2.7.0
Rails 6.0.2.1
carrierwave 2.1.0
rmagick 4.0.0

#手順1・Carrierwaveを導入する
まず下記のgemをインストールします

“`Gemfile.
gem ‘carrierwave’
“`
そして`bundle install`します。
その後`rails g uploader image`でアップローダーを作成します。

“`ターミナル.
$ bundle install

$ rails g uploader image

app/uploa

元記事を表示

まだ検索機能の実装に消耗しているの? 一瞬で実装できるGem ‘ransack’

こんにちは、

今回は検索機能を爆速で実装できるGem

#Ransack
です。

いやーこれはすごい便利ですね。
検索機能ってさりげレベル高くね?
って思っていたのですが、
このGemを使えば30分ほどで実現できます。

改めてGemすげーって感じです。
(語彙力)

では早速やっていきましょう

まずは

“`
gem ‘ransack’
“`

をGemfileに入れていきます。

“`
% bundle install
“`

を忘れずに

ルーティング行きます

“`
resources :books do
collection do
get ‘search’
end
end
“`

ルーティングは

“`
search_books GET /books/search(.:format) books#search

元記事を表示

Ruby on Railsの新しいプロジェクトでSQLite3からPostgreSQLに変更する

Ruby on Railsで作った新しいプロジェクトのデータベースを変更する手順のまとめです。

# 環境
– mac OS Catalina 10.15.6
– Ruby 2.6.3
– Rails 6.0.3.2

# SQLiteからPostgreSQL変更する理由
Ruby on Railsのデータベースの標準はSQLite3ですが、HerokuにデプロイするときにSQLite3だとエラーになります。
`rails new`した時点でPostgreSQLに変更しておくと、あとでデータ移行する手間が省けます。

# Postgresを使う準備
## macにHomebrewをインストールする
`Homebrew`のインストールに必要となる`xcode`をまずインスロールします。

### xcodeをインストールする
“`
xcode-select –install
“`

### Homebrewをインストールする
“`
/bin/bash -c “$(curl -fsSL https://raw.githubusercontent.com

元記事を表示

Progate学習後に、ローカル環境でRailsを使ったSNSアプリを作ってみた

概要

ProgateのRailsコースを学習し終わったので、自分のPC(ローカル環境)でも同じものが作れるかな?と思い、復習&アウトプットも兼ねてSNSアプリを作ってみた。

開発環境

macOS catalina バージョン10.15.6

Rails 6.0.3.2

ローカル開発環境 → herokuにデプロイ(みんなが見れる状態にする)

完成したもの

「ほのぼのちゃっと」
https://honobonochat.herokuapp.com/
名前を変えていますが、中身はほぼProgateのTweetappです(笑)

感想

「Progateでやってたことが、自分のPCでもできるんだ!」ということに感動しました。

ローカルとはいえ環境構築を1から始める必要があり、いい経験になったと思います。

やったことはほぼ写経でしたが、Progateでは起こり得なかったようなエラーが連発して、完成までに思ったより時間がかかりました。

「エンジニアはコードを書く時間よりもググっている時間のほうが長い」とい

元記事を表示

APIとは一体どんなもの?

“`
前提
プログラミング初学者(1〜2ヶ月)の私が学習内容をまとめたものです。
実際の現場では通用しないことや、間違いなど含まれている可能性があります。
お気づきの際はコメントにて指摘していただければ幸いです。
“`
今回はAPIという初めて聞くワードについて私が学習した範囲でまとめました。

#APIとはなにか
Application Programming Interfaceの略
アプリケーション同士がデータをやりとりする場合に使用する一定のルール、仕組みのことです。
APIは抽象的で広い解釈を持っており、以下2つのような意味でも使われることがあります。
1つ目、「このようにリクエストが来たらこのようにデータを返す」という仕様全体を表す意味
2つ目、「呼び出したら実行されるメソッド」そのものを表す意味
link_toやrenderなどRailsが独自に定義し、用意してくれているメソッドはRailsのAPIなどと呼びます。

実際に使う時で言うと、わざわざプログラムを1から作らずとも、先人が作ったプログラムがAPIとしてあれば、それを借りてきて自分が開発するwebサービスの一部

元記事を表示

Rubyでメッセージ機能を実装したい、、、ならActionCableでしょ!

どうもこんにちは,

今回は、リアルタイムのメッセージのやり取りを可能にする

Action Cable

について初心者の僕が初心者の目線に立ち、
`かなり丁寧めに`紹介してきたいと思います!

環境ruby on rails 6.0.0

まずは、お使いのエディターを開き、

“`
rails g channel message
“`

このコマンドを打つと、
javascriptのファイルとRubyのファイル
どっちもを作ってくれるのでオススメです⭐
(この星記号みずらっ、、)

そして、まずはコントローラーからいじっていきます。

“`message_controller.rb

class MessagesController < ApplicationController def index @item = Item.find(params[:item_id])アイテムからidを取り出す。 @message = Message.new 新しいの生み出す @messages = Mes

元記事を表示

[Rails]deviseのエラーメッセージで自動生成されるクラスの対処法

## 問題点
deviseを用いたログインフォームを実装する際に、**エラーメッセージ**を表示させることができるのですが、エラーメッセージを表示させると下記画像のように、
`div class=”field_with_errors”`というクラスが自動生成され、ビュー崩れが発生する。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/643372/ba1b9d4f-9acc-2c1b-c59f-45dc54a0f735.png)

## 対処法
解決策はいたって簡単で、cssで下記のように`display: contents`を指定してあげればOKです!

“`.css
.field_with_errors {
display: contents
}
“`

## 最後に
初学者の方は遭遇すると思われるエラーなので、参考にしてもらえると幸いです!

元記事を表示

Ruby技術者認定試験

Ruby技術者認定試験の勉強をする中で学んだことを記録に残すもの。

#zip
Enumerableモジュールで提供されるメソッド。Arrayクラスは、Enumerableモジュールをインクルードしている。

“`ruby
a = [1,2,3]
b = [4,5,6]
a.zip(b) #=>[[1, 4], [2, 5], [3, 6]]

[1,2,3].zip([4,5,6])
#=>=> [[1, 4], [2, 5], [3, 6]]
“`

#範囲演算子(../…)
“`ruby
(5..10).to_a #=>[5,6,7,8,9,10]
(5…10).to_a #=>[5,6,7,8,9]
“`

#select/find_all
Enumerableモジュールで提供されるメソッド。Arrayクラスは、Enumerableモジュールをインクルードしている。
各要素に対してブロックを実行し、結果が真となる要素を探して(find/select)配列にして返す。

“`ruby
numbers = [1,2,3,4,5]
numbers.select

元記事を表示

【Rails】動画を表示するvideo_tagの使い方

carrierwaveを使用し、画像&動画のアップロード機能を実現しました。
動画表示用の「video_tag」は初めて使用したので備忘録として残しておきます。
Rails初心者のどなたかの役にたてば幸いです。

## 環境
MacOS Catalina
Rails 6.0.3.2
Ruby 2.6.3

## video_tagとは
![スクリーンショット 2020-09-02 18.22.19.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/682425/57b27d28-45b5-a998-d2ee-144f286af559.png)
こんな感じで動画を表示する際によく使われるやつ。
image_tagの動画版だと思えば良いかな。

#よく使う属性
| 属性 | 意味 |
|:———–:|:————:|
| autoplay | ページ読み込み後自動再生するかどうか |
| controls | コントローラを表示するかどうか

元記事を表示

【RubyMine】{} → do..endのブロック自動変換を無効にする

こういうやつ

![debug.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/63597/eaa4de15-a3b3-92b0-e792-a2005b72d69c.gif)

blockのなかのロジックが複雑な時に改行して整えようとする時とかに煩わしいやつ

## 解決方法
Preferencesの`Convert {} blocks to do..end by Enter` のチェックを外せば良い
![スクリーンショット 2020-09-02 18.26.29.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/63597/ac003770-5018-4c56-7c49-156695a53f46.png)
RubyMine2020.2時点

元記事を表示

【Ruby on Rails】ログインユーザーのみが投稿できる投稿機能

# 目標

![post.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/700999/09f6b09b-355c-bf28-8a29-087e59c1cd2d.gif)

# 開発環境
ruby 2.5.7
Rails 5.2.4.3
OS: macOS Catalina

# 前提
[deviseで名前ログイン環境構築](https://qiita.com/japwork/items/275110b810965fbdf72f)
controller名はpost(今回は投稿機能のみ)

# 1、テーブルの作成
## Postモデルを追加
“`:ターミナル
$ rails g model Post user:references title:string body:string
“`
実行すると下記のようになり、カラムが追加され保存可能。

“`:db/migrate/xxxxxxxxxxxxx_create_posts.rb
class CreatePosts < ActiveRecord:

元記事を表示

Rubyのクラス内でインスタンス変数が定義済みかを確認する方法

“`rb:dog.rb
class Dog
def initialize(name)
@name = name
end

def set_nickname(nickname) # rubyでset_hogeは使わないけど今回は簡略化のために大目に見て!
@nickname = nickname
end

def print_nickname
if !defined?(@nickname)
puts(‘Not Set’)
return
end
puts(@nickname)
end
end
“`

if @ageを参照した時に、それがnilだった場合、以下のどちらのケースか分からない。

– 一度も定義されていないからnilなのか
– 一度@nickname=nilを代入した結果のnilなのか

そんな時には`defind?(@age)`を使用すべし。

元記事を表示

【Rails】Railsで動画をアップロード(ActiveStorage)

現在プログラミングスクールに通い、ポートフォリオ制作フェーズに移行した所です。
インスタのストーリーズみたいに、短い動画を投稿できるようなのを作ろうと思ったのですが動画をアップする記事が思ったより少なくて悩んだので、今回忘れないように書いておこうと思います。

## 参考サイト

– [【Rails 5.2】 Active Storageの使い方](https://qiita.com/hmmrjn/items/7cc5e5348755c517458a)
– [Active Storageを使って動画投稿サイトを作った](http://yuzukiarai.me/?p=378)
– https://stackoverflow.com/questions/50993367/active-storage-displaying-video-in-video-tag
 

## Active Storage を使用

当初は Carrierwave などを使って実装しようと考えていましたが、調べると Rails の標準機能でファイルアップロードができるようなので、こちらで実装します。
Activ

元記事を表示

【Rails】updateアクションが通らない理由を間違って検証し続けた話(update)

# 1.やりたかったこと

gem deviseを利用してユーザー登録(名称はownerとしている)機能を実装済。
パスワードの入力なしに、登録されたデータを編集しようとするもエラーが起き、その解決に無駄にだいぶ悩んでしまった話。

# 2.実行環境

Ruby 2.6.5
Rails 6.0.3

# 3.前提としてできていた準備

devise側の仕様に沿って以下の二つの準備が必要でした。
①account_update時にデフォルトカラム以外のカラムの値を許容する(sanitizer)
②passwordなしでのアップデートを許容する。

公式の[こちら](https://github.com/heartcombo/devise)とか[こちら](https://github.com/heartcombo/devise/wiki/How-To:-Allow-users-to-edit-their-account-without-providing-a-password)の記事を見ればできるかと思います。Qiitaも調べればいっぱいあるはずです。

これらは出来ていたのに以下の様に

元記事を表示

ActiveStorageとFakerを利用した際に、画像を含めたテストをする方法

【概要】
—————————————-
1.結論

2.なぜFakerでimageを作らずに、fixture_file_uploadを使うのか

3.どのように使うのか

4.ここから学んだこと

1.結論
—————————————-
fixture_file_uploadメソッドを使用する。

2.なぜFakerでimageを作らずに、fixture_file_uploadを使用なのか
—————————————-
理由は1つです。

ActiveStorageを利用しているのでimageカラムを作っていないのでFakerで作ることができない(仮に具体的な画像を入れるにしてもspec/factoriesにはimageカラムがないので設定できない)からです。

たとえimageカラムを作っていたとすると、Fakerで画像をランダムで生成(適当に

元記事を表示

Rails5+Docker環境におけるActiverecord関連付け後マイグレーションのエラー(2)

###続き

#1) staffテーブルのマイグレーションが成功しない

“`ターミナル
docker-compose exec web bundle exec rails db:migrate:status
“`

上記でmigrationの状況を確認できると。
すると

“`
Status Migration ID Migration Name
————————————————–
up 20200831161252 Create clinics
down 20200831164400 Create staffs

“`

となる。
downとなりstaffsテーブルが、migration実行されてない?ため、指定して実行。

“`
docker-compose exec web bundle exec rails db:migrate:up VERSION=20200831164400
“`

しかし、以下エラー

“`ターミナル
== 20200831164

元記事を表示

複数のdeviseでログイン後、新規登録後のパスを変更したい。

オリジナルアプリケーション作成中です。

複数のdeviseを作りログイン後のルーティング後のパスを設定したい場合にどうしたらいいのかをまとめました。

まず2つ以上のdeviseのinstall、devise_parameter_sanitizerの設定などは出来ているとします。

出来てない方はこちらを参考にしてみてください。

[複数のdeviseを作成して、別々のログイン画面を作る際のファイル作成からルーティング設定](https://qiita.com/kinpin/items/067eff7d2fbe74d85c83 )

[2つのdeviseを作成した時にdevise_parameter_sanitizerを個別の設定](https://qiita.com/kinpin/items/21b1badcfe19aca84038)

###<<やりたい事>>
##ネストさせたdeviseのルーティング後のパスを設定したい。

“http://localhost:3000/users/1/medicines“

↑このようなURL作りたい。 usersのidが1のm

元記事を表示

【Rails】コメント機能(登録・表示・削除)

投稿に対するコメント機能実装の備忘録。

# ゴール
– Userテーブル、Postテーブルに紐付く、Comentテーブル(中間テーブル)でコメントを管理。
– Comentテーブルは、コメント内容、コメントしたpost_id、コメント投稿者user_idカラムを設置。
– (前提) ユーザー機能は、devise を使用。

# 実装
## コメントモデルとテーブル作成
– コメントモデルとテーブル(コメント内容、コメント投稿者)を作成

“`rb:ターミナル
% rails g model Comment comment_text:text user:references post:references
% rails g controller Comments
% rails db:migrate
“`
モデルにアソシエーション追加。

“`rb:Commentモデル
belongs_to :post # Comment.post で、コメントされた投稿取得
belongs_to :user # Comment.user で、コメント投稿者取得
“`

元記事を表示

railsのpathメソッドとurlメソッド

##pathメソッド
相対パス

“`
root_path => ‘/’
“`

##urlメソッド
絶対パス

“`
root_url => ‘http://www.example.com/’ ※完全なURLの文字列を返す
“`

元記事を表示

OTHERカテゴリの最新記事