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

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

PG::UniqueViolation: ERROR: duplicate key value violates unique constraintエラーの解決

PGデータベースにデータをインポートの後など、このエラーが発生する場合があります。

“`
PG::UniqueViolation: ERROR: duplicate key value violates unique constraint “_pkey”
“`

## 原因

データインポートなどの場合、PostgreSQLが指定したカラムの最大値を取ってくれず、別に保存してある最大値になってしまいます。

## 解決

Railsコンソールで以下のコードを実行すれば治ります。

“`ruby
ActiveRecord::Base.connection.tables.each do |t|
ActiveRecord::Base.connection.reset_pk_sequence!(t)
end
“`

元記事を表示

Rails でherokuデプロイ時にPrecompiling assets failedが出た

# 環境
Rails 5.2
Ruby 2.6

フロント側ではvue+vuex+vue-routerを使用

# 症状
herokuにプッシュしようとしたら、`Precompiling assets failed`のメッセージが出て、デプロイが失敗する。

ログの上のほうには
`Field ‘browser’ doesn’t contain a valid alias configuration`
のメッセージあり。

# 原因
パッケージの依存関係に問題あり?

> https://stackoverflow.com/questions/61956924/rails-field-browser-doesnt-contain-a-valid-alias-configuration-when-pushing

package.json

