2021-06-01から1ヶ月間の記事一覧

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…