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

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

bundle execが必要な理由

#なぜbundle execが必要なのか
“`
$bundle exec rails g controller user
“`
のようにすると、Gemfile.lockに記載されているものがrequireされる。

簡単に言うと、bundle exec をつけないで開発を行い、アップデートを行うという場合、動かなくなることがある。だから、bundle execを付けて開発を行うのが安牌なのかなという理解で、とりあえずは良いのかなと思いました。

参照
https://qiita.com/dawn_628/items/1821d4eef22b9f45eea8
この記事とかとても詳しく書かれていました。

元記事を表示

Rails Tutorial 第13章 パーシャルのパスはカレントでも省略するとエラーになる

##リスト13.43は演習で変更していたようで、テキストと違った

new.html.erbには修正すべきerror_messagesの行がありませんでした。

“`ruby:views/users/new.html.erb
<%= render 'form' %>
“`

formに移してあったので、修正しました。

“`ruby:views/users/_form.html.erb
<%= form_for(@user, url: yield(:url_path) ) do |f|%>
<%#= render 'shared/error_messages', object: @user %>
<%= render 'shared/error_messages', object: f.object %>

<%= f.label :name %>
<%= f.text_field :name, class: 'form-control' %>
“`

おそらく過去に演習で変更していたと思われます。ネットで同じ方がいたた

元記事を表示

【Rails MySQL】heroku上のDBをリセットする方法

#内容
Railsで作成したheroku上のアプリのDBをリセットしようと“`heroku run rake db:reset“`をしたらエラーが起きてリセットできませんでした。

#行った作業
ターミナルに表示されたエラー文ではこう書かれていました。

“`
rake aborted!
ActiveRecord::ProtectedEnvironmentError: You are attempting to run a destructive action against your ‘production’ database.
If you are sure you want to continue, run the same command with the environment variable:
DISABLE_DATABASE_ENVIRONMENT_CHECK=1
“`
翻訳すると、
“`「本番」データベースに対して破壊的なアクションを実行しようとしています。
続行する場合は、環境変数を指定して同じコマンドを実行します。
DISABLE_DATABASE_EN

元記事を表示

Heroku×CloudflareでHTTP Origin Header didn’t match request.base_urlというエラーをrailsのmiddlewareで解決する。

###背景

Herokuアプリを無料でSSL化する際に、Cloudflareと連携させる方法がある。
詳細は以下を参照。
https://qiita.com/serinuntius/items/f7f08b2221f5ad068f5d

Cloudflareはフレキシブルモードで、クライアントとhttps、herokuとはhttpで通信をしてくれる。

その状態で次のエラーになることがある。
`HTTP Origin header didn’t match request.base_url`

詳しくは分からないが、httpとhttps、2つの通信形態を混在させていることが原因っぽいエラーだ。

### 類似記事
お金を払ってherokuをSSL化すれば、解決する。herokuとcloudflareの通信もSSL化すればいいという作戦。詳しくはこちら (だったらcloudflareいらなくね?)。
https://qiita.com/mzmt/items/2b44e82f2aa90ebf4623
[Heroku×CloudflareでHTTP Origin Header didn

元記事を表示

rspec実行時に “NameError:uninitialized constant ActiveSupport::ParameterFilter”

#環境
ruby 2.5.1
rails 5.2.4

#背景
1. docker環境を構築
2. CircleCIを導入
3. ローカル環境で CircleCI による rspec 実行がうまく作動するかテスト
4. falseが多く、タイムアウトになったりする
5. 問題の切り分けをするため、CircleCiではなく、普通にrspecコマンドを実行してみる
6. 一週間前はなかったタイトルのエラーが発生

“`
$ bundle exec rubocop –require rubocop-airbnb

…s

Failure/Error: get article_url article

