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

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

[Rails]DBにデータが登録されない場合の対処法

## はじめに
フォーム入力内容をDBに保存したいがハマったのでアウトプット

## 環境

Rails 5.0.7.2
ruby 2.5.1
mysql 14.14

## 問題点
フォーム入力内容を保存しようとすると、パラメータに保存されているがDBに保存されない。

## 対処方法
保存するメソッドの後ろに!をつけて原因を確認。

すると、**validation failed:User must exist**(エラー内容は異なる場合がありそう)

## 原因
アソシエーションが組まれている際に、該当の外部キーが入っておらず、バリデーションで弾かれているのが原因。

**optional: true**を記述。

“`goal.rb
class Goal < ApplicationRecord validates :name, presence: true, uniqueness: true validates :time, presence: true, uniqueness: true validates :days, presence: true, uni

元記事を表示

Rails6・unicorn、nginx、postgresのdockerコンテナを別々で立てる

## 紹介する内容
– dockerコンテナを三つ(Rails6とunicorn一緒に、nginx、postgres)にして立てます
– nginxのUNIX-domain socketとdocker composeのvolume活用します

## 結論
### Rails6コンテナはunicornをforegroundで起動、nginxのUNIX-domain socketをdocker composeのvolumeマウントしたら動きます
– Rails6コンテナはunicornをforegroundで起動させて、nginxの通信を待ちながらコンテナが落ちない(exit 0)ようにします
– nginxのUNIX-domain socketをdocker composeのvolumeを使って、Rails6コンテナのunicornに共有させます
– UNIX-domain socket使いますからportはnginxとpostgresだけ開けば十分です

### AWS ECSなどに活用できます
– dockerコンテナを別々に立てる予定のECSに`このコンテナ構成動くか?`の

元記事を表示

rake routesでDevise.secret_key was not set. Please add the following to your Devise initializer:がでる

## 環境

“`
ruby 2.5.1
Rails 5.0.7.2
“`

## やろうとしたこと

1)`rake routes`

早速ターミナルがエラー吐き出しています。
ターミナルを見ます。

“`
rake aborted!
Devise.secret_key was not set. Please add the following to your Devise initializer:

config.secret_key = ‘e9216d77fb79ef05XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX’

Please ensure you restarted your application after installing Devise or setting the key.
“`

2)ここの文に注目します。
`installing`の`Devise`の`setting the key`に注目しなよ

元記事を表示

[Rails]carrierwaveを使って画像を保存する

タイトルの通りになります。

ゴールは画像を表示させるまでとなります。

## gemを導入

初めはgemを入れます。
バージョンを指定しなければ最新のものがインストールされます。

“`:Gemfile
gem ‘carrirewave’
“`

ターミナルでいつものよろしくお願いします。

“`
$ bundle install
“`

## アップローダファイルの生成

次にアップローダファイルを作成しましょう。

“`
$ rails generate uploader Image
create app/uploaders/image_uploader.rb
“`

これで`app/uploaders`の中に`image_uploader.rb`が生成されていると思います。

ちなみに`Image`の部分はマウントするモデル名だとか,
わかりやすい名前。私はよくImageで生成しています。

“`ruby:image_uploader.rb
class ImageUploader < CarrierWave::Uploader::Base # Inclu

元記事を表示

Ruby on Rails チュートリアル(第4版) 第7章

##7.1.1 演習
1.ブラウザから /about にアクセスし、デバッグ情報が表示されていることを確認してください。このページを表示するとき、どのコントローラとアクションが使われていたでしょうか? paramsの内容から確認してみましょう。
 `controller: static_pages`
 `action: about`
2.Railsコンソールを開き、データベースから最初のユーザー情報を取得し、変数userに格納してください。その後、puts user.attributes.to_yamlを実行すると何が表示されますか? ここで表示された結果と、yメソッドを使ったy user.attributesの実行結果を比較してみましょう。

