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

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

[Rails5]Twitter認証で悩んだことまとめ

## 概要
TwitterAPIを利用してすでにある認証機構に後付けでTwitterログインをつける際につまづいたことをまとめます。
自己流の解決方法なので最適ではない可能性が高いです。ご意見いただたら嬉しいです。
developerアカウントとか外部キーの取得に関しては記事がたくさんあるので省きます。

**※Deviceなどの認証系のgemは使っていません。**

記事を参考にして作ったモデルのメソッドはこんな感じ↓

“`ruby:/app/models/user.rb
def self.find_or_create_from_auth(auth)
provider = auth[:provider]
uid = auth[:uid]
name = auth[:info][:name]
image = auth[:info][:image]

self.find_or_create_by(provider: provider, uid: uid) do |user|
user.name = name
user.email = User.dum

元記事を表示

【Rails】【初学者向け】Bootstrapてなんだ(一番簡単にRailsアプリにBootstrapを導入する)

# Bootstrapてなんだ
目次
・Bootstrapとは
・Bootstrapの利用方法
・BootstrapをRailsアプリに導入するまで

ちゃっちゃとRailsアプリに導入したい方は、
・BootstrapをRailsアプリに導入するまで
まで飛んでみてください!

## Bootstrapとは
Bootstrapは端的に言えば、**アプリのデザインを爆速で進めていくのにめちゃめちゃ便利なツール**、です!
元々、Twitter社が開発したものです。
普通一般に、デザインなどはプログラマーがCSSやJavascriptを書いていって、実装していくのですが、
Bootstrapを用いれば、もうすでにBootstrap側で作ってくれているCSSやJavascriptを用いることができるのです!
(つまり、みなさんがHTMLを書いていく中でクラス名を、Bootstrap側で用意してくれているクラス名に合わせれば、Bootstraps製のCSSやJavascriptが適用されるのです!)
そして、どのクラス名に合わせれば、Bootstrapが適用できるのか、に関しては
[Boot

元記事を表示

nokogiriのエラーでbundle installが出来ない。libxsltのインストールで解決

# nokogiriのインストールでエラー

`bundle install –path vendor/bundle/` するとnokogiriのインストールでエラー。

“`
An error occurred while installing nokogiri (1.6.7.1), and Bundler cannot continue.
Make sure that `gem install nokogiri -v ‘1.6.7.1’ –source ‘https://rubygems.org/’` succeeds before bundling.
“`
指示通りに`gem install nokogiri -v ‘1.6.7.1’ –source ‘https://rubygems.org/’`してみても状況は変わらず。

# gem_make.out確認
`gem_make.out`にResultがあると書かれてあるので見てみる。↓

“`
$ cat ./vendor/bundle/ruby/2.2.0/extensions/x86_64-linux/2.

元記事を表示

Ruby on Railsで環境変数を設定する方法

## はじめに
railsで環境変数を導入する方法をまとめました。
環境変数はAWSのAccessKeyなどの機密情報をGithubに上げずにアプリで使用する際に必要になります。
Githubに機密情報をpushすると、悪用される危険性があるので、環境変数を使いこなし、AccessKeyなどの機密情報を適切に管理できるようになりましょう。

### 1 gemをインストールする。
“`php:Gemfile
gem ‘dotenv-rails’
“`

### 2 .envファイルを作成
環境変数を設定したいアプリケーションのGemfileなどが置いてあるルートディレクトリに .env ファイルを作成します。

“`php:|.env|
AWS_ACCESS_KEY=’***********’
API_KEY=’*********’
DATABASE_PASSWORD=’**********’
“`

### 3 .gitigonreに.envを追加
.gitignoreファイルの中に.envファイルを記述しないと、Githubにpushしたときに、.envファイルも

元記事を表示

Rubyによるデザインパターン(1)

# Rubyによるデザインパターン(1)
 本記事は初級エンジニアがRubyを使用したデザインパターンをアウトプットしたものになります。また、デザインパターンは種類が多いため、何回かに分けて掲載していきたいと思います。今回はIteratorパターンとAdapterパターンをご紹介します。なお、こちら記事は次のサイトを参考にしております。
[TECHSCORE](https://www.techscore.com/)
[酒と涙とRubyとRailsと](https://morizyun.github.io/)

## Iteratorパターン
 Iteratorパターンは要素(オブジェクト)の集まりを保有するオブジェクトの各要素(オブジェクト)に順番にアクセスする方法を提供するデザインパターンです。各オブジェクトの名前、または各オブジェクトのパラメータを利用するなど、各オブジェクトへのアクセス方法は異なります。つまり走査方法(アクセス方法)を与えるクラスを別に用意することで、より柔軟な設計をする事ができるようになります。
 イテレータには内部イテレータと外部イテレータがありますが、内部イ

元記事を表示

Docker ComposeでRails+PostgreSQLの環境構築

docker-composeの勉強に,Railsの環境構築をやってみたのでハマったところも含めてメモ.
参考: [Quickstart: Compose and Rails](https://docs.docker.com/compose/rails/)

# 実行環境

– MacBook Pro (13-inch, 2019)
– macOS Catalina version 10.15
– Docker version 19.03.5
– docker-compose version 1.24.1
– ruby 2.5.7
– Rails 5.2.4.1
– postgres (PostgreSQL) 12.2

# 構築手順

## Dockerfileの作成

参考ページそのままに,`Dockerfile`を作成.

“`Dockerfile:Dockerfile
FROM ruby:2.5

