2021-01-01から1年間の記事一覧

An error occurred while installing puma (4.3.3), and Bundler cannot continue.

bundle update mimemagicをした後に、以下のエラーが発生しました。 An error occurred while installing puma (4.3.3), and Bundler cannot continue. Make sure that `gem install puma -v '4.3.3' --source 'https://rubygems.org/'` succeeds before bun…

bundle install --path vendor/bundleができなエラー

git cloneをした後、bundle install --path vendor/bundleをすると、以下のエラーが発生しました。 解決法 You'll need to update your bundle to a version other than mimemagic (0.3.4) that hasn't been removed in order to install.と記載されているの…

undefined method 'default' for ActionMailer:Module

原因 エラー文をよく見ると、 class ApplicationMailer < ActionMailer:: 継承文がなんかすごく変!途中で途切れていない? class ApplicationMailer < ActionMailer::Baseと書き直してあげると、解決できました。

Active Storage ActiveStorage::Attached

site.rb class Site < ApplicationRecord has_one_attached :og_image has_one_attached :favicon has_many_attached :main_images end favicon:アイコン画像 og_image:画像を1枚添付できる main_images:画像を複数枚添付できる これらをrails consoleで見て…

undefined method 'favicon' for nil:NilClass

突然以下のエラーに遭遇した。 application_controller def current_site # @current_siteがnillであれば、Site.firstを代入する。 @current_site ||= Site.first end helper_method :current_site current_siteはちゃんと定義できているしな〜... 原因がわ…

ActiveModel::EachValidator

ActiveModel::EachValidatorを継承したクラスでは、validate_eachというインスタンスメソッドにバリデーションルールを実装します。record、attribute、valueという引数については、後ほど解説いたします。 実装 class AttachmentValidator < ActiveModel::E…

helper_method

実装 app/controllers/application_controller.rb class ApplicationController < ActionController::Base def current_site # @current_siteがnillであれば、Site.firstを代入する。 @current_site ||= Site.first end helper_method :current_site end こ…

Pundit

Punditについて gem "pundit" bundle install後以下入力 rails g pundit:install これで、app/policies/配下にapplication_policy.rbというファイルが作成されます。 policies配下のファイルは「認可のルールを記述するファイル」と認識して差し支えないと思…

単一テーブル継承

単一テーブル継承 あるクラスから派生する全てのサブクラスを交通の1つのテーブルに対応させます。DBにある1つのテーブルを、複数のモデルで共有利用することができます。 テーブル設計の概要 記事テーブルにタグ、カテゴリー、著者テーブルを関連付する。 …

Rspec =と<<の使い方

articleに対して、authorとtagが関連付けられています。 article.rb class Article < ApplicationRecord belongs_to :author has_many :tags, through: :article_tags has_many :article_tags . . author.rb class Author < Taxonomy has_many :articles end…

transient

describe '検索機能' do let(:article_with_author) { create(:article, :with_author, author_name: '伊藤') } let(:article_with_another_author) { create(:article, :with_author, author_name: '鈴木') } it '著者名で絞り込み検索ができること' do art…

has_many throughでscopeを使う

実装したいこと articleとtagが多対多の関係で、中間テーブルにarticle_tagを設定。タグ名で検索して、そのタグ名に該当する記事を表示させる機能を作ります。 今回は、この機能を実装する上で、自分が間違えたところをアウトプットします。 article.rb clas…

モジュールについて

モジュールの定義 module Greet def hello 'hello' end end クラス定義によく似ています。しかし、モジュールはクラスと異なる点があります。 モジュールからインスタンスを作成することはできない 他のモジュールからクラスを継承することはできない name =…

URIについて

Web

このようなURIがあったとします http://yohei:pass@blog.example.jp:8000/serch?q=test&debug=true"n10 このURIは次のように分けられます。 URIスキーム: http リソースにアクセスする通信手段を表す文字列 ユーザー情報: yohei:pass ホスト名: blog.example…

JSON 基本的なこと

Web

JSONとは、データを記述するための表記法のひとつ そもそもデータって? 基本データ型 整数、少数、文字、真偽値 集合データ型 配列型、文字列型、クラスや構造体(Javascriptのclassなど) 複数のデータをまとめて一つのデータと扱うことでプログラムの表現…

代表的なリクエストヘッダとレスポンスヘッダ

リクエストヘッダ User-Agent HTTPリクエストを送ったアプリケーション名を指定する。 ブラウザからWebサイトにアクセスした場合、ブラウザ名はバージョン番号が入る。(Google chrome, Safari ...) Referer HTTPリクエストを送信するときに滞在していたWeb…