“`
>> puts user.attributes.to_yaml

id: 1
name: Michael Hartl
email: mhartl@example.jp
created_at: !ruby/object:ActiveSupport::TimeWithZone
utc: &1 2020-07-04 13:19:58

元記事を表示

Puma caught this error: Missing `secret_key_base` for ‘development’ environment, set this value in `config/secrets.yml` (RuntimeError)

## 前提
`rails s`をして`localhost:3000/`にアクセスするとエラーが頻発する
**タイトルと全く同じエラーをさっさと解決したい場合は`8)`から閲覧してください**

## 環境

“`
ruby 2.5.1
Rails 5.0.7.2
“`
## 最終エラー

`localhost:3000/`で正しいviewではなく以下の表示がされる

“`
Puma caught this error: Missing `secret_key_base` for ‘development’ environment, set this value in `config/secrets.yml` (RuntimeError)
/Users/ユーザー名/.rbenv/versions/2.5.1/lib/ruby/gems/2.5.0/gems/railties-5.0.7.2/lib/rails/application.rb:513:in `validate_secret_key_config!’
/Users/ユーザー名/.rbenv/versions/2.5.1/

元記事を表示

[Rails] Devise でgem’ html2slim’を使用した際のエラーについて

Deviseを使用した際,「$rails g devise:views」を実行後、
`$ bundle exec erb2slim app/views/devise -d`を実行した。

その後、「localhost:3000/users/sign_up」に飛んだ際にエラー発生。
スクリーンショット 2020-07-10 23.56.55.png

“`ruby:app/views/devise/shared/_error_messages.html.slim
– if resource.errors.any?
#error_explanation
h2
= I18n.t(“errors.messages.not_saved”,
– count

元記事を表示

【Rails/Docker/mysql】ホストPC直下で開発していたWEBアプリをコンテナで動かしてみたぉ

# はじめに

Udemyの動画でDockerを学んだ後、ローカルホストで開発していたアプリケーションをコンテナで動かしてみました。

以下を参考にしながら、まずはdocker-composeを使わずにやってみました。

# 参考
[udemy 米国AI開発者がゼロから教えるDocker講座](https://www.udemy.com/course/aidocker/)
https://hub.docker.com/_/rails
https://qiita.com/tatsuya-miyamoto/items/08bd6ea142d02708614f
https://qiita.com/y-suna/items/e52b3af1d80c52b66b31
https://qiita.com/Masato338/items/f162394fbc37fc490dfb

# 実行環境
アプリケーションサーバ(コンテナ直下): puma4.3.3 (rails5.2.4.1 / ruby 2.5.1)
Database(ホスト直下): MySQL 5.6.47
コンテナ(ホスト直下): do

元記事を表示

画像の登録?もちろんできません(できる)~part2~

##前提
– ruby on rails 6.0.0 を使用。
– ユーザー機能はdeviseにより導入されているものとする。
– viewファイルは全てhaml形式とする。
– ちなみに使っているのはMacBook Air(Retina, 13-inch, 2020)です。

##はじめに
前置きや手順などは part1 に記述してあるので早速実装の続きをしていこうと思います。気になったら是非読んでネ。

part2 でやることとしては手順の2番目にあたる「imageテーブルを関連づけて画像の投稿を実装」というところです。

別テーブルに画像を登録するだけなのに実装するのに3万年くらいかかったので正しい手順を後世に残したいと思います。

##ではさっそく、
本日もはりきってやっていきましょう。

> $ *rails g model image*
> $ *rails db:migrate*

まずはimageモデルを作ってマイグレートする

元記事を表示

【Rails】多対多のアソシエーションを用いてコミュニティ加入の申請/承認機能の実装を行う

# 実施したいこと
申請・承認の仕組みを実装する

# 具体的には?
「ユーザ(小西)が、とあるコミュニティに加入したいと思いますが、
加入にはコミュニティの管理者(大西)の承認が必要になる」といったケースでの実装例です。

# ざっくりイメージ
キャプチャ.PNG

# 処理フロー概要
1. 該当コミュニティ画面にて、ユーザ(小西)が「申請」ボタンを押す。
2. 該当コミュニティの申請待ちリストにユーザ(小西)が追加される。管理者が、該当コミュニティの申請待ち一覧画面を見て、申請者を承認するかどうか判断。
3. 申請を承認する場合は、承認ボタンを押す。申請ユーザがコミュニティに加入し、申請待ちリストからは消去される。
4. 申請を却下する場合は、否認ボタンを押す。申請待ちリストから消去される。

# 環境
Rub

元記事を表示

[Rails]パラメータに配列として情報を保存したい時

## パラメーターに情報が入らない

“`controller.rb
#省略
def new
@goal = Goal.new
end

def create
Goal.create(goal_params)
redirect_to root_path
end

private
def goal_params
params.require(:goal).permit(:name, :time, :days)
end

end
“`

この状態でcreateアクションを実行すると値が入らないので
**binding.pry**で確認。

ターミナル内でgoal_paramsを実行▼

“`
[2] pry(#)> goal_params
Unpermitted parameter: days
=> “ラジオ体操”, “time”=>”19:51”} permitted: true>
“`

パラメー

元記事を表示

[CentOS][Gem]Error: Your version of SQLite (3.7.17) is too old. Active Record supports SQLite >= 3.8. 解決法

# 起こったこと
Rails 6 project で `gem ‘sqlite3’` を使用して `bundle install` すると
SQLite が古い とエラー

“` ‘./rails-proj/’
$ bundle install

Your version of SQLite (3.7.17) is too old. Active Record supports SQLite >= 3.8.

Failed
“`

OSの sqlite3 が古いのかと思い、
こちらを参考に 自分で最新sqlite3 (3.8.11) をインストール し
https://qiita.com/8zca/items/175efb0612070530d186

option 指定で `gem install`

エラーは変わらない。

“`
# 自分でインストール
$ /opt/sqlite/sqlite3/bin/sqlite3 –version
3.32.3
$ bundle config build.sqlite3 –with-sqlite3-inc

元記事を表示

商品情報編集機能を実装したい~part1~

##前提
– ruby on rails 6.0.0 を使用。
– ユーザー機能はdeviseにより導入されているものとする。
– viewファイルは全てhaml形式とする。
– ちなみに使っているのはMacBook Air(Retina, 13-inch, 2020)です。

##はじめに
プログラミング学習のため、某フリマサイトのコピーサイトを作っています。
商品情報編集機能を実装したが、画像の複数投稿になかなか苦戦したので参考になればと思い書くことにしました。
大した量じゃないのにpart分けしているのはあとで見たときに達成感を得るためです。許してください。(いっぱい書いたぞ!ってなりたい)
part1で特に詰まる部分はないと思いますが、part2以降の土台になってくるのでウォーミングアップ程度に書いていきます。

##仕様書
– 商品に登録された情報をひとつひとつ変更できる。
– 商品情報を編集できるのは商品を登録したユーザーのみ。
– 画像の差し替えは一枚ごとにできる。
– 商品名や画像など、すでに登録されている情報は編集画面にあらかじめ表示される。
– エラーハンドリングを

元記事を表示

[未解決] BonsaiのReindexで “this cluster currently has [3000]/[3000] maximum shards open” とエラーがでる

解決したと思ったら再発するの繰り返しです。Qiitaには非公開に戻す機能が内容で、備忘録も兼ねて未解決のまま公開しておきます。詳しい人いたらコメントで教えてくれると嬉しいです。

Heroku、Rails、Elasticsearch、Bonsai、Searchkickという環境で

“`console
$ bundle exec rake searchkick:reindex CLASS=Use
# もしくは
$ bundle exec rake searchkick:reindex:all
“`

としてReindexをしようとすると以下のようなエラーがでる。

“`
this action would add [2] total shards, but this cluster currently has [3000]/[3000] maximum shards open
“`

Shard(シャード:直訳で破片)というのはインデックスを分割したものらしく、通常はなにかのバックアップとして、メインで使うプライマリーシャードに対してレプリカシャードを作ったりするらしい。

元記事を表示

ポートフォリオ

#ポートフォリオ1

こちらのポートフォリオは環境構築だけで開発は行っていません。
(aws,nginx,ruby,docker,mysql)を使って環境構築を行いました。

https://github.com/tmk616window/docker-ruby2

#ポートフォリオ2 

ポートフォリオ投稿サイトを作りました。

URLはこちらになります

https://github.com/tmk616window/review00
https://review0.herokuapp.com/

##経緯
まずなぜこれを作ろうと思ったのか説明させていただきます。
自分がインターンの採用のためにポートフォリオを作ろうと思ったときに「何を作ればいいかわからない。どこまで作りこめばいいかわからない。」という悩みがありました。
ツイッターやyoutubeのコメント欄でもこういった悩みを持った方々をよく見かけました。
それだったら何を作ればいいのかまたどれくらい作りこめばいいのかの指標になるようなものをポートフォリオに落とし込んでみようと思いました。

##コンプト
エンジニア採用が決

元記事を表示

rails db:migrate で BusyException: database is locked

以下のようなエラーがでたが、原因はデータベースのGUI閲覧ツール(DB Browser for SQLiteなど)で変更を保存前の操作が残っていたから。

“`console
$ rails db:migrate

rails aborted!
StandardError: An error has occurred, this and all later migrations canceled:

SQLite3::BusyException: database is locked
“`

以下によると、SQLiteは同時に1つのプロセスからしかアクセスできないらしく、DB Browser がアクセスしてたからロックされてたということだそうだ。
https://stackoverflow.com/questions/5452662/rake-dbmigrate-is-throwing-busyexception-database-is-locked-exception

元記事を表示

テーブルのデータが全て表示されてしまう問題の解決

現在ウェブエンジニアに転職するための個人アプリを作っています。
個人アプリ開発中に生じたエラーを解決できずに困っています。

##起きている問題
投稿だけを表示したいのに、テーブルに入れた情報が全部ブラウザ上に出てきてしまっているので消したい。
![スクリーンショット 2020-05-25 22.13.16.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/547640/a0451ddd-316e-01a7-d7b3-097fbf1ceb5a.png)

“`ruby
= @posts.each do |post|
“`
この部分をコメントアウトしたら消えたので、ここの記述と関係しているようです。

# 解決方法
“`ruby
# before(表示される)
= @posts.each do |post|
# after(表示されない)
– @posts.each do |post|
“`
Rubyでは`=`だと表示されて、`-`だと表示されない設定でした。
答えは単純でした。。。

元記事を表示

Searchkickでのデバッグ術

Railsコンソールで`dubug: true`属性?を付与して検索を実行してやると、そのときに使われた Search Option, Setting, Mapping, Results(検索スコアとか)を見れていい。

[Searchkick Dubug](https://github.com/ankane/searchkick#debugging-queries)

“`.rb
> Post.search “日本の絶景”, fields: [:name, :description, :category_name], operator: “or”, debug: true
“`

“`
Model Searchkick Options
{:language=>”japanese”,
:_type=>
#

元記事を表示

[Rails]初学者によるRubocopの導入

# はじめに
Rubocopとは、Rubyの静的コード解析ツール。
[ruby-style-guide
](https://github.com/rubocop-hq/ruby-style-guide)に従って、ソースコードの修正・改善点を指摘してくれます。

また、インデントのずれや、不必要なスペース・改行などは特定のコマンドを打つことで自動で修正してくれるので、自分にとってはもちろん、他の人が見ても読みやすいコードに整形することが出来ます。
※あくまで初学者の観点で設定等を決めています。

# 導入

“`ruby:gemfile
gem ‘rubocop’, require: false
“`
“`:ターミナル
bundle install
“`

# 使ってみる

“`:ターミナル
bundle exec rubocop
“`
実行すると、以下のような出力が得られます。
スクリーンショット 2020-07-10 8.06.47.pngRailsでcredentials.yml.encをAtomエディタで編集したかった色々(Windows)

初めてQiita書きます書き方全然わかりません許してください。
タイトルの通り、Rails5.2以降で追加されたらしいcredentials.ymlを
Windows環境でAtomエディタにて編集したかった時の色々です。(筆者はRails6ですが)
自分にいい感じの日本語記事が見つからなかったので、もういっそ自分で忘備録作ってしまおうと。
あと同じ目的だったり、ハマった人のためになればいいなと。

## 大先輩達による記事を読んでからのお話
以下2記事、リンクになっています。
[Rails5.2から追加された credentials.yml.enc のキホン](https://qiita.com/NaokiIshimura/items/2a179f2ab910992c4d39)

[たった30分でわかるcredentials.yml.enc[rails5.2] – 環境変数を定義する使い方 -](https://qiita.com/mylevel/items/92c4a2a2f96edb10e298)

## さっそくエラー

元記事を表示

OTHERカテゴリの最新記事