RUN apt-get update -qq && apt-get install -y nodejs postgresql-client

RUN mkdir /myapp
WO

元記事を表示

Action Cable 本番使用時のNginxとCable.ymlの設定

##はじめに

Action CableはWebSocket通信技術を用い、リアルタイムなチャットなどの機能を実装できる機能です。
AWS本番環境でのNginxとCable.ymlの設定に関して詰まった箇所を共有します。

![chat.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/481058/2bae78db-49d1-fe42-804d-252e0ba769f5.gif)

##前提
– Rails 5.2.3
– Puma
– Nginx
– AWSでデプロイ
– **Https通信**

ローカルではWebsocket通信が正常に動いていることが前提です。

##Nginxの設定追加
**最後の一行ですが、Httpsの場合はこれがないとコンソール内に403エラーになるので注意してください。**

proxy_set_header X-Forwarded-Proto https;

“`nginx:/etc/nginx/conf.d/app_name.conf
location /c

元記事を表示

Rails6 のちょい足しな新機能を試す 123(Gemfile 編)

# はじめに

Rails 6 に追加された新機能を試す第123段。 今回は、`Gemfile` 編です。
Rails 6 では、 `rails new` するときに `–skip-test` などのオプションつきで、実行したときに、空行が2行にならないように修正されています。

Ruby 2.6.5, Rails 6.0.2.1, Rails 5.2.4.1 で確認しました。 (Rails 6.0.0 でこの修正が入っています。)

“`shell
$ rails –version
Rails 6.0.2.1
“`

今回は、 `rails new –skip-test` でGemfileを作成して中身を確認します。

# Rails プロジェクトを作る

Rails プロジェクトを新たに作成します。

“`shell
$ rails new –skip-test rails_sandbox
$ cd rails_sandbox
“`

# Gemfile を確認する

Gemfile を確認すると、 `:development` group の次の1行だけが空行にな

元記事を表示

[aws,rails]ancestryをawsにデプロイした時に反映されない状況の解決方法

#1.どんな状態だったか
ancestryを利用して、railsのプロジェクト内にあらかじめデータは作成してあり、ローカルでは動くのに本番環境で反映されないという状態でした

#2.原因
ancestryはdb/seeds.rbにデータを保存するのですが、このseedファイルを利用するには、データベースの作成コマンドの他にseedを読み込むコマンドを打つ必要があるのですが、それを忘れてしまっていました。

#3.解決方法
`RAILS_ENV=production bundle exec rails db:seed`というコマンドを打っていただければ反映できます。
※コマンドの説明
・本番環境なので`RAILS_ENV=production`が必要です
・読み込みを早くするためにrailsの実行コマンドの中からdb関係のコマンドがあえて除かれていることがあるので、`bundle exec`をつけています。(はじめに無しで実行してダメだったらつけていただいても良いと思います)

#4.記事の目的
チーム開発をする時に、筆者のようにデプロイを担当する人間が知らない技術が取り込まれることはよ

元記事を表示

factory_botとcreate_listとテストが通らない素人

## はじめに
 先日、`factory_bot`の`FactoryBot.create_list`メソッドで詰まったので記録しておきます。

 例では`User`モデルと`Post`モデルが1対多で対応していることとします。

## やりたかったこと
 `FactoryBot.create_list`は複数のテストデータを生成する`factory_bot`のメソッドです。それぞれ異なる`Post`を持った`User`オブジェクトを複数作ろうとしました。

“`ruby
FactoryBot.create_list(
:user,
5,
post: FactoryBot.create(:post)
)
“`

 しかし、生成される`post`はどれも同じもので、想定する挙動ではありませんでした。

## 何がダメだったのか
 どうやら、`create_list`の挙動としてある一つの属性に対してランダムな値を入れることはできないようです。上の例では、`post: FactoryBot.create(:post)`の箇所で同じ`post`が使いまわされているようでした。

元記事を表示

Railsの記法

##記法
link_to
飛ばしたいページを指定できます。

“`
<%= link_to "リンク名", "飛ばしたいページ" %>
“`
image_tag
画像ファイルを指定できます。

“`
<%= image_tag "XXXX.png", alt: "YYYY", id: "ZZZZ", class: "AAAA", width: "XXXpx" %>
“`
button_tag
ボタンを作成することができるヘルパーメソッドです。

“`
<%= button_to "ボタン名", { パス or コントローラー名,アクション名 }, { オプション } %>
“`
パスの指定

“`
new_user_session_path //_pathで指定します
“`

元記事を表示

Rails~ユーザー機能についての続き~

#ユーザー名の表示
session[:user_id]の値をもとに、ログイン中のユーザーの情報をデータベースから取得する。find_byメソッドを用いてusersテーブルからidカラムの値がsession[:user_id]と等しいユーザーを取得し、変数に代入する。
##view
“`
<% current_user=User.find_by(id:session[:user_id])%>

  • <%=link_to(current_user.name,"/user/#{current_user.id}")%>
  • “`
    リンクはユーザー詳細ページへつなげる用に処理してある。

    元記事を表示

    Rails初心者 始める前の『ざっくり用語集』

    # Rails初心者 始める前の『ざっくり用語集』

    ## この用語集について
     この用語集は、筆者が個人的に「む?」となったポイントを中心にまとめたものであり、気軽に振り返ることでスムーズに学習を進められるように、という想いから作成しているものです(※現在進行形)。

     ですので、少しでもプログラミングをしたことの方は、見たことのある内容の薄いペラペラな情報しか載っておりませんので、そっとブラウザを閉じていただければと思います。
     
     そういった背景から、用語の意味はあまり深く考えずに、とりあえず「コイツが何をやっているか?」を語ることを中心に構成しています。そのため、テーマとしては以下になります。

    – 『Rails初学者が学習で詰まったときなどにざっと目を通せる』ような内容
      

     (※個人的には、用語の詳しい理解 と 全体の概要の把握、どちらも大切だと思うので、あまりにもちんぷんかんぷんな用語は無理のない範囲で調べた方が 後に楽かなあとは思います。)

    ## はじめに
     筆者は、現在進行形でRailsの学習中ですが、ベースとしてはProgate様の(Ruby on Rails

    元記事を表示

    RailsのCRUD系メソッドの戻り値

    # 概要
    “`ruby
    # 作成したインスタンスを変数に格納したい
    user = User.build(
    name: ‘Taro’,
    age: 20,
    )
    user.save

    # ↓これでええやん・・・。
    user = User.create(
    name: ‘Taro’,
    age: 20,
    )
    “`

    うっかり冗長に書いてしまうのを防ぐため、
    備忘録としてRailsのCRUD系メソッドの戻り値をまとめました。
    (`save(!)`、`create(!)`、`update(!)`、`destroy(!)`を取り扱います。)

    # 環境:
    – Rails 6.0.2.1
    – Ruby 2.6.3

    # 前提
    こんな感じのテーブルとモデルです。

    “`ruby:db/schema.rb(抜粋)
    create_table “users”, force: :cascade do |t|
    t.string “name”, null: false
    t.integer “age”
    t.datetime “created_at”, precision:

    元記事を表示

    docker + rails コマンドまとめ

    #はじめに
     docker-composeでrailsの環境構築をしたあとに、立ち上げたコンテナ内でrailsアプリを開発するコマンドについて自分用のメモとしてまとめました。
     前提としてdocker-compose exec -it app /bin/bashとかやってコンテナの中で作業する方法もあるので毎回、docker-compose execと打つのが冗長な場合はそちらをお勧めします。

    #コマンド集

    ##コンテナ操作
    “`
    #複数コンテナ群の起動(buildも含む)
    docker-compose up

    #複数コンテナの起動
    docker-compose start

    #複数コンテナの停止
    docker-compose stop

    #複数コンテナの停止と削除(あまり使用しない)
    docker-compose down
    “`

    ##コンテナ内操作
    “`
    #先頭につけるやつ
    docker-compose exec

    #データベースの作成
    docker-compose exec web rails db:create

    #マイグレーション
    docker-compose e

    元記事を表示

    Rails Tutorialのファイルサイズのチェックに使ったjQueryのコードを読み解く

    こんばんは。Shota(@Mii4a2501)です。
    突然ですがRails Tutorial経験者の方、こんなコードを目にしたことはありませんか?

    “`
    $(‘#micropost_picture’).bind(‘change’, function(){
    var size_in_megabytes = this.file[0].size/1024/1024;
    if (size_in_megabytes > 5) {
    alert(‘Maximum file size is 5MB. Please choose a smaller file’);
    });
    “`
    これはCarrierWaveで画像をアップロードできるようにした後、ファイルサイズの検証のために作られたjQuery文です。
    ふとこのコードの意味を知りたいと思ったので一行ごとに内容を書いていこうと思います。

    1行目

    “`
    $(‘#micropost_picture’).bind(‘change’, function(){
    “`

    **$(‘#micropost_picture’)**

    元記事を表示

    Railsチュートリアルメモ – 第10章

    [メモの目次記事はこちら](https://qiita.com/yokohama4580/items/dedfd5510080273dc2a0)

    [公式Railsチュートリアル第10章へのリンク](https://railstutorial.jp/chapters/updating_and_deleting_users?version=5.1#code-user_edit_view)

    ## サマリ
    – ユーザーの更新・表示・削除を行えるようにする
    – 認可モデル (Authorization Model)
    – 認証 (authentication) :サイトのユーザーを識別すること
    – 認可 (authorization) :そのユーザーが実行可能な操作を管理すること
    – beforeフィルター (before_action)
    – フレンドリーフォワーディング
    – seeds.rbを使ったデータ作成
    – ページネーション
    – Strong Parameters

    ## ポイント
    – Active R

    元記事を表示

    Seaquel ProでEC2のデータベースと接続する/ログインする方法

    ## 接続方法
    AWSのデータペースを確認するために、Seaquel Proで確認したいと思って調べて接続できたので、方法をまとめました

    ### Seaquel Proを開きます
    [![Image from Gyazo](https://i.gyazo.com/a33369241dc3be511bb20f7cb1343500.gif)](https://gyazo.com/a33369241dc3be511bb20f7cb1343500)

    名前:なんでも可能
    MySQL ホスト:127.0.0.1
    ユーザ名:root
    パスワード:ご自身で作成したMySQLのrootユーザのパスワード
    データベース:未記入
    ポート:未記入
    SSHホスト:EC2で設定した’Elastic IP’
    SSHユーザ:ec2-user
    SSH鍵:ご自身が保持しているEC2インスタンスの秘密鍵(○○.pem)を選択
    SSHポート:未記入
    SSLを使用して接続:チェック入れない

    ### EC2インスタンスの秘密鍵(○○.pem)を選択する方法
    まずは場所の確認

    “`:ターミナル
    $ cd ~/.

    元記事を表示

    deviseのTwitter認証での「Unauthorized 403 Forbidden」の対処法

    ローカルでのRailsの開発中に下記のエラーが出ました。

    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/403521/72293ecd-4e3d-bec2-8728-130a16b9cc54.png)

    原因は[Twitter Developer](https://developer.twitter.com/)のcallbacksにローカルのURLを登録していないことが原因でした。

    該当アプリケーションのコールバックの設定で下記の様にローカルのURLを設定して下さい。また、本番環境でこの現象が起きたら本番のURLを設定して下さい。
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/403521/7eef1552-a5f2-9fb2-bbee-8fd93e8039f0.png)

    元記事を表示

    【Rails】レコードの重複なくシードデータを投入する

    Railsのseed.rbの書き方を調べていると、以下のような書き方をよく見かける。

    “`seed.rb
    10.times do |i|
    Model.create!(name: “Mr.sample#{num}”, text: “#{i+1}番目のデータだよ!”)
    end
    “`

    しかし、これでは`$ rails db:seed`を実行するたびにレコードが量産されてしまう。

    このような挙動ではなく、シードデータのidを固定して重複なくシードデータを投入したい場合は以下のようにする。

    “`seed.rb
    1.upto(5){|num| {
    Model.find_or_initialize_by(id: num).update_attributes!(
    name: “Mr.sample#{num}”,
    text: “#{num}番目のデータだよ!”
    )
    }
    “`

    – `find_or_initilize_by`:引数の内容に合致したデータがDBに存在する場合は`find`を、存在しない場合は`new`を実行する
    (ちなみ

    元記事を表示

    OTHERカテゴリの最新記事