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

Rails関連のことを調べてみた2021年08月05日
目次

【Rails】ActiveStorageでS3に画像をアップロードする方法

##はじめに
railsでポートフォリオを作りAWSでデプロイしたあと、本番環境で画像をアップロードできるようにしました。
エラーで少し苦戦したので、同じようなエラーで悩んでいる人の参考になればと思います。
AWSでデプロイ済みの人向けなので、デプロイに関する部分などは省きます。
またActiveStorageも導入済みであるとします。

##環境
OS mac
ruby 2.6.6
rails 5.2.6

##AWSでやること
###IAMユーザーの作成
S3にアクセスするためのIAMユーザーを作成します。

1. IAMダッシュボードで「ユーザーの追加」をクリック
1. ユーザー名は任意で
1. 「アクセスの種類」は「プログラムによるアクセス」を選択
1. アクセス権限は「AmazonS3FullAccess」に設定
1. 認証情報をダウンロード(.csv) *あとで使います

###S3バケットの作成

1. S3ダッシュボードで「バケットの作成」をクリック
1. バケット名とリージョンを設定
1. デフォルトの「パブリックアクセスを全てブロック」にチェック
1. バケットを

元記事を表示

【Ruby on Rails】devise実装後にログイン・ログアウト後のリダイレクト先を指定する方法

#対象者

* deviseを実装済の方
* 管理者・ユーザーで2つのdeviseを実装した方
* ログイン・ログアウト後の動作を考えている方

#目的

* devis実装後にログイン・ログアウト後の遷移先を指定する条件を作ること

#実際の手順と実例
###1.前提
* devise実装済(実装方法は下記の通り)

https://qiita.com/nao0725/items/83c73c417be01913a857

* Admin/User2つのモデルを作成している

###2.今までの方法(devise1つだったとき)

““`
private
def after_sign_in_path_for(resoure)
root_path
end
““

###3.新しい実装方法(devise 2つ実装した場合)

““application_controller.rb
private
def after_sign_in_path_for(resource_or_scope)
if resource_or_scope.is_a?(Admin)

元記事を表示

1周目 railsチュートリアル第3章

#目次
[1.はじめに](#1-はじめに)
[2.大まかな流れ](#2-大まかな流れ)
[3.復習メモ](#3-復習メモ)
[4.感想](#4-感想)
[5.おわりに](#5-おわりに)

#1. はじめに
前回の記事

https://qiita.com/ak-matsu/items/e8a6fa4f654b9d82994b

3章を途中まで読み進めていたが、
AWSのcloud9の容量がいっぱいになり不要分の削除や
無料増量分のボリューム増設などで学習開始が遅れた。

さて、第3章は「ほぼ性的なページの作成」であり、第6版の無料枠はここまでである。
一応rails5.1(第4版)は無料で1章〜14章まで見れるが、改版があるので差分はこちらを参照したほうがいいです。

#2. 大まかな流れ

– sampleアプリの作成
– 静的ページの説明
– 省略コマンド
– キャメルケースとスネークケース
– controllerでhome,helpアクシ

元記事を表示

Rails Strong Parameterとは

#Strong Parameterとは
Rails には、ストロングパラメーター(Strong Parameter)という、ユーザーから送信されるデータを制限する機能があります。この仕組みを使うことで、安全では無いデータの登録・更新を防いでくれます.

#ストロングパラメータの書き方
1 基本構文

“`user_controller.rb
private
def user_params
params.require(:キー(モデル名)).permit(:カラム名1,:カラム名2,・・・).marge(カラム名: 入力データ)
end
“`

“`user_controller.rb

class UsersController < ApplicationController # (中略) private def user_params params.require(:user).permit(:name, :account, :email) end end ``` *メソッド名には[ モデル名_params ]とするのが一般的

元記事を表示

単体テスト実施前までの流れ

# はじめに
本記事では、単体テストを開始するまでの流れを記述します。
今日の学習で、テストコードをあまり理解できていないことがわかったため、
アウトプットいたします。
以下、過去にテストの際に登場するメソッドなどを投稿しておりますので、
ご参照ください。

https://qiita.com/mkato1013/items/48870bc17580448fc256

#テストコード実施までの流れ
## Gemの追加
RSpecを使用するのには、まず`Gemをインストール`する必要があります。
RSpecのGemです。
*私は、10分ほどspecのディレクトリを探しておりました。ここでGemということを再認識。

