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

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

.rbenv/shims/docker-sync: line 21: /usr/local/Cellar/rbenv/1.1.2/libexec/rbenv: No such file or directory

## はじめに
brew upgradeしたらdocker-sync ~~だけ見つからなくなりました。~~
gemで入れたもの全部動かなくなった(全部は確認してないけど)
探しても対処法がぱっと見つからなかった(ちゃんと探してないだけ)のでメモがてら書きます。

## 結論(解決した方法)

以下を実行で解決した。

“`zsh
rbenv rehash
“`

> rbenv rehash コマンドを実行すると、大まかには ~/.rbenv/versions/*/bin/ 以下のファイルを ~/.rbenv/shims/ 以下にコピーする。

> なぜコピーする必要があるかというと、通常PATHが通っているのは ~/.rbenv/shims 以下となっているからで、ここにコピーしないと rspec とか rubocop といったGemが提供するコマンドを実行できないからである。

cf. https://mogulla3.tech/articles/2020-12-29-01

ということみたいです。

## やったこと

brewのupdate, upgradeがうまくいってな

元記事を表示

railsのconstraintsを使って、ルーティングを制限する

おはようございます!
朝から警察の方に職務質問を受けてしまった、プレイライフの熊崎です。

そんな怪しさ全開の雰囲気が出ていた僕ですが、引き続きアウトプットを行なっていきたいと思います。

## constraintsとは?

> :constraintsオプションを使って、動的セグメントのURLフォーマットを特定の形式に制限できます。
ref: https://railsguides.jp/routing.html#セグメントを制限する

→ ルーティングに制限を設定するオプション。constraintsの和訳が制約なので、そのまんま。

## 制限の仕方

“`routes.rb
get ‘/articles/:id’ , to: ‘articles#show’, constraints: { id: /[A-Z]\d{5}/ }
# match => /articles/A11111, not_match => /articles/111
“`

また、リクエスト内容に応じて制限を加えることができる。
ref: https://railsguides.jp/routing.

元記事を表示

Progate Ruby on Rails5 I〜III 個人的ざっくりまとめ

# Railsの立ち上げ

“`:ターミナル
$ rails new アプリケーション名 例) rails new tweet_app

$ rails server
“`
上記入力後、ブラウザのurlに「localhost:3000」を入力し、「Yay!You’re on Rails!」と書いてあるページが表示されていればOK

# ページ作成
○ページ作成に必要なもの
・ ビュー
・ コントローラ
・ ルーティング

# ビュー

**ビューとは、ページの見た目を作るHTMLファイルのこと。**

“`:ターミナル
$ rails generate controller コントローラ名 アクション名

例)rails generate controller home top または、 rails g controller home top でもOK
“`
「rails g controller home top」でviewsフォルダの中にhomeフォルダとtop.html.erbファイルが作成される。

“`html:app/views/home/top.ht

元記事を表示

リクエストとレスポンスについて!

#①結論!

リクエストとは、「データや情報を要求する」こと!

レスポンスとは、「リクエストに対応するデータや情報を返却する」こと!

データのやり取り自体にも名前がついています!

それをリクエストとレスポンスと言います!

#②.リクエスト

主に、クライアントサイドから送られてくるのがリクエストです!

簡単にいうと、データを見たいから要求するという事です!

#③.レスポンス

主にデータベースから、クライアントサイドに送るデータのことです!

簡単にいうと、要求されたデータを送るという事です!

#④.まとめ

MVCの流れで1番最初の初歩的な事ですね!

これ自体の意味は難しくは無いので、きちんと覚えておくべきですね!

次回から更にMVCについても詳しくアウトプットして行こうと思います!

何か説明で間違っていたらご指導お願い致します(_ _)

元記事を表示

Railsで、view内でrenderしてActionView::MissingTemplate in Users#followingとなった時の対処方法

# エラー内容

“`app/views/users/_follow_form.html.erb
<%= render @users %>
~~~
したら
`ActionView::MissingTemplate in Users#following`
といわれた

# 解決策
app/views/users配下に_user.html.erbを作成する

# 意味
Railsでは、<%= render @hoges %>を書くと自動的に_hoge.html.erbというファイルを読み込んでくれる
なので、そのファイルがないとmissing templateになってしまう
→作成すればOK

#
参考サイト
[Railsガイド レイアウトとレンダリング](https://railsguides.jp/layouts_and_rendering.html)
[【110日目】【1日20分のRailsチュートリアル】【第9章】パーシャルのリファクタリングを行う -はてなブログ](https://kt-zoe.hatenablog.com/entry/2017/02/14/123526)

元記事を表示

【エラー】Mysql2::Error: Duplicate entry ‘ ‘ for key ‘ ‘

##環境

Ruby 3.0.2
Rails 6.1.4.1
omniauth-google-oauth2 1.0.0
devise 4.8.0

##状況
Rspecを実行した際にエラーを吐かれた

“`
ActiveRecord::RecordNotUnique:
Mysql2::Error: Duplicate entry ‘100000000000000000000’ for key ‘users.index_users_on_uid’
“`

“`spec/factories/users.rb
FactoryBot.define do
factory :user do
name { ‘test employee’ }
sequence(:email) { |n| “tester#{n}@example.com” }
provider { ‘google_oauth2’ }
uid { ‘100000000000000000000’ }
end
end
“`

##解決法

uidがかぶっていたのでエラーが出ていた

元記事を表示

Postモデルについて

https://yasunari-kainuma.com/2020/10/13/%E6%96%B0%E8%A6%8F%E6%8A%95%E7%A8%BF%E6%A9%9F%E8%83%BD%E3%81%AE%E5%AE%9F%E8%A3%85/

元記事を表示

【Rails×Vue】Error: Can’t resolve ‘@smartweb/vue-flash-message’ の解決

Rails×VueでSPA化に取り組んでいる初学者の備忘録です。

#エラー詳細

Vueを用いてフラッシュメッセージを表示するため@smartweb/vue-flash-messageを導入。
https://www.npmjs.com/package/@smartweb/vue-flash-message/v/next

“`
npm i @smartweb/vue-flash-message@next
“`
開発環境で問題なく動作したためherokuにデプロイしようとしたところ次のエラーが発生した。

“`
ModuleNotFoundError: Module not found: Error: Can’t resolve ‘@smartweb/vue-flash-message’ in ‘/tmp/build_7d25413c/app/javascript/packs’
at
.
.
.
.
.

Field ‘browser’ doesn’t contain a valid alias configuration
reso

元記事を表示

[Ralis] パンクズ機能

ポートフォリオにgretelを使ってパンくずリスト機能を実装した時のメモです。

# 完成イメージ
![パンくずリスト.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/974719/9160669c-0905-909e-7b60-3d6968b2a4cb.gif)

# 実装
まずはGemをインストールします。

### gretel 導入
“`ruby:Gemfile
gem ‘gretel’
“`
“`terminal:ターミナル
$ bundle install
“`
インストールできたらgretelを導入していきます。

“`terminal:ターミナル
$ rails g gretel:install
“`
`config`に`breadcrumbs.rb`が作成されていれば準備完了です。

### パンくずリストの書き方
作成された`config/breadcrumbs.rb`にパンクズリストを書いていきます。
書き方の基本は、

“`ruby:
crumb “ページ名

元記事を表示

webmockのgem使用時にhashdiffの警告ログが吐かれる

## 環境情報

– Ruby 2.6.1
– Rails 5.2.6

## 起きたこと

webmockのgemを使用しているRailsプロジェクトを `rails s` などで立ち上げた際、下記ログが吐き出される

“`
The HashDiff constant used by this gem conflicts with another gem of a similar name. As of version 1.0 the HashDiff constant will be completely removed and replaced by Hashdiff. For more information see https://github.com/liufengyun/hashdiff/issues/45.
“`

## 解決方法

ログの内容にもあるように、hashdiffを1.0.0以上に更新する
ただ、webmockの最新(3.14.0)でもhashdiffの最低バージョンは0.4.0になっていたため、Gemfileに追記する

“`
gem “hash

元記事を表示

Rspecでhave_receivedのテストにハマった~subjectはit内で必ず呼び出さなければいけない~

## はじめに
何回も同じ失敗を繰り返さないように自分を戒めるためのメモ書きです

## テストが通らない

### テストしたメソッド
“`
def user_update
~何らかの処理~
update(params: params)
end
“`

### 記述したテスト
“`
let_it_be(:user) { create(:user) }

describe “#user_update” do
subject{ user.user_update }

before do
allow(user).to receive(:update).whith(params: anything)
end

it { expect(user).to have_received(:update).with(params: anything).once }
end
“`

### 実行結果
“`
expected: 1 time with arguments: ({:params=>anything})
received: 0

元記事を表示

belongs_toのバリデーションについて

以下のような中間テーブルを作成した。

“`ruby:tagging.rb
class Tagging < ApplicationRecord belongs_to :post belongs_to :programming_language end ``` ```ruby:schema.rb create_table "taggings", force: :cascade do |t| t.bigint "post_id" t.bigint "programming_language_id" t.datetime "created_at", precision: 6, null: false t.datetime "updated_at", precision: 6, null: false t.index ["post_id"], name: "index_taggings_on_post_id" t.index ["programming_language_id"], name: "index_taggings_on_p

元記事を表示

【omniauth-google-oauth2+devise】Rspecのリクエストテスト

deviseのみ使用時のリクエストテストでは“`sign_in user“`でログインできていたが、
omniauth-google-oauth2+devise使用時のテストの書き方で少し苦戦したので書き残す。

##環境
Ruby 3.0.2
Rails 6.1.4.1

##やり方
– sign_inが使えるようにdeviseでのテストの設定をする
– omniauth-google-oauth2が使用できるように設定

“`spec/rails_helper.rb
RSpec.configure do |config|
config.include Devise::Test::IntegrationHelpers, type: :request
end

OmniAuth.configure do |c|
c.test_mode = true
c.mock_auth[:google_oauth2] = OmniAuth::AuthHash.new({
“provider” => “google_oauth2”,
“uid” => “10000

元記事を表示

Rails LINE messaging APIを使用してLINEbot通知してみた ブロードキャストメッセージ プッシュメッセージ

***LINE messaging API***を使用してメッセージを送信する
私は、Twitter APIで取得した内容をLINEで通知したかった!!

# 目標
友達登録している方全員に通知を送信したい

# 結論
・LINE messaging API を使用して通知を送る
・**broadcast通知**を使用する

# LINE messaging API
>Messaging APIを使って、ユーザー個人に合わせた体験をLINE上で提供するボットを作成できます。

>作成したボットは、LINEプラットフォームのチャネルに紐づけます。チャネルを作成すると生成されるLINE公式アカウントをボットモードで運用すると、LINE公式アカウントがボットとして動作します。

https://developers.line.biz/ja/docs/messaging-api/overview/

#使用してみる
メッセージの種類は様々ある
>プッシュメッセージ(1対1)
マルチキャストメッセージ(1対多:ユーザーID指定)
ナローキャストメッセージ(1対多:絞り込み配信)
ブロードキャスト

元記事を表示

【Rspec】共通処理concernsのテストはStructを使うといい

##環境
Ruby 3.0.2
Rails 6.1.4.1

##Structについて

Rspecで共通処理concernsのメソッドテストを実行する際はStructを使うとテストできる

下記のようなconcernsがあったとする

“`concerns/name_arrangeable.rb
module NameArrangeable
def full_name
“#{first_name} #{last_name}”
end
end
“`

1. Structを使ってテスト用のクラスをつくる。moduleをincludeしておく
2. 作ったクラスをnewする
→name_arrangeable.full_nameでメソッドを呼び出して使えるようになる

“`spec/models/name_arrangeable_spec.rb
let!(:module_test_class) { Struct.new(:name_arrangeable) { include NameArrangeable } }
let!(:name_arrangeable) {

元記事を表示

enumの値によって遷移先を変えたい

#はじめに
現在プログラミング学習を始めて3ヶ月目の初学者です。
学んだことをqiitaに投稿という形でアウトプットするため、また備忘録として記事を作成しました。

##考えた方法
if文で条件分岐

##if文
パッと思いつくほどif文を使いこなせていないので、とにかく調べる
https://kurose.me/rails-enum-login/
こちらの記事を参考にして
作ったif文がこちら

def create
@task = Task.new(task_params)

respond_to do |format|
if @task.save
format.html {
if @task.category(0) == “時間が決まったタスク”
redirect_to time_path
elsif @task.category(1) == “よく使うタスク”
redirect_to every_path
elsif @task

元記事を表示

Rails CSRF対策について

#CSRFとは
Cross Site Request Forgeryのことで、
Webアプリに知らない間にリクエストが送られる不正攻撃のことです

例えばインスタで知らない間に自分の投稿を消されていたりしたら
CSRFです。

#CSRF対策の設定
application_controller.rbに下のような記述をすると、

“`
Can’t verify CSRF token authenticity
“`
というエラーが出てきます。このエラーが出たらCSRFのエラーで
Railsがちゃんとしたリクエストがいっているかどうかを CSRF Tokenというもので
確認するのですがそれが確認できないというエラーです。

“`application_controller.rb

class ApplicationController < ActionController::Base protect_from_forgery with: :exception end ``` #解決策 application_controller.rbに下のような記述をします。 `

元記事を表示

OmniAuthの公式のwikiを読んでみた。

##はじめに

[OmniAuthの公式のwiki](https://github.com/heartcombo/devise/wiki/OmniAuth:-Overview#facebook-example)を読んで学習した内容を備忘録としてこちらに投稿します。

##OmniAuthって?
Deviseのバージョン1.2から追加された、[OAuth](https://qiita.com/TakahikoKawasaki/items/e37caf50776e00e733be)に関するモジュールのこと。
このモジュールを利用すれば、twitterやfacebookといったプロバイダーに登録されている情報でユーザー認証を行うことができます。

##Before you start
config.omniauthは、アプリケーションにomniauth プロバイダーのミドルウェアを追加します。これは、config/initializers/omniauth.rbにconfig.omniauthを記述するべきではないことを意味します。なぜなら、そうしてしまうとお互いのomniauth プロバイ

元記事を表示

Railsのform_withの使い方を素人ながらまとめました。

##form_withはフォームにす関するHTML要素を簡単に生成することができる便利なメソッド

まずフォームの値をデータベースに保存する際の書き方です。
↓railsでこう書くと

“`java
<%= form_with(model: @user, local: true) do |f| %>
<%= f.label :name %>
<%= f.text_field :name %>

<%= f.label :email %>
<%= f.email_field :email %>

<%= f.label :password %>
<%= f.password_field :password %>

<%= f.label :password_confirmation, "Confirmation" %>
<%= f.password_field :password_confirmation %>

<%= f.submit "Create my account",

元記事を表示

【Rails + Vue】変更が反映されない!?と思ったら bin/webpack-dev-server 忘れだった人の記事(foremanで一元管理する)

久々に開発を再開しようとしたら、変更したコードがビューに反映されなくて、てんやわんやしました。
Rails6 + Vue3で、webpackerを使って環境構築しており、`rails s`と `bin/webpack-dev-server`を、それぞれ手動で立ち上げていたことをすっかり忘れていただけだったのですが、いっそまとめて管理しようと心に誓いましたので、まとめます。

# gem foreman を使ってみる
## インストールする
gem [foreman](https://github.com/ddollar/foreman) を使って一元管理を試みます。アプリケーション実行の際のコマンドをまとめて管理できるという、ありがたgemです。

`Gemfile`に書いて `bundle install` しようとしましたが、この方法は非推奨とのこと。なので、以下を実行しましょう。

“`
$ gem install foreman
“`

## Procfileを新たに作成する

foremanは、Procfile の内容を継承するようになっているので、ここにコマンドを書いて

元記事を表示

OTHERカテゴリの最新記事