“““
{
“name”: “mapApp”,
“private”: true,
“dependencies”: {
“@rails/webpacker”: “5.1.1”,
“axios”: “^0.20.0”,

元記事を表示

ソースコードを読むための技術(チートシート)

# 1 概要
聞くところによると業務の8割がソースコードを読む時間らしい。しかし、8割という規模感の割には世間でソースコードの読み方についての議論が活発にされている印象はない上に、体系的かつ順序立てたソースコードの読み方をまとめたWebサイトや書籍も少ない。疑問に思いながらもそれなりに長いことデバッガーを使った読み方・リーダブルコードの内容・Web記事を参照にしてソースコードを読んでいた。

しかし、ソースコードリーディングの方法についての情報がメモアプリ内で散らかってしまい、いつまで経ってもソースコードリーディングの技術が体系的に身についていないと感じたため、本稿では本・Web記事・YouTubeなど媒体を問わず、様々な文献からソースコードを効率的に読む方法をチートシートにしてまとめた。チートシートにする目的は見返して反復し長期記憶化しやすいようにするためと、ソースコードリーディングについての知識を体系的にまとめ、情報を一元化することで情報の取り出しを容易にするためである。また、本稿で想定している言語は私に馴染みのあるRubyとする。

# 2 コードリーディングにおける階層

元記事を表示

[Rails] webpackerでCSSを読み込みたい

railsのver.6以上を使うなら `asset pipeline` ではなく `webpacker` でCSSを読み込みたいと思い、実装したのでメモです。

## ディレクトリ構成
[webpacker](https://github.com/rails/webpacker) のREADME.mdより。

“`
app/javascript:
└── packs:
# only webpack entry files here
└── application.js
└── application.css
“`

# 手順
`rails new` は完了しているものとします。
rails6より下のversion使ってる人はwebpackerもインストールしましょう。

## 新規フォルダ・ファイル作成
↑のディレクトリ構成に従う。
app/javascript/packsに `application.css` ファイルを作成

## エントリーポイント
エントリーポイントは packs/application.js なので、applicat

元記事を表示

お気に入り機能のajax化

備忘録です!!

##ajax化とは

ajaxとは、Asynchronous JavaScript + XML の略で、非同期通信と呼ばれる通信方法のことを指します。

クライアントとサーバー間の通信においては、通常、同期通信と呼ばれる方法が用いられ、一瞬画面が白くなった後、画面が切り替わるような通信は、全てこの同期通信です。

同期通信では、

クライアント → サーバーを呼び出す → サーバー側で処理が行われる →(クライアント側では、処理を待っている)

→ クライアントに結果を返す

非同期では、

クライアント → サーバーを呼び出す → サーバー側で処理が行われる →(クライアント側では、処理を待たずに他の操作ができる)

→ クライアントに結果を返す

同期通信では、サーバーにリクエストを送るとページ全体の情報を返すように処理され、サーバーかの応答があるまでその結果を待機し、結果を受け取った後に画面全体を切り替える処理を行うのです。
非同期通信では、一部の情報しか返さないように処理され、ユーザーに処理待ちの時間を与えずに、裏では随時通信が行われています。

今回は、a

元記事を表示

【railsチュートリアル 3章】テスト関連

# コントローラを作成した際にできるデフォルトのテスト

getはHomeページやHelpページがいわゆる「GET」リクエストを受け付ける普通のWebページであるということを示す。
「response:success」は、実際にはHTTPのステータスコード(ここでは200 OK)を表す。

つまり

**「GETリクエストをhomeアクションに対して送信すれば、リクエストに対するレスポンスは成功になるはず」**

“`ruby:static_pages_controller_test.rb

require ‘test_helper’

class StaticPagesControllerTest < ActionDispatch::IntegrationTest test "should get home" do get static_pages_home_url assert_response :success end test "should get help" do get static_pages_help_url asse

元記事を表示

【面倒臭がりさん必見】たった1つのコマンドでRails + React環境構築

突然ですが、環境構築は好きですか?
…私は苦手です。
端が丸まってくっついちゃったサランラップぐらい苦手です。

恐らく、あなたがこの記事を開いたということは
少なからず環境構築に苦手意識を持っているのではないでしょうか。

**「もっと気軽に環境構築できたらいいのにな…」**

というあなたの心の声を受け
今回は**『コマンド1つでRailsとReactの環境構築ができるシェルスクリプト』**をつくりました。

コマンドを叩いて『Netflix』で好きな動画を見ていれば
勝手に環境構築が終わっている夢の世界がここにあります。

さらに!

環境構築終了後、すぐに開発が始められるよう
Rails側のトップページとReact側のエントリーポイントも自動で生成される完全親切設計版です!
Reactのコンポーネントが初めからゴリゴリ書ける状態になっています。

以下、本文

## 前提必須条件
Dockerがインストール済みであること

## 主にインストールされるもの
| インストールされるもの | バージョン |
| :—————– | ——–

元記事を表示

0823

#やったこと
– Progate rails 7章
– C++ 増分演算子と減分演算子, 繰り返し(do, while, for / break, continue, goto)

##カラムの追加
######方法1 マイグレーションファイルに書き込む

マイグレーションファイルを作成する

“`
$ rails g migration add_image_id_to_users
“`

カラムの追加は`add_column :テーブル名, :カラム名, :データ型`

“`ruby:db/migrate/作成日時_add_image_id_to_users.rb
class AddImageIdToUsers < ActiveRecord::Migration[5.0] def change add_column :users, :image_id, :string end end ``` データベースに反映 ``` $ rails db:migrate ``` (モデルを作成するときに`$ rails g model ...`で作成されたマイグレーショ

元記事を表示

array.map(&:method) を使って簡単に

#array.map(&:method) を使って簡単に

##例

下のような式があるとする。
ブロック内で各要素を大文字に変換してそれをarrayに格納する。

“`ruby
[‘a’, ‘b’, ‘c’].map{|s| s.upcase } #=> [“A”, “B”, “C”]
“`

##array.map(&:method) を使って簡単に
array.map(&:method)を使って上の例のしきを簡単にできる。

“`ruby
[‘a’, ‘b’, ‘c’].map(&:upcase) # => [“A”, “B”, “C”]

“`

##適用条件
1. ブロックの引数が一つだけ
2. ブロックの中で呼び出すメソッドには引数がない
3. ブロックの中では、ブロック引数に対してメソッドを呼び出す以外の処理がない

元記事を表示

Railsにおけるsessionについて整理してみた

railsチュートリアルをもりもりとやっております。
第8章にて取り扱われている「session」について、今回は自分の理解のために整理したいと思い記事を書きました。
初心者なため、なにか間違いなどあればコメントにてご指摘いただけると嬉しいです。

そもそもsessionって何?

(答え)
“statefullな通信”を実現する”仕組み”のこと。

ステートフルとはなにか?

私たちが普段使っているHTMLは、statelessな通信を行っています。
*state (状態) less(ない)= 1回1回が独立したやりとり

この通信は、ブラウザ⇄サーバ間のやりとりは1往復ごとに独立しており、
以前の情報などは引き継ぐことはできません。

ただ、この話を聞いた時に疑問に思うかもしれません。
HTMLの通信は全て独立したやりとりならば、例えば、ショッピングサイトなどで、
カートに買いたい商品を入れていく際、情報は引き継がれないため、
ページ遷移するとカートは空になってしまうはずです。

なので、**ステートレスなHTMLの通信を”ステートフル”にする

元記事を表示

ジャンル別に投稿・チャットできるようなアプリ作ってみた〜アプリ概要〜

個人アプリでジャンル別に投稿・チャットができるようなアプリを作成してみました。
下記の文章はこのアプリのREADMEに載せているものです。
概要として、この記事も投稿したいと思います。

## Ota-Chat
### :sunny:アプリ内容
– どんなアプリか
趣味が同じ人同士でTwitterのような投稿をし合い、その中でグループを作って趣味が合う人同士でチャットができるようにしたアプリ
– このアプリでできること
– ジャンルでの投稿のみをすることもでき、また、その中でグループを作成し、決まったメンバーとチャットすることもできます
– グループ作成では、グループにランク(ライト・ミドル・ハード)を選択でき、メンバーの趣味の度合いによって選択できるようになっています
### :sunny:URL(デプロイ済)
https://ota-chat.herokuapp.com/

### :sunny:開発環境
– Ruby
– Ruby on Rails
– VSCode(Visual Studio Code)

### :sunny:制作背景

元記事を表示

Rails開発でのviewごとに個別にcssを呼び出す方法について

##概要

Railsでwebアプリケーション作成時にフロント部分で
「Viewごとに読み込ませるScssを分けたら開発しやすくなるにな」と思い、
いろいろ調べてうまくいったのでメモ程度ですが残します。

##1.app/assets/stylesheets/application.cssを修正します。

Railsアプリでは、デフォルトでアセットに含まれているCSSとJavaScriptは全て読み込むようになっています。
今回はViewごとに読み込ませるcssを分けたいので、CSSを全て読み込ませる設定を無効にします。

「*= require_tree .」を削除

app/assets/stylesheets/application.css

“`:修正前

*= require_tree . #ここの’=’を削除します
*= require_self
*/

“`

“`:修正後

* require_tree .
*= require_self
*/

“`

##2.config/initializers/assets.rbに読み込むcssを設定し

元記事を表示

【Ruby on Rails】条件合致する時のみ機能するバリデーションの実装

Ruby on Railsにおいて、ある条件に合致する時のみ機能するバリデーションを記述したい場面があり、解決するまでに時間がかかったため、ある条件に合致する時のみ機能するバリデーションの記述方法を下記に示します。

#### 概要
登録したいレコードのカラムXの値がaの時のみ有効になるバリデーションの記述

#### 具体例
下記例は、products tableのカラムpublic_flag(型:integer)の値が1の場合、
products tableのカラム商品名(name)、商品説明(description)、商品価格(price)の値が空では登録できないという制約を付与している例である。

下記の場合、public_flagの値が0の場合、商品名(name)、商品説明(description)、商品価格(price)の値が空でもproducts tableへ登録が可能である。
 ※public_flag 1: 公開情報、0: 非公開情報

model(product.rb)

“`ruby
with_options presence:true, if: :isPro

元記事を表示

【プログラミング初心者】ER図を描画しよう

## ER図とは
ER図とは、データベース設計で使う設計手法のことです。
データベースが必要なWebサイトを構築する際には必ず作成しなければなりません。

エンティティ同士をリレーションで関連づけて描画し、それを元にデータベースを構築します。

## 描画ツール
描画していくにあたって、何かしらのツールを使おうと探した結果、初心者にぴったりな物を見つけました。
「[Cacoo](http://cacoo.com “Cacoo”)」です。
駆け出しで個人開発ならCacooの無料プランで充分だと思います。
もし機能が必要なら有料プランも用意されていました。
まだ使い始めたばっかなので、使いやすい!くらいしかわからないですが、、

## 実際に書いてみた
今回はメルカリのクローンサイトを作る際のER図を描画しました。

めちゃくちゃ使いやすかったです。

書いた[ER図](https://gyazo.com/929e4b2bb1399a624098f0d243a2c113)をGyazoでキャプチャしました。
これからREADME書いてプルリク出してきます、、、

元記事を表示

Rails カスタムバリデーション(validator, EachValidator)

#はじめに
今回はカスタムバリデーションについて。(`validator`, `EachValidator`)

# カスタムバリデーター
モデルとは別で自分でバリデータやバリデーションメソッドを作成できる。`app/`配下にvalidatorsディレクトリ(`app/validators`)を作成することで、自動で読み込んでくれる。

# validator
ActiveModel::Validatorを継承するクラス。これらのクラスでは、validateメソッドを実装する必要がある。
クラス名に`規定はなく`、validateメソッドを実装する必要がある。
引数としてrecordを受け取ることができる

・`record`モデルインスタンス

“`ruby

class UserValidator < ActiveModel::Validator def validate(record) if record.id.present? && !User.exists?(id: record.id) record.errors[:name] << '対象のユー

元記事を表示

Rails Tutorial 第11章 いったん完了

##2020/8/8 1.0時間
途中休憩を入れ進めました。
##2020/8/9 1.5時間
11.2まで完了しました。
##2020/8/10 1.5時間
11.3.1 まで完了しました。
##2020/8/11 4時間
リスト11.34まで進め、その後で泥沼にはまりました。
この日が1週間の夏休みの最終日で時間をかけられました。
##2020/8/12 0.5時間
夏休みが終わって勤務日が始まり、朝の時間に少しだけ進めました。
##2020/8/13 0.5時間
リスト11.38まで進めました。
##2020/8/14 1.0時間
演習11.3.3.3でエラーになり時間がかかりました。
##2020/8/15 2.0時間
11.3まで終わりました。SendGridがどういうものか調べました。この時点で新しいサービスを始めて使うという点で、何となく嫌な予感がしました。
##2020/8/16 1.0時間
SendGridに登録を申請しました。
IDを有効化するのを待つことになりました。
早くても翌営業日だそうです。
まだログインできません。
##2020/8/17 0.5時間
Se

元記事を表示

お気に入り機能と一覧の実装

備忘録です!!

##Bookmarkモデルの作成

“`ruby:ターミナル
rails g model Bookmark user:references board:references
“`

“`ruby:bookmark.rb
belongs_to :user
belongs_to :board
validates :user_id, uniqueness: { scope: :board_id }
“`
お気に入りを外す処理では、ユーザーと掲示板のお気に入りの関係性がなくなるように該当のレコードを削除します。
もしuserとboardの組み合わせのレコードが重複すると、お気に入りを外しても関係性のレコードが残り、お気に入りが解除できなくなってしまいます。
そのため、ユーザーと掲示板の組み合わせのレコードを一意にするためのunique制約が必要となります。

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

“`ruby:user.rb
has_many :bookmarks, dependent: :destroy
has_many :bookmark_b

元記事を表示

ov_xml_reader.c:24:10: fatal error:’libxml/xmlreader.h’ file not found #includeの解決方法

##環境構築する時にたまに出るので備忘録として。

結論gemfileのfogが原因でエラーが出てたみたい。

“`
source ‘https://rubygems.org’
git_source(:github) { |repo| “https://github.com/#{repo}.git” }

ruby ‘2.6.5’

# Bundle edge Rails instead: gem ‘rails’, github: ‘rails/rails’
gem ‘rails’, ‘~> 5.2.3’
# Use postgresql as the database for Active Record
gem ‘mysql2’
# Use sqlite3 as the database for Active Record
# gem ‘sqlite3’, group: :development
# Use Puma as the app server
gem ‘puma’, ‘~> 3.11’
# Use SCSS for stylesheets
gem ‘sass-rails’

元記事を表示

クリックイベントでタブの切り替えをするときにハマったこと

#背景
クリックしたときにタブの切り替えはできたが、肝心な内容がもともと両方とも表示されてしまっている
タブの切り替えだけ反映されても意味がないのだ…。?

#仮説
jqueryの記述に問題があると仮説を立てた。

#実装開始
調べてみると、show、hide、toggleというものを見つけた。

でも、よくよく考えてみるとこれらはクリックしたときに起こるイベントだから意味ないような…。

ということで、もっと調べてみると、cssのdisplay:none;と言うものを発見。

“`haml

%ul.container-body
%li.container-body__item.show
%p お知らせはありません
%li.container-body__item
%p やることはありません
“`

“`scss
.container-body {
width: 100%;
&__item {
display: none;

元記事を表示

【Ruby/Rails】スレッドエラー(ThreadError)をリトライする機構

# 概要

`Thread.new()`を使いマルチスレッド処理してたところ、Herokuにてリソース不足エラーが発生。

“`
can’t create Thread: Resource temporarily unavailable (ThreadError)
“`

スレッドエラーのハンドリングと、ベストエフォートでスレッドを使うリトライ機構を作成した。

ちなみにHerokuで実行できるプロセス・スレッド数はかなり限られているので、ローカル環境との差異に注意。

https://devcenter.heroku.com/articles/limits#processes-threads

2020/08現在

“`
free, hobby and standard-1x dynos support no more than 256
standard-2x and private-s dynos support no more than 512
performance-m and private-m dynos support no more than 1638

元記事を表示

OTHERカテゴリの最新記事