①Gemfileに記述
記述するものは「`gem ‘rspec-rails’, ‘~> 4.0.0’`」です。

“`ruby
group :development, :test do

省略

gem ‘rspec-rails’, ‘~> 4.0.0’
end
“`

②bundle install
省略

“`
% cd (ディレクトリ)
% bundle in

元記事を表示

Unknown actionで怒られてハマった

はじめに

Ruby on railsの学習を始めて、数日たち順調だと思っていた矢先に半日、下記のエラーでハマったため備忘録として残します。

エラー

“`
Unknown action
The action ‘show’ could not be found for MessagesController
“`

link_toでDELETEメソッドを呼ぼうとしたら発生。
コントローラーにshowアクションが無いと怒られてます。
パス、メソッドもあっているのに上記が発生してるので何かおかしいと思い諸々、調べてみました。

確認したこと

– 開発者モードやコード上に異常がないか
– コード自体の内容や開発者モードで確認しただけなので割愛します。

– コントローラーのprivate内にアクションを記載していないか
– Rubyではprivateと記述すると以下全文privateになるためdestroyアクションが属してないか。

– jquery_ujsが書いてあるか
– “`erb:app/assets/java

元記事を表示

Installing ffi 1.15.0 with native extensions Gem::Ext::BuildError

急にffiがインストールできなくなるエラー

“`
Fetching ffi 1.15.0
Installing ffi 1.15.0 with native extensions
Gem::Ext::BuildError: ERROR: Failed to build gem native extension.

current directory: PATH_TO/vendor/bundle/ruby/2.7.0/gems/ffi-1.15.0/ext/ffi_c
/Users/USER/.rbenv/versions/2.7.1/bin/ruby -I /Users/USER/.rbenv/versions/2.7.1/lib/ruby/2.7.0 -r ./siteconf20210804-11406-5ju1ry.rb extconf.rb
checking for ffi_prep_closure_loc() in -lffi… no
checking for ffi_prep_closure_loc() in -llibffi… no
checking for

元記事を表示

私が考えるDeviseを使った肥大化させないUserモデルの構成

Railsで認証機能を作る際に[Devise](https://github.com/heartcombo/devise)を使うことが多いと思います。

DeviseでUserテーブルを作った際に、以下の例のように色々なカラムを追加してUserテーブルが肥大化していくのをよく見かけます。

“`ruby
class DeviseCreateUsers < ActiveRecord::Migration[6.1] def change create_table :users do |t| t.string :first_name, null: false, default: "" t.string :last_name, null: false, default: "" t.text :profile, t.string :telephone, t.integer :age, t.inte

元記事を表示

Firefoxが非対応…BootstrapのTempus Dominusも複雑…ではどうする?

# 困り果てていたこと
Railsアプリで、ユーザーが日付と時間を、決まったフォーマットで入力できるフォームが欲しい!

ただそれだけのことでした。
Railsには、`datetime_field`というヘルパーメソッドがあり、Chrome、Safariなど多くのブラウザでは、カレンダーを表示して日付と時間を入力できます。
https://railsdoc.com/page/datetime_field

Chromeだとこんな具合に↓
![datetime-local_chrome.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/645077/8e504fbf-d63f-4730-59bb-e8468d2eff7d.png)
しかし、なんと。
IEはまぁいいとして、**Firefoxがこれに対応してくれていません**。:worried:

