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

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

DockerでRuby on Rails + Reactを別々にアプリ作成する環境構築手順

#やったこと
Dockerを用いてAPIモードのRails(バックエンド)とReact(フロントエンド)を作成する開発環境の構築を行った。

#1, 各種ファイルの用意
プロジェクト用のフォルダを用意して、Rails側のapiフォルダとReact側のfrontフォルダに分ける。
プロジェクト用フォルダの直下に、docker-compose.ymlを置く。
![スクリーンショット 2020-01-08 6.30.09.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/367226/1e3803a0-9bca-c3d2-d56a-7954080275df.png)

###docker-compose.ymlの記述
この記事( https://qiita.com/takano-h/items/84ae73b41eef83602bd9 )を参考に記述。

“`docker-compose.yml
version: ‘3’

services:
db:
image: postgres
volu

元記事を表示

[Rails] Transaction内で条件分岐してrescue

# そもそもTransactionなぜ必要なのか
複数にまたがるモデルのデータ同時に保存したいときや、`find_each`などで複数回データをいじって保存したいときに、`Transaction`を利用します。

“`users_conroller.rb
def create
User.transaction do
@user.save!

respond_to do |format|
format.js { render :~~path }
end
end
rescue => e
logger.debug(“failed. because of #{e}”)
redirect_to root_path
end
end
“`

上記のようなコードは問題なく動作します。
しかし下記の様にもしcontroller内に渡ってくるparamsによって`if..end`で囲むと、`syntax error`が発生します。

“`users_controller.rb
def create
if user_params[:u

元記事を表示

rails環境構築 gem install sqlite3 エラー

railsを始めようと思い、下記サイトを参考にrailsのインストールを試みたところ、
rails new app名を実行したところで下記エラーがでました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/561469/f2d97d3e-d470-0dc1-5f24-02c28e392401.png)

sqlite3のgemがないのがエラーの原因だと思ったため、gem listを実行してみると、確かにsqlite3がありませんでした。

なのでgem install sqlite3でsqlite3をインストールしようとしたところ、次のエラーがでました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/561469/9ce97471-072e-a177-858f-3d8cd82e8aef.

元記事を表示

[Rails]本日のエラー

今度作業する時に、あれ?過去にも同じエラーが起こったことあるぞ!!となった時用に記事として保管しておくのが目的です。
なので、個人的に使用する記事なので投稿内容は大雑把にまとめます。

記事の流れ
1.なんの作業中にエラーが起きたのか
2.エラーの内容
3.対処法
4.原因

以上の流れで書いていきます。

#1.dbをリセットしようとした時

“`ターミナル.
rake db:migrate:reset
“`

#2.エラー内容

“`
ActiveRecord::NoEnvironmentInSchemaError:

Environment data not found in the schema. To resolve this issue, run:

bin/rails db:environment:set RAILS_ENV=development

Tasks: TOP => db:migrate:reset => db:drop => db:check_protected_environments
(See full trace by

元記事を表示

【Rails】2つのテーブルを結合しつつ、欲しいカラムだけを抜き出してJSONで返すサンプルコード

## はじめに
Railsで2つのテーブルを結合しつつ、欲しいカラムだけを抜き出してJSONにして返すサンプルコードです。

このコードで出来たJSONはネストされておらず、シンプルなので扱いやすいです。

## 環境
“`yaml
OS: macOS Catalina 10.15.1
Ruby: 2.6.5
Rails: 6.0.2.1
“`

## 前提

– **UserモデルとPostモデル**がある
– User1に対してPostが多の関係
– それぞれのテーブル名は**usersとposts**
– 以下のように関連付け済み

“`ruby:user.rb
class User < ActiveRecord::Base has_many :posts end ``` ```ruby:post.rb class Post < ApplicationRecord belongs_to :user end ``` ## 欲しいデータ 各テーブルのカラムは以下のように多数あり、 **「不要なデータは取得したくない!」** という状況を想定し、`#欲しい`を付けた

元記事を表示

Dockerでalpineイメージ使用時に発生したstandard_init_linux.go:211: exec user process caused “no such file or directory” を解決

# alpineイメージ使用時に発生するstandard_init_linux.go:211: exec user process caused “no such file or directory” を解決
Docker X Rails6 X MySQL8で環境構築する際に、初めてalpineイメージを使用するとエラーに出会いました。
alpineはLinuxディストリビューションの1つで、CentOSやUbuntuよりも軽量なためDockerイメージのサイズを小さくすることができます。

## 各種設定
“`:Dockerfile
FROM ruby:2.7.0-alpine
ENV LANG C.UTF-8

RUN mkdir /myapp
WORKDIR /myapp
COPY Gemfile /myapp/Gemfile
COPY Gemfile.lock /myapp/Gemfile.lock

RUN apk update -qq && apk add –no-cache yarn build-base tzdata libxml2-dev mariadb-dev

元記事を表示

herokuへデプロイ後、We’re sorry, but something went wrong.

#We’re sorry, but something went wrong.
herokuへデプロイ後にブラウザで表示されるました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/536974/a567c114-d89a-b7a8-0517-5aa7d037922e.png)

#原因
色々調べたところ
###・データベースの変更が更新されていない。
###・モデルにアクセスする処理を行っているのに、heroku上のデータベースをリセットを行っていない。

これは、デプロイ自体はできているみたい。
このパターンが多いみたいです。
僕もそうでした。

#解決法
“`
$heroku run rake db:migrate
“`
↑これで、heroku上のデータベースを更新

いけました。。一安心です

元記事を表示

AWSでのデプロイ手順①ネットワーク環境設定

初心者には難関である、AWSを使用したデプロイ手順を書いてみます

AWSはUIもよく変化するので、
現在のもの(2019/10)で書いています

※アカウントがない人はまず新規で申し込みしておいてください

今回内容
[**STEP1 ネットワーク環境設定**](https://qiita.com/drafts/9a8e88a777a3a4ee7a09#step1-%E3%83%8D%E3%83%83%E3%83%88%E3%83%AF%E3%83%BC%E3%82%AF%E7%92%B0%E5%A2%83%E8%A8%AD%E5%AE%9A)
1.VPCの作成
2.サブネットの作成
3.インターネットゲートウェイの作成
4.ルートテーブルの作成
5.サブネットとの紐付け
6.セキュリティグループの作成

[**STEP2 EC2の設定**]
(https://qiita.com/drafts/9a8e88a777a3a4ee7a09#step2-ec2%E3%81%AE%E8%A8%AD%E5%AE%9A)
1.EC2にてインスタンスの作成
2.Elastic IPの割り当て
3.

元記事を表示

railsでdeviseを使う手順

ユーザー登録の際に使える、deviseという便利なツール。
よく使うことが多いので、簡単な手順をまとめました。

## gemを入れる
まずはgemを入れます

“`gemfile
gem ‘devise’
“`
“`
$ bundle install
“`

## deviseをインストールする
次にアプリケーション内にdeviseを読み込みます

“`
$ rails g devise:install
“`

## deviseを使って、モデルを作成
今回はユーザーモデルを作ってみます

“`
$ rails g model devise user
“`
必要な追加カラム等があれば、マイグレーションファイルを編集します

“`.rb
t.string :email, null: false, default: “”
t.string :encrypted_password, null: false, default: “”
#以下のように追加
t.string :name, null: false, defa

元記事を表示

rails db:migrateでエラー(StandardError: An error has occurred, this and all later migrations canceled:)

$rails db:migrate、または、$rake db:migrateを行った後の謎のエラー。

“`
== 20200107095832 CreateMicroposts: migrating =================================
— create_table(:microposts)
rails aborted!
StandardError: An error has occurred, this and all later migrations canceled:

SQLite3::SQLException: table “microposts” already exists: CREATE TABLE “microposts” (“id” INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, “content” text, “user_id” integer, “created_at” datetime NOT NULL, “updated_at” datetime NOT NULL)

・以下つづく

元記事を表示

[Rails]ログインidと投稿者が一致した時のみ編集・削除アイコンを表示させる条件式をモデルに書き出す

ビューに記載していた条件文を可読性、再利用性向上のためモデルに記載する。
※初心者です。ご指摘あればぜひお願いします。
# 環境
`Rails 5.2.3`
`mysql 5.7.28`
`gem Sorcery使用`
#変更前
“`ruby:boards_controller
def index
@boards = Board.all.includes(:user).recent
end
“`
“`ruby:_boards.html.erb
<% if current_user.id == board.user_id %>

<%= link_to icon('fas', 'pen'), edit_board_path(board), id: :"button-edit-#{board.id}" %>
<%= link_to icon('fas', 'trash-alt'), board_path(board), id: :"button-delete-#{boa

元記事を表示

【Rails】ブックマーク(お気に入り)機能

備忘録です。

掲示板におけるブックマーク機能追加し、ブックマーク一覧ページを作成。
※初学者です。ご指摘あればお願いします!

# 環境
`Rails 5.2.3`
`mysql 5.7.28`
`gem font-awesome-sass`
`gem Sorcery`
→installしていない場合、後述のcurrent_userメソッドが使用できません。

# ER図
中間テーブル(Bookmark)使用。
中間テーブル…userとboardのidだけを保存するテーブル。
![bookmark_ER図.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/562358/1a2092fb-8d9c-7ded-3be6-7ccd89eedf8f.png)

User:Board = 1:多
User:Bookmark = 1:多
Board:Bookmark = 1:多

あくまでブックマーク機能実装の記事ですので、**UserとBoardモデルはすでに作成されているものとして進行しますのでご注意ください

元記事を表示

Linuxサーバからリモートリポジトリにpush & リモートリポジトリからローカルPCにclone

######目標
– linuxサーバ上で運用されているrailsアプリのソースコードをGitlab.comのリモートリポジトリにプッシュする。
– リモートリポジトリからローカルPCのローカルリポジトリにクローンする。

######環境
– linux(GCE, Debian)
– Gitlab.com
– Mac(OSX 10.15.2)

######準備:git install (linuxサーバ、ローカルPCにGitをインストール)
下記サイトなどを参考にしてください。
https://git-scm.com/book/ja/v2/%E4%BD%BF%E3%81%84%E5%A7%8B%E3%82%81%E3%82%8B-Git%E3%81%AE%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB

######1. linuxの操作

######git config(USER_NAMEとEMAILは環境による)
“`Bash:ターミナル
git config –list
git config –glob

元記事を表示

application_helperを使う

長くてみにくかったviewの記述を`application_helper.rb`に移動させて`content_tag`と言うものを使ってhtmlタグを生成する

`content_tag`について
参考: https://qiita.com/yusaku_/items/d6e98b77124131e628fb

“`rails/app/helpers/try_helper.rb
def discount_text(service, provider)
discount_price = provider.key == “noe-jx-group” ? service[‘discount’].to_f : service[‘discount’].to_i
discount_from_energy = if SetPlan.is_discount_from_energy?(service)
“/kWh”
elsif SetPlan.yearly?(service)
“/年”
elsif SetPlan.monthly?(ser

元記事を表示

【学習まとめ】 Railsアプリケーションのテスト

## なぜテストですか。

ソフトウェア開発の仕事は、機能しているコードを書くことと思います。

問題は、正確さをどうやって確保できるのか

一つの方法は、コードを書いた後で、実行してみます。この方法は、小さいプロジェクトに対して効果がありますが、ある時点で機能が多すぎて追跡できません。新しいコード(フィーチャー)を追加すると、他のコードが予期せず壊れてしまいます。これは、`regression`(リグレックション)と呼ばれています。

より良い方法があり、自動テストです。コードで作成したコードを自動的にテストしてもらいます。自動テストは、私たちのプログラムが機能していること、そして今後も機能して続いていることを確認します。

#### お金や時間の節約

自動テストは、バグをより早く発現し、本番に不正な状態を展開されるのを防ぎます。

#### コードに自信がある

良いテストがあると、

何か壊すことを恐れことなく、コードに大きな変更を加えることができます。
金曜日の午後でも、リリースする自信があります。

#### より良いドキュメント

ドキュメントは、コードを更新するとフルい

元記事を表示

Rails 復習  エンジニア戦記#5

Rails 学習コース ⅢとⅣの復習

変数の表示方法
アクションを変数で表示する方法
データでの保存・読み出しの方法
Link_toメソッドの使い方

【感想】

仕事初めでテンパってしまって復習のみとなってしまったが
明日からがんばるのだ、俺!

元記事を表示

Pay.jpとRailsで決済機能実装してみた。

#投稿経緯
payjpの実装記事そのものはたくさんあるのですが、**haml**で書かれてるのがほとんど。
正直僕はまだ**slim**や**haml**のような短縮系での書き方がわからず手間取ったので、今回通常盤での記載で投稿しようと思いました。

#実装

##APIキー取得
スクリーンショット 2020-01-07 15.35.24.png

####1. Payjpにログイン
https://pay.jp/login
※アカウントがなければ↑からも作成可能。

####2. ログイン後APIをクリック
クリック後が写真の画面になります。
大事な情報になるので、基本的には第三者に見せないようにしましょう。

元記事を表示

初学者目線のアセットパイプライン。

#アセットパイプラインとは
JavaScriptやCSSのアセット(ここで言うとJavaScriptのコードやスタイルシート、画像など)をスペースや改行を詰めて最小化したり圧縮して連結するための機能。
app/assetsの中は開発者にとってわかりやすいように複数のディレクトリ、ファイルに分かれていて、webブラウザに行く前にそれらを結合する。

#アセットパイプラインの仕事
– 高級言語のコンパイル※
– 連結
– 圧縮
– publicディレクトリにファイルを配置

以上の作業をアセットコンパイルという。

#導入方法
Gemfileに記載しなくてもGemfile.lock勝手に入っている、sprockets-railsというgemによって実行される。

#まとめ
javascriptを勉強していて、必要な知識だったので調べてみたらざっとこんな感じになりました。
ものすごく短い記事ですが、今はこの程度の理解。理解が深まればまた追記していきますが、みていて指摘などありましたらありがたいです。

元記事を表示

画像ファイルについてしまった[ ]を取り除く

# はじめに
画像ファイルを複数登録するときに、multipleを使うと簡単に実装できます。
が、(自分の環境だけなのか)保存されるデータに含まれる画像ファイル名に
[ ]がついてしまい、実際に保存されている画像ファイル名を齟齬が生じ
エラーとなる自体が発生していました。
そこで、Model側にこれを取り除くメソッドを追加しましたが、同じような環境で
困っている方はご利用ください
~~最近、某プログラミングスクールではこれの影響なのかmultipleを使わないようにと
御達しが出たようですね。~~

# 前提条件
ItemモデルはImagesを複数持つアソシエーションが組まれていること

# コード

“`ruby:app/models/image.rb
class Image < ApplicationRecord belongs_to :item, optional: true validates_presence_of :item mount_uploaders :image_url, ImageUploader def image_path ret

元記事を表示

haml-railsでerbファイルをhamlに変換する方法

個人アプリ開発において新しく立ち上げる度に何度も調べてしまうので備忘録として残す。

## 結論
このgemをGemfileに記述

“`:Gemfile
gem “haml-rails”
“`

bundle installを実行

“`:ターミナル
$ bundle install #bundle でも可
“`

下記コマンドを実行し、erbファイルをhamlに変換。

“`:ターミナル
$ rails haml:erb2haml
“`

元のerbファイルを削除するかどうかを聞かれる。不要な場合はyを選択。

“`:ターミナル
Would you like to delete the original .erb files? (This is not recommended unless you are under version control.) (y/n)
y
Deleting original .erb files.
———————————————————————–

元記事を表示

OTHERカテゴリの最新記事