NameError:
uninitialized constant ActiveSupport::ParameterFilter
# ./spec/requests/articles_spec.rb:33:in `block (4 levels) in
“`

#結論
gem の”impre

元記事を表示

【Rails】サイトのRSSを読み込んで、内容をフロントに返す

RSSとは

Rich Site Summaryの略で、充実したサイトの要約という意味になる。

主な特徴は、

– 内容情報のメタデータ化にRDFを使う。
– それの情報をXML言語で記述する。

|Webサイトの要素|マークアップ言語
|:–|:–
|Webページ|HTML
|RSS|XML

メタデータ

データベースでいうカラムのこと

RDF

メタデータを統一するための規格。データベースでいうモデル?

マークアップ言語

<>で表した要素を使って、データの構造を示す言語

#gemを追加

“`ruby:Gemfile
gem ‘feedjira’
gem ‘httparty’
“`

“`
$ bundle install
“`

##対象RSSを、Railsで処理してクライアントに送るまでの流れ

1. RSSをrailsに送る
2

元記事を表示

第5章 レイアウトを作成する

#5.1 構造を追加する

■application.html.erb
全てのページのレイアウトのテンプレート。

■link_toヘルパー
link_to A,Bで使う。
Aに文字列、BにURLを記載する。
最終的にBは「_path」という記載になる。

■image_tagヘルパー
image_tag A,Bで使う。
Aに画像のURL、Bにオプションを記載できる。
railsでは画像をapp/assets/images/に置かなければならないようだ。

■Bootstrap
CSSのフレームワーク。
これはこれでどの記述がどうなるのか知識として入れておかなければならないようだ。

■パーシャル
見た目が美しくないモノ、繰り返し登場するものをまとめたもの。
<%= render 'パーシャルのファイルパス'%>で呼び出す。
パーシャルはアンダーバーから始まる名前を付ける。
見た目に関するものなので、置き場はView。Layoutに置くのが一般的なようだ。

#5.2 Sassとアセットパイプライン

#5.3 レイアウトのリンク
■_path書式
get ‘/help’, to:

元記事を表示

Webエンジニア未経験の女が自社内開発企業に転職するための指針

#今回の記事の目的
Railsエンジニアとして未経験のわたしが自社内開発企業に転職するための目標や実践することなどを書いていき、それが少しでも参考になればと思い今回記事にさせて頂きました。

###自社内開発に転職したい理由
「Webエンジニアになりたい!」と初めて思ったときには「SES」や「SIer」「自社内開発」「受託開発」などの概念がわからず当たり前のように就職した会社のサービスの制作に携われると思っていました。でも開発の業務内容の違いや事業内容の違いなどを知り改めて考えたときに「わたしが本当にしたいことってなんだろうか?」と思ったときにWeb系の自社内開発企業のエンジニアが一番わたしが求めるものと一致していると感じたことが大きな理由でした。

###未経験でもできること

即戦力として求められる自社内開発企業で未経験のわたしでもできることがなんなのか考えたときに**自走力をつける**ことが大切なことだと知りました。もし採用する企業様の立場になって考えたときに「自分で考えて実装できるエンジニア」と「誰かに教えてもらえないとできないエンジニア」なら当然前者を選ぶことは明白だろうと考

元記事を表示

複数のテーブルに一度の入力で保存する方法

【概要】◀︎ここから先に書く
—————————————-
1.結論

2.Formオブジェクトとは

3.使用方法

4.ここから学んだこと

1.結論
—————————————-
Formオブジェクトを使う!

2.Formオブジェクトとは
—————————————-
複数のテーブルに1度に保存できる方法です!
本来であれば保存したいテーブル分のコントローラー、モデルmigrateファイルを作らなければなりません。この場合ですと、モデルとある一つのファイルをつくるだけで簡単にできます!

3.使用方法
—————————————-
❶appにformオブジェクト専用のフォルダとその中にファイルをつくります。そして以下のように記述します。今回は購入された情報と住所をDBに反映させたい

元記事を表示

(ギリ)20代の地方公務員がRailsチュートリアルに取り組みます【第3章】

##前提
・Railsチュートリアルは第4版
・今回の学習は3周目(9章以降は2周目)
・著者はProgate一通りやったぐらいの初学者
##基本方針
・読んだら分かることは端折る。
・意味がわからない用語は調べてまとめる(記事最下段・用語集)。
・理解できない内容を掘り下げる。
・演習はすべて取り組む。
・コードコピペは極力しない。

いよいよメインのsample_appが始まる第3章。
この章から学習のお供に、本日のBGM入れていきます。気分転換にどうぞ。
[羊文学 “人間だった”](https://www.youtube.com/watch?v=16jL0eThQmM)

 
####【3.1 セットアップ 演習】
 gemファイルのインストールでさっそく赤字エラー吐きますが、bundle updateして再度インストールすれば解決します。
そして、herokuへデプロイするところでまたエラー。**Precompiling assets failed**の赤文字が。プリコンパイルだから、コンパイルする前の段階でエラー?ログを辿ってエラー吐いてる箇所を調べても**NoMethod

元記事を表示

【Rails6】FullCalendar(v5)の導入

FullCalendarを導入しようとしたところ、バージョン違いに気づかず手こずってしまいました。
無事に導入できたので、記念に「カレンダーを表示するまで」をまとめてみたいと思います!

##環境
“`
ruby 2.6.5
rails 6.0.0
FullCalendar v5.3.1
“`

##導入方法の違い
さくっとカレンダーを作れる便利なプラグインで有名なFullCalendar。
これまでrailsでFullCalendarを導入する場合には、
“gem ‘jquery-rails’“
“gem ‘fullcalendar-rails’“
“gem ‘momentjs-rails’“
のgem3点セットを導入するのがお決まりだったようですが、
FullCalendarのバージョンアップにより、jqueryとmomentjsが不要になった模様です。

さらに、RailsもRails6からデフォルトでwebpackという仕組みを使用するようになりました。
これまでjavascriptファイル関連の格納先は
app>assets>javascript でしたが、

元記事を表示

before_actionの使い方

プログラミングスクールの最終課題フリマアプリの開発において
コードレビューの際に指摘をもらった箇所を復習用に記録しておきます。

マイページ実装の際にrailsでcredit_card_controller.rbに
コードを記載しました。
重複しているコードを別で定義して書き変え、before_actionにて呼び出すようにとのこと。

“`
@card = CreditCard.find_by(user_id: current_user.id)
“`
このコードを下記のように定義し、before_actionで呼び出しました。

“`
def find_card
@card = CreditCard.find_by(user_id: current_user.id)
end
“`

今回はcreate意外でbefore_actionが実行されれば良いので
下記のようにnew,show,destroyと指定しております。

“`
class CreditCardsController < ApplicationController require "pay