同じページなのにFirefoxだと何もアシストしてくれない図↓
![datetime-local_firefox.png](https://qiita-image-s

元記事を表示

[Ruby on rails]検索結果でもページネーション使う kaminari

初めに

過去の検索機能実装の記事はこちら。

https://qiita.com/ki_87/items/eb6d4e440195c3b3c5a2

ページネーション導入済みで、一覧画面では使用してましたが、
検索結果では使わず、全表示にしていました・・・。
なので、今回検索結果の表示画面でもページネーションを使用していきたいと思います。

コントローラー

“`
class Users::SearchesController < ApplicationController def index users= User.search(params[:keyword]) @users=users.page(params[:page]).per(25) end end ``` これでほぼOKです!

VIEW 検索結果表示画面

“`

元記事を表示

【Ruby on Rails】autofocus: trueを使って自動で焦点をあてる方法

#対象者

* 投稿フォームを作ろうとしている方
* クリックしなくても自動で入力待機状態を作りたい方

#目的

* autofocus属性を使って、自動でカーソルをあわせられるようにする!

#実際の手順と実例
###1.autofocus属性とは??

* autofocus:trueでページを読み込んだ後、クリックすることなく、カーソルが移動して入力待機状態を作るというメソッド(?)です。

###2.具体例

本の投稿をするアプリを例とします。
入力は下記の通り

““app/views/devise/registrations/new.html.erb

Sign up

<%= form_with model: @user, url: user_registration_path, id: 'new_user', class: 'new_user', local: true do |f| %>


<%= f

元記事を表示

Ruby on Rails の link_toで使うnew_user_path の謎を解決します。

まずは答えから

“`
rails routes
“`
をした時に表示されるルーティングのPrifixに「_path」を付けたものです。「rails routes」コマンドで確認することができます。

“`
[— 例 —]
Prefix Verb URI Pattern Controller#Action
new_user_session GET /users/sign_in(.:format) devise/sessions#new
“`
この場合は「new_user_session_path」と指定した時のリンク先は「http\://ルートのURL/users/sign_in」になります。

#もう少し詳しく解説
Ruby on Railsのビューでよく使われるlink_toメソッドのリンク先の指定でよく使われる「new_user_path」ですが、初めて見た時はこれが何を意味しているのか全く分かりませんでした。

“`
link_to “ログ

元記事を表示

Railsで架空のCafeのHPを作ってみよう!【16日目】『colorboxのスクロール固定』編

#概要
基本Railsの記法に則り書いていきます!
1から全ての説明ではなく
その中であれ?どうやるの?と
疑問に思った点や実装に困った箇所を
ピックアップして紹介していきます♩

#設定と準備
・Rails
・HTML
・CSS
・Javascript(jQuery)

↑上記の言語とフレームワークを使い
架空(自分で考えたテキトーなもの)のCafeの
HPを作っていこうと思います!

#16日目の作業内容:round_pushpin:
・colorboxを導入しモーダルを作成

#16日目の気になった箇所:zap:
モーダルを作成できたのは良いが
スクロールすると一緒にスクロールされて
モーダルが見えなくなってしまうの固定したい!

#仮説:pushpin:
position: fixed;
などを使えば上手くいくのかな。

#結論:star:
調べてみたが理解するのが今の自分には非常に難しかったので
今回はどうすれば上手くいくのかだけの紹介になります。

どのような方法でも良いので
JSのファイルがモーダルを使っているHTMLで読み込めるようにしてください。
方法をしましてはco

元記事を表示

git push heroku masterで躓いた話

Rails を使ってサンプルアプリを作っていたときの話
ある程度の機能を付けたからherokuにデプロイしようとしたら….

“`
remote: !
remote: ! Precompiling assets failed. <- エラー remote: ! remote: ! Push rejected, failed to compile Ruby app. remote: remote: ! Push failed remote: Verifying deploy... remote: remote: ! Push rejected to <アプリ名>.
remote:
To https://git.heroku.com/<アプリ名>
! [remote rejected] master -> master (pre-receive hook declined)
error: failed to push some refs to ‘https://git.heroku.com/<アプリ名>
“`

今出ているエラーを見てみると

元記事を表示

【初見】ActiveRecord::InvalidForeignKey を初学者なりに噛み砕いて備忘録を記述してみる。

# タイトルにもあるとおり始めてのエラーです(多分)
Mysql2::Error: Cannot delete or update a parent row: a foreign key constraint fails とありまして、何が原因になっていたかを備忘録として書き残そうと思います。

#解決策から紹介します。
このエラーの解決は、モデルに追記した後に、データベースをリセットすることで、解決しました。
コードだけだと意味がわからない記述になっているの以下の説明も一緒に読んでください。

“`Ruby
# model/study_time.rb
belongs_to :skill, optional: true #optional: true を追記

# mdoel/skill.rb

has_many :study_time, foreign_key: :skill_id, dependent: :destroy #foreign_key: :skill_id, dependent: :destroy を追記

“`

# どういう仕組みで起こったのか。
作成しているア

元記事を表示

[Ruby on rails]グループ作成機能④ グループ管理者のグループ編集/グループ削除 外部キー制約のデータ削除

初めに

![スクリーンショット 2021-08-03 22.38.52.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1633266/993e7291-1dbf-3631-afbb-96aa91cab457.png)

①②の記事でグループの作成、グループへの参加、退会機能を実装しました。
③ではグループ管理者の表示も行いました。

しかし、グループの編集/削除機能をすっかり忘れていましたので、今回グループの編集機能をつけていきます。

:sunny:注意①②と③④で作ってるアプリが違います。
①②は本の投稿(bookモデル)サイトでの、グループ作成機能。
③④は記事の投稿(postモデル)サイトでの、グループ作成機能です。
①②と③④でGroupのカラムが若干違います。
グループ名(name)、
グループ紹介(introduction)
オーナーid(owner_id)は共通ですが、
①②では、t.string :image_idがあるのに対し、
③④では、image_idが無く

元記事を表示

インスタンス変数とローカル変数の違い

# はじめに
本記事は、インスタンス変数とローカル変数の違いをまとめたものです。
正確な理解ができていなかったため、アウトプットします。

# 結論
いきなり結論ですが、
`スコープ`の違いです。

スコープとは、
ある変数や関数などの名前を参照できる`範囲`のこと。

### ローカル変数の範囲
ローカル変数は、極端に言いますと、
`定義した場所`でしか使えない。ということです。

例えば、def~endで定義したのであれば、その場所でしか使えない。
という認識です。

### インスタンス変数の範囲
インスタンス変数は、
`定義した場所以外でも使用可能`です。

例えば、def~endで定義していない場所、
コントローラー内で定義したのであれば、`ビュー`でも使用できる。
という認識です。`→(8月4日訂正、以下の通り)`

“`
コントローラーで作ったインスタンス変数は、
ビュー側でも同じ名前のインスタンス変数を作ることができ、
その変数の値を使用することができる。
(@scivola さん ご指摘ありがとうございます!)
“`

# 例文
コントローラーやビューなどを考慮せ

元記事を表示

[Ruby on rails] グループ作成機能⑥ Action mailerの環境変数化 gem(dotenv-rails) /.env

環境変数を設定する

グループ作成機能⑤でグループメンバーにメールを送信する機能を実装しました。
gmailのアドレス、パスワードを直打ちしてるので、セキュリティ的にあまりよろしくありません。
そこで使うのが環境変数です。

なんか大変そう・・・:frowning2:と思ってたのですが、すぐ出来ます!!!

もうメールの機能は出来上がってる前提です。
メール機能の実装については⑤の記事をご確認ください。

https://qiita.com/ki_87/items/67f8965e8de17e95ac1c

gemのインストール

“`perl:Gemfile
# 環境変数化のためのgem
gem ‘dotenv-rails
“`

そしたら“`bundle install“`で取り込みます。

.envファイル作成

Gemfileなどが置いてあるルートディレクトリに .env というファイルを作成します。
以下のような感じになるはずです!

![スクリーンショット 2021-08-03 21.17.30.

元記事を表示

ransackを複数ワード検索に対応させる

Railsアプリケーションで検索機能を実装しようと思った時によく採用されるgemが`Ransack`だと思います。
気軽に検索機能を実装出来ますが複数ワード検索に対応させるためには一工夫必要になります。

まずは通常の実装コードを以下に示します。

“`ruby:app/controllers/shops_controller.rb
class ShopsController < ApplicationController def index @q = params[:q] @shops = Shop.ransack(@q).result end end ``` ```slim:app/views/shops/_search_form.html.slim = search_form_for q, url: root_path do |f| = f.search_field :name_cont = f.button '検索', type: :submit ``` `search_field`で検索カラム(今回のケースだと`name`)と検索方法(

元記事を表示

Rails ログイン機能

##環境
Rails 6.1.3
Ruby 2.6.5
##ログインの仕組み
ログインページからメールアドレスやパスワードなどの情報をrailsに送信する。
送信された情報をもとに操作しているユーザを特定し、ログイン状態とする。

“`routes.rb
get “login”=>”users#login_form”/login_formアクションをlocalhost:3000/loginで読み出し
“`
“`users_controller.rb
def login
@user=User.find_by(
email: params[:email]
password: params[:password])
end
“`
フォームから入力されたemail,passwordから該当するユーザーを取得
userテーブルから入力された値に一致するユーザーを取得し、変数@userに代入

元記事を表示

OTHERカテゴリの最新記事