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

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

【rspec】confirmダイアログのテスト

# 開発環境
ruby ‘2.6.3’
rails ‘6.0.2’

## railsでconfirmダイアログのテストをする。
* `accept_confirm`だけで表示内容の確認とOKを押してくれる
* [Method: Capybara::Session#accept_confirm](https://www.rubydoc.info/github/jnicklas/capybara/Capybara/Session:accept_confirm)

“`ruby:systemテスト
context “削除する” do
it “投稿消去” do
click_button “消去する”
expect{
expect(page.accept_confirm).to eq “本当に削除しますか?”
expect(page).to have_content “レビューを消去しました。”
}. to change(@user.posts, :count).by(-1)
end
end
`

元記事を表示

Remember機能を実装する~Railsチュートリアル9章~

第9章も終了しました。
9章では主にRemember機能の実装方法について学びました。
ここはあまり時間をかけずに少し足早に通りすぎましたね。記憶トークンやRemember me機能についてざっくりとだけ理解した感じです。というのも今回はログイン機能の発展型、応用であるためまだまだ覚えることがたくさんある初学者の自分としては現段階では優先度が低い内容なのかなと感じました。

#Remember me機能
ユーザーのログイン状態をブラウザを閉じた後でも有効にする機能を実装する。
またこの機能を使うかをユーザーに決めてもらうためチェックボックスをフォームに追加する。
Sessionの永続化を行うために、記憶トークン(要するにパスワードのようなもの)を生成しcookiesメソッドによる永続cookiesの作成や、安全性の高い記憶ダイジェストによるトークン認証に記憶トークンを活用する。

#パスワードとトークンの違い
パスワードはユーザーが作成・管理する情報
トークンはコンピュータが作成・管理する情報

sessionメソッドで保存した情報は自動的に安全が保たれるが、cookiesメソッドに保

元記事を表示

herokuでデプロイしたDBにSequelProで接続してみる

個人アプリをherokuでデプロイした際、DBにSequelProから接続するための備忘録。

## 状況
フレームワーク rails 5.2
PaaS heroku
DB clearDB

## やったこと
heroku configのコマンドで接続情報が出てくるのでそれをバラして入力。

“`
CLEARDB_DATABASE_URL: mysql://<ユーザー名>:<パスワード>@<ホスト名>/<データベース名>?reconnect=true
“`
スクリーンショット 2020-04-03 10.34.01.png

・ポートは空欄で大丈夫でした。
・標準を選択しました。

元記事を表示

Active Storageでファイルアップロード時に403エラー

# 現象
Active StorageでS3にファイルアップロードした際に以下のエラーダイアログを表示し、エラー。
3回に1回くらいの割合で失敗しているため、CORSやパーミッションのエラーではない。

“`
Error storing “ファイル名.pdf”. Status: 403
“`

Chrome Developer ToolsのNetworkタブ

“`
Request URL: 割愛(ActiveStorageのurl_forヘルパー押下により作成されたリンク)
Request Method: PUT
Status Code: 403 Forbidden
Remote Address: XXX.XXX.XXX.XXX:443
Referrer Policy: strict-origin-when-cross-origin
“`

# 環境
– Ruby 2.7.0
– Rails 6.0.2.1
– Active Storage 6.0.2.1
– S3

# 原因
セキュリティ対策として、S3の署名付きURLの有効期限を1秒にしていたこと

元記事を表示

【Rails】ユーザーページのURLをユーザーネームにする(twitter.com/hanamichi10みたいにする)

#【結論】

##ルーティング
“`routes.rb
get ‘/mypage’ => ‘users#mypage’
get ‘/:username’ => ‘users#show’
get ‘/:username/edit’ => ‘users#edit’
patch ‘/:username’ => ‘users#update’
“`

##リンクの作り方

“`.erb

<%= link_to "#{user.username}のユーザーページ", "/#{user.username}" %>
<%= link_to 'マイページ', "/#{current_user.username}" %>
<%= link_to "プロフィール編集", "/#{current_user.username}/edit" %>

“`

こんな感じ。
現状どうで、どんなことしたくて、どうやったか
の順番に述べます。誰かの役に立てることを願って。

#【現状】

[【Rails】Deviseを使ってユーザーページ/マイペ

元記事を表示

【Rails】Deviseを使ってユーザーページ/マイページを作成・プロフィール編集機能も実装(usernameカラムを編集)

# Deviseを使ってユーザーページを作る
##deviseをインストール

“`:Gemfile
gem ‘devise’
“`

“`
$ bundle install
$ rails g devise:install
“`
##deviseでUserモデルを作成(usernameカラムを持つ)

“`
$ rails g devise User username
$ rails db:migrate
“`
##ユーザーページのために、deviseと別でUsersコントローラーを作成

“`
$ rails g controller Users show
“`
##ユーザーページのルーティングを編集

“`routes.rb
– get ‘users/show’ => ‘users#show’
+ resources :users, only: [:show]
“`

##Usersコントローラーを編集

“`user_controller.rb
before_action :set_user, only: [:show]

def show
end

pr

元記事を表示

[refile][heroku]refileを使った本番環境での画像投稿機能[AWS][s3]

#はじめに
refileを使って、画像投稿機能を作って、herokuにデプロイして、オリジナルサービス完成!
と思ってたら、思わぬことに。
なぜか投稿した画像が一定時間過ぎると見れなくなる。 とか
パソコンでは見れるのに、iPhoneで画像が見れない。
という問題に直面しました。ので、その状況に陥ったときの対処方法を今回は書いていきます。

#そもそも
herokuにアップした画像は一定時間しか保存してくれないとのこと(どっかの記事で見ました)。
なので、どこかに保存する場所を作ってあげないといけない。そこで見つけたのが、AWSのs3という機能(?)。
s3のバケットというところに保存すればこの問題は解決しました。
ちょっと長くなりますが、方法をまとめていきたいと思います。

#どうするか
細かく伝えいきますので、順にやっていってください。

##gemの追加
refileには、AWSのs3と連携してくれる便利なgemがあります。それがこれ↓です。[(refile/github)](https://github.com/refile/refile)

“`ruby:Gemfile
g

元記事を表示

【Rails】hoge.herokuapp.comへのアクセスをリダイレクトさせる

###環境設定
Rails 6.0.0
ruby 2.6.5

#リダイレクトさせるために必要なコードとは?
お名前.comでせっかく独自ドメインを買ったのに、
hogehoge.heroku.comでアクセスできてしまう。。。

これを解消するのがリダイレクト処理。

gemで、rack-rewriteというのもあるようですが、
コードを足すだけでも実現可能とのことでgemは使わず実装してみました。

“`ruby:application_controller.rb
class ApplicationController < ActionController::Base #herokuapp.comから独自ドメインへリダイレクト before_action :ensure_domain FQDN = 'www.hogehoge.net' # redirect correct server from herokuapp domain for SEO def ensure_domain return unless /\.herokuapp.com/ =

元記事を表示

railsでffiをインストールできない

# 環境

Mac
Ruby 2.6.0
Rails 6.0.0

# エラー
Fetching ffi 1.12.2
Installing ffi 1.12.2 with native extensions
Gem::Ext::BuildError: ERROR: Failed to build gem native extension.

# 解決策
以下をターミナル上で実行

> brew install libffi
> export LDFLAGS=”-L/usr/local/opt/libffi/lib”
> export PKG_CONFIG_PATH=”/usr/local/opt/libffi/lib/pkgconfig”

元記事を表示

Rails 自作アプリへの道 Part2

Rails 自作アプリを作った時の経過をまとめていきます。

環境

|OS|Ruby|Rails|
|:—|:—|:—|
|Mac Mojave 10.14.16|2.6.3p62|5.0.7.2|

参考
https://qiita.com/cigalecigales/items/f4274088f20832252374

前提
環境構築済

【conformableの設定】

1.送信メールアドレスの登録

①設定ファイルの追記/編集

“`config/environments/depelopment.rb
config.action_mailer.raise_delivery_errors = true
config.action_mailer.delivery_method = :smtp
config.action_mailer.smtp_settings = {
:address => “smtp.gmail.com”,
:port => 587,
:user_name => “Gメールアドレス”, # メアドを書く

元記事を表示

gem ancestry + seedファイルを利用した、データベースへの複数カラム挿入

# 本記事について
Ruby on Railsのseedファイルを使って、ancestryのデータを挿入するとき、カラムを複数同時に挿入したいと思い、その実装ができたので解説させていただきます。
(とあるプログラミングスクールのカリキュラムによって、某フリマアプリのカテゴリーに関する記事がたくさんありますが、そちらはカラムが1つしかなかったため投稿しようと考えました。)

### 目的
1. seedファイルを使ってデータベースを作成すること
2. データベース作成時に複数のカラムを同時に生成すること

### 参考資料
Qiita参考記事
・[【Rails】ancestryで簡単に多階層型データの作成し呼び出す](https://qiita.com/n-ike/items/f0738c00c8da13de2ee0)
・[railsのseedの書き方いろいろ](https://qiita.com/takehanKosuke/items/79a66751fe95010ea5ee)
・[Rails・seedファイルを分割して管理する](https://qiita.com/masaki755

元記事を表示

【Docker】コンテナ内のデータベース閲覧(ローカル,EC2)

#はじめに
ローカル環境/本番環境(EC2)の其々でコンテナを起動させた際のデータベース閲覧方法と
環境による閲覧方法の違いがあるのか気になったので、調べてみました。

#環境
– Rails:5.0.7
– MySQL:5.6
– Docker:19.03.8
– EC2(AMI):Amazon Linux AMI

#ソースコード
“`:Dockerfile

FROM ruby:2.5.1

RUN curl -sL https://deb.nodesource.com/setup_10.x | bash – && apt-get update && apt-get install -y nodejs –no-install-recommends && rm -rf /var/lib/apt/lists/*

RUN mkdir /app

WORKDIR /app

COPY Gemfile /app/Gemfile
COPY Gemfile.lock /app/Gemfile.lock

RUN gem install bundler
RUN bundle install

元記事を表示

rails whereとfind、find_byの違い

こんにちわ。
未経験から独学でwebベンチャーに入社して3ヶ月のバスケンです。

##ActiveRecord の where句でオブジェクトを出力した後の挙動がおかしい、、

ruby on railsにて
オブジェクト選択でfindではなくwhereを使う必要があったため
whereを利用して出力したオブジェクトでインスタンス変数を作成したら、
オブジェクトの値が今までどうり取り出せなくなりました。。

##何故(Why??)
**find** と **where** の違い

find:オブジェクトを返す
where:ActiveRecord_Relationを返す

※ActiveRecord_Relationに関してはまとめたものを後日投稿します?

##対処
オブジェクトが単数の場合は、最後に「.first」を記述すると
findで出力した時と同じように扱うことができます。

(例)
object = Object.where(id: 1).first

元記事を表示

モノレポとマイクロサービス

コロナの影響で在宅勤務(テレワーク)も一ヶ月以上も続き環境の変化に慣れてきましたが、`BBCパパ`のように急な家族の割り込みによる対応で頭を悩まされている streampack の Tana です。

[![IMAGE ALT TEXT HERE](http://img.youtube.com/vi/Mh4f9AYRCZY/0.jpg)](http://www.youtube.com/watch?v=Mh4f9AYRCZY)
(在宅疲れした際に見るとリラックスできますw)

## モノレポ(Monorepo)とマイクロサービスへの取り組みについて

`streampack` は動画配信プラットフォームをお客様の要望にカスタマイズしながら、`AWS`などのクラウド上に提供しているサービスです。既存のシステムとマイクロサービスを最大限に活かすために、案件ごとに管理していた複数のレポジトリ管理から`モノレポ`へ移管したかについての経験談のお話になります。

以前は案件やレイヤー毎にリポジトリを切って開発してました。いわゆる `Polyrepo(Multi-Repo)` と呼ばれる方法です

元記事を表示

オブジェクト指向とは

##オブジェクト指向とはなにか
複数のオブジェクトを組み合わせてプログラムを構築する考え方です。
人をオブジェクトとして考えてみると、人には「名前」、「生年月日」、「年齢」、「住所」などのデータがあります。
オブジェクトはこれらのデータ(状態)の他に振る舞いも持ち、オブジェクトに対して「名前を教えて」と伝えたときにオブジェクト自身が保持している名前を返す動作を指します。
たとえば「鈴木さん」と「佐藤さん」がいるとします。この場合、二人は別々の異なるオブジェクトです。
鈴木さんは「名前が鈴木である」という状態を保持していて、「名前を教えて」と問えば「鈴木」と答える振る舞いを持っています。
###オブジェクト指向とクラス

“`
class Person
def initialize(name, birthday, age, address)
@name = name
@birthday = birthday
@age = age
@address = address
end

def answer_name
puts @name

元記事を表示

本番環境で画像が表示されない

##ローカルで表示された画像が本番環境だと表示できない

localhostの時は表示されていた画像がデプロイした本番環境だと表示できず、altの文字だけが表示されてしまう状態になりました。
画像は**app/assets/images**の中に保存されてあります。
画像のpathがおかしいのかな?と狙いをつけて調べたところ解決できたので、記事にします!

元のコード

“`erb
ゲーム画像1
“`

修正後のコード

“`erb
<%= image_tag asset_path("MHW.jpg", alt: "ゲーム画像1") %>
“`

自動デプロイの際に画像がコンパイルされ、パスが変わるのが原因のようです。
背景画像が表示できない場合は、下記を参照してみてください。

元のコード

“`scss
img {
background-image: url(“MHW.jpg”);
}
“`

修正後のコード

“`scss

img {
background-image: image-url(

元記事を表示

Rails_MySQL_Docker_Vue.jsの環境をシェル一発で始められるようしてみた

## ■ 何これ?
`$ rails new`する機会が久々にあって、諸々込みでもっと簡単に環境構築出来たら良いなと思ったので、@azul915さんの[記事](https://qiita.com/azul915/items/5b7063cbc80192343fc0)のshellを参考にちょっと改変して使えるようにしてみました。

[Github](https://github.com/y-agatsuma/docker-rails-vue-webpacker/blob/master/docker-rails-vue.sh)にもありますので好きなだけいじってください。

ご指摘などありましたらお気軽に。

## ■ 最終的なディレクトリ構成

“`
【app_name】
∟ Dockerfile
∟ docker-compose.yml
∟ src
∟ [rails new で生成されたファイル群]
“`

## ■ Special Thanks

– 丁寧すぎるDocker-composeによるrails5 + MySQL on Dockerの環境構築(D

元記事を表示

【Rails】一対一対多のアソシエーション

結局は基本的なことなのですが、少し変わると途端にハマってしまう。
アソシエーションがうまくいかずに時間を溶かしてしまったので、そんな過去の自分といるかもしれない未来の誰かのために書き残しておきます。

## テーブル構造

UserモデルとTagモデルの中間テーブルから派生させたTagSettingモデルを作りました。
![erd.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/322882/7b3143f5-88ac-0e8a-c4af-117301deef78.jpeg)
ただ、今回の話にはUserモデルはあまり関係ありません。
また、この後「tag_usersとtag_settingsを別々にしなくていいんじゃないか?」という指摘を受けてテーブル構造を変えました。なので、例としては少々不適切かもしれませんがご容赦を。

## モデルのアソシエーション

“`user.rb
class User < ApplicationRecord has_many :tag_users has_many

元記事を表示

「brew –prefix」とは何か?

`mysql2`のインストール中にエラーが起きた際の対処法で見かける`openssl`のインストール先を指定する以下の方法

“`
brew –prefix openssl
“`
`brew –prefix`とは何ぞや?と思ったので調べてみました。ターミナルで。

# そもそも「–prefix」とは?
言わずとしれたインストール先の指定方法

“`
–prefix=’インストール先のアドレス’
ex.
–prefix=/usr/local
“`
# brew –prefix
じゃあ「brew –prefix」は何だと思って試しにターミナルさんに聞いてみた。

“`
% brew –prefix
/usr/local
“`
`brew`のインストール先のアドレスだった。単純な話だった。

元記事を表示

【MySQL】Mysql2::Error::ConnectionError 自分用メモ

`rails s`してサーバーを切り忘れてしまった後にmysqlのエラーが出る。
よくやってしまうので、自分用にまとめました。実際にやっていて手順が増えたら随時追加する。

## エラー

“`console
$ rails s
=> Booting Puma
=> Rails 5.2.4.2 application starting in development
=> Run `rails server -h` for more startup options
Puma starting in single mode…
* Version 3.12.4 (ruby 2.5.3-p105), codename: Llamas in Pajamas
* Min threads: 5, max threads: 5
* Environment: development
* Listening on tcp://localhost:3000
Use Ctrl-C to stop
Started GET “/” for 127.0.0.1 at 2020-04-02 11:39:55

元記事を表示

OTHERカテゴリの最新記事