元記事を表示

【Rails6 / Google Map API】住所を投稿してマップに複数マーカーを立てる

# はじめに

## つくるもの
こんな感じの投稿した住所または地名から緯度と経度を検索してそれぞれの地点にマーカーを立てるマップです。
(「東京都墨田区押上1丁目1−2」(スカイツリー)のように住所を投稿することも可能です)
![スクリーンショット 2020-08-28 1.54.39.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/674324/d1774490-5d6d-1282-e7bd-30aa88610b0c.png)

## 用意しておくもの
#### 前提知識
今回はGoogleMapAPIを用いたマップの表示はできているものとして進めていきます。
GoogleMapAPIを用いたマップの表示がわからない人は下記の記事をお読みください。
[【Rails6 / Google Map API】初学者向け!Ruby on Railsで簡単にGoogle Map APIの導入する](https://qiita.com/nagaseToya/items/e49977efb6
86ed05eadb

元記事を表示

Railsのtime_selectでデフォルトで入力される日付を、画面上にある別のフィールドの入力値にする

### 背景とやったこと
Railsのアプリで、こんな感じのフォームを作っていました。
実施日を`date_field`で選択し、開始時間・終了時間をそれぞれ`time_select`で選択します。

なお、実行環境は`rails 5.2.4.2`です。
[![Image from Gyazo](https://i.gyazo.com/8732f9653b30168bf4ddf8251658e334.png)](https://gyazo.com/8732f9653b30168bf4ddf8251658e334)

viewファイルの中身はこんな感じです。データ型は、全てのフィールドで`DateTime`型でした。

“`haml:view
.form-group
= f.label :date, “実施日”
= f.date_field :date
.form-group
= f.label :begin_at, “開始時間”
= f.time_select :begin_at
.form-group
= f.label :closed_at, “終

元記事を表示

【Mysql】CSVファイルをDBにインポートする

##今日やること
CSVでダウンロードしたファイルをmysqlを使ってDB(phpmyadmin)へ格納する

以前結構悩んだ上に無事成功させたのですがメモるのを忘れ再度時間を要してしまったため備忘録という意味も込めてまとめる。

##前提
スプレッドシートに入力したトレーニング情報をcsvでダウンロードしmysqlを用いてDBへ格納させる。

##スプレッドシートをCSV形式でダウンロードする
該当のSSのシートを表示し「ファイル→ダウンロード→カンマ区切りの値(.csv、現在のシート)」の順に押下しダウンロードする。
![スクリーンショット 2020-09-04 21.55.51.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/589286/9abba886-bf5b-1cce-f9a3-b5d4c276b965.png)

とっても簡単。

##現在使っているオブジェクトの傘下に置いてあげる
![valuX-AWS-Cloud9.png](https://qiita-image-store.s3.a

元記事を表示

本番環境で画像アップロード時のエラー:「Permission denied @ rb_sysopen – /var/www/rails/app/tmp/uploads/cache/xxxxxx」への対処法

Rrailでアプリを作りAWSの本番環境でデプロイが完了し、動作確認で画像を投稿しようとしたら以下のエラーが出ました。

“`Permission denied @ rb_sysopen – /var/www/rails/app/tmp/uploads/cache/xxxxxx“`

権限周りでエラーが起こっているらしいです。
調べたところ[こちらの記事](https://qiita.com/4EAE_Learner/items/1e0824a71cb4eb41780a)が参考になりました。

私の場合EC2にSSHログインし、対象フォルダまで移動、権限の変更で解決できました。
(usernameは適宜変更して下さい。 “whoami” というコマンドで確認できます)

“`
$ ssh app_name_key_rsa
$ cd /var/www/rails/app/tmp/uploads/cache
$ ls -la
drwxr-xr-x 2 root root 6 8月 14 00:44 .
drwxr-xr-x 4 root root 32 8月 14 00

元記事を表示

【Rails】モデルスペックの基礎【RSpec】

# モデルスペックにおいての正常系/異常系

## そもそも正常系,異常系とは

### 正常系

簡単に言うと、**想定されたインプット(初期化等)があった時に、想定されたアウトプットや状態を得ることができること。**

### 異常系

**想定されていないインプットがあった時に、エラーを出力されるなどの想定されたアウトプットが得ることができるということ**

### 【例】ユーザー登録の場合

下記のデータを要求しているモデルがあったとする。

– name
– email address

上記の二つを満たしていれば、登録できる→**正常系**
上記の二つのうち一つでも欠けていると登録できない→異常系

# モデルスペックでの正常系/異常系を考える

– 正常な属性を持つモデルであれば有効
– バリデーション(異常)に引っかかる属性であれば無効

こんな感じで区別できますよね。

# よくわからないけど、書いてみようぜ。

## 前提

userモデルは下記の項目を必要とする。

– name
– password
– email

`email address`は**重複不

元記事を表示

has_manyとbelongs_toの存在チェック ー optional: trueとは?

# 動機
`belongs_to`側での、関連先の存在チェックは多くの場合で必要だと思いますが、`has_many`側での関連先の存在チェックはあまり出会すことがなかったので、調べてみました。

# やりたいこと
userモデルとteamモデルの関連付け。ただし、以下の制約付き。

– userが少なくとも1つはteamを持っていなければならない。(1つ以上のチームに所属する必要がある)
– 逆に、userに関連付いていないteamは存在してはいけない。

↓こんな感じの関連付けです。
![スクリーンショット 2020-09-04 19.28.21.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/684915/5568f415-1057-ef3f-dc83-581c5d04b530.png)

# 環境
Rails 6.0.3
Ruby 2.7.1
mysql2 0.5.3

# postモデルの関連付け
“`ruby
class Team < ApplicationRecord belongs

元記事を表示

Choices.jsでリッチな複数選択リストを実装する

スマートな操作性と、モダンなUIを提供してくれる「[Choices](https://joshuajohnson.co.uk/Choices/)」をRailsアプリに組み込む方法です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2883/7a549c5f-0ec8-54c8-7bdc-885ccaa7d3b0.png)

今回のサンプルでは「タスクに複数のメンバーをアサインする」部分を例に解説してみたいと思います。

# 動作イメージ

![choices.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2883/e4a300f2-111e-a7b2-b533-0a01b243c97b.gif)

# 環境とgem

– ruby 2.7.1
– rails 6.0.3
– webpackerは有効
– turbolinksは無効
– hamlit-rails
– simple_form

# 手順

元記事を表示

Rails fields_for体系

## How to use
####Overview
formの中で異なるモデルに値を入力したい時に有効的よん。
####Example
Hotelモデルがあります。さらに、Hotelモデルと多対多の関係にあるFeeモデルがあります。これらは、ホテルとホテル予約料金プラン(複数)の関係性ですねー。

ホテル登録フォームがあります。その中には、ホテル予約料金プランを入力するフォームがありますっ。しかし!ここで問題が発生。通常のform_forを使ったフォームではモデルが1つしか設定できません?

そこで!fields_for登場。form_forに親モデルであるHotelモデルを指定。そして、form_forの中にfields_forを作りFeeモデルを指定。あとは、通常と同様にオプションを指定すれば、フォームにデータを入力できる!
####Detail
– 親モデル(Hotel)にaccepts_nested_attributes_forメソッドを記述
– fee_attributesをHotelコントローラーのストロングパラメーターに追加

####Putting into prac

元記事を表示

OTHERカテゴリの最新記事