GETとPOSTはどのように取得するの?

GET GETリクエストの内容は URLに含まれ、クエリパラメータと言います。 例: https://runteq.jp/pages/33?page_category=document --> ?page_category=document がクエリパラメータに該当します。 クエリパラメータは、例えば検索サービスに検索キーワードを…

Rakeタスク Cron Whenever 一時間ごとに表示させる

Rakeタスク まずRakeとは、rubyで処理内容を定義できるビルドツールです。 そしてこのRakeが実行する処理内容を「Rakeタスク」と呼び、定義する場所を「Rakefile」と呼びます。 whenneverと組み合わせることにより、自由なタイミングで処理を走らせることが…

Railsのモデルのscope

scopeとは スコープを設定することで、絞り込み条件、すなわちクエリー用のメソッドの連続した呼び出し部分をまとめて名前をつけ、カスタムのクエリー用メソッドとして使うことができます。 複雑なSQLを何度も書かなくてよくなります。繰り返し利用される絞…

ActiveRecordの便利機能delegate

delegateはメソッドを異なるクラス間で簡単に使えるようにできます。 実装 Articleクラスは関連付としてcategoryとauthorを持っているとします。categoryにはname,slug authorにはnameカラムがあって参照できます。 article.category.nameのように名前を呼び…

ポルモーフィック関連

ポリモーフィック関連付けを使うと、ある1つのモデルが他の複数のモデルに属していることを、1つの関連付けだけで表現できます。 例として、ArticleBlockモデルに複数のモデル(Sentence, Medium,Embed)を関連付けしてみましょう。 ※Sentence:文章、Medium:…

no implicit conversion of nil into String

記事の記載内容を空文字にし、投稿またはプレビューを押すと、no implicit conversion of nil into Stringとエラーが出てしまう。 原因と解決 空文字=nilなので、.to_sまたは||= ''と書いてあげることで、nilの場合に空文字が返ってきます。

パンくず機能の設定

パンくず機能とは web上で自分がどの階層にいるのか、視覚的に分かりやすくしてくれます。 実装 gem gretelの導入 gem 'gretel' bundle installをします。 ターミナル上でrails g gretel: install config/breadcrumbs.rbが生成されます。 今回は、Home > 著…

Webpackerを使ってBootstrapを導入したときのエラー

yarn add jquery bootstrap popper.js package.json { "name": "techpit_match", "private": true, "dependencies": { "@popperjs/core": "^2.9.2", "@rails/actioncable": "^6.0.0", "@rails/activestorage": "^6.0.0", "@rails/ujs": "^6.0.0", "@rails/we…

Rspec spec/support内のファイルを読み込む

spec/supprt内に、以下のlogin_supportファイルを記載しました。 module LoginSupport def login_as(user) visit root_path click_link "Login" fill_in "Email", with: user.email fill_in "Password", with: user.password click_button "Login" end end …

CarrierWave使用時のNill location provided Can't build URLエラー

プロフィール編集画面に、画像を表示しようとしたら以下のエラーが現れた。 Nill location provided Can't build URL 原因 解決 app/uploders/avatar_uploader.rbに以下の記載を忘れていた。 def default_url 'board_placeholder.png' end 画像を選択してい…

ActiveModel::MissingAttributeError in ProfilesController#update

Carrierwaveを使ったプロフィールの更新をしようとしたら、以下のエラーが表示された。 原因 解決 can't write unknown attribute avatorと記載されており、モデルはavatarと記載したので、スペルミスと思った。 create_table "users", force: :cascade do |…

1 (サーバー)ログインページを返す 2 (クライアント)メールアドレスやパスワードの入力 3 (サーバー)送られてきた情報を元にユーザーを探してきてセッションにその情報を格納する。 session_controller.rb def create user = User.find_by(email: para…

ransackのエラー

ransackをインストール後、ブックマークした投稿一覧画面に、検索機能を付けようとしたところ、このようなno method errorが出てしまいました。 コード確認 boards_controller.rb def bookmarks @q = Bookmark.ransack(params[:q]) @bookmark_boards = @q.re…

POST、PATCHについて

Twitterや掲示板などで、新しく投稿する時、投稿した内容を更新する時に、POSTやPATCHというHTTPメソッドが働いています。 この内容を勉強したので、アウトプットします。 POSTとPATCHを確認。 今回は、掲示板に投稿、投稿した内容を更新していきます。 掲示…