世界一適当な技術ブログ

日々学んだ内容をとにかくにブログ形式でアウトプットします。(技術系中心)基本自分用備忘録です。

Rails

クラス/インスタンスメソッドの使い分け方法

クラス/インスタンスメソッドの使い分け方法 railsのモデルファイルを書いていて間違えやすいのが、クラス/インスタンスメソッドの使い分けです。 先に結論 データすべて(モデルそのもの)に対する操作はクラスメソッド。特定のデータに対する操作はインスタ…

rails newでgit 管理外れる場合の対象方法

rails new git 管理外れる場合の対象方法 rails newで作成したアプリケーションのディレクトリに移行してみると、git initのコマンドを打ち込んでいないのにも関わらずgitの管理が始まってします。 このときの対処方法を記載する 例)こんな現象 [/Users/use…

Rails設計パターン

Rails設計パターン Railsの設計パターンについて、殴り描きします MVCパターン RailsTutorialから入った自分には一番馴染みの設計パターン ルーティング(Routes)→コントローラー(Controller)→モデル(Model)→ビュー(View)の順番で処理がなされる 画像参考:【…

Railsアプリケーションのパフォーマンス・チューニング

railsのActiveRecordって便利だけど、実際にどんなクエリが吐かれるかチェックしてないとパフォーマンスすぐに落ちるケース多い。 遅いAPIをどのようにして発見するか? ■ 1.APM(Application Monitoring Management)を導入する おすすめはこの辺り - NewReli…

Railsのメリット、デメリット

メリット ■ 開発速度が速い RaislはRubyを使ったフルスタックWEBフレームワーク(DBを扱うActiveRecordが優秀、、メールを送る仕組みがデフォルトである、ジョブを実行できる)で、Rails Wayな書き方をすることで開発スピードを上げることが出来る。 Rails W…

ActiveRecord::Type::Booleanでフラグ条件判定する便利な方法

has_option_thumbnail == 'true' みたいな条件判定をした場合、has_option_thumbnail == 'TRUE'のような場合ではfalseと判定されてしまいます。 この対策としてhas_option_thumbnail == 'true' || has_option_thumbnail == 'TRUE'にすればOKなんですが、なん…

Everyday Rails - RSpecによるRailsテスト入門のまとめ

Everyday Rails - RSpecによるRailsテスト入門のまとめ 読みました。 超適当に内容まとめる。 全体 describe、context、before、after を使ってスペックを DRY にする マッチャはREADMEを参考にすると良い。参考リンク shoulda-matchersを利用すれば、便利な…

Rspecのマッチャの参考リンク

RSpec が提供するデフォルトのマッチャをすべて見たい場合はGitHub にある rspec-expectations リ ポジトリ20の README が参考になるかもしれません。 https://github.com/rspec/rspec-expectations

Bundle Updateする時は影響範囲を最小限にしようという話

Bundle Updateする時は影響範囲を最小限にしようという話 bundle updateをすると全部のライブラリの依存関係を持ったgemも含めてアップデートされてしまいます。 そうすると、影響範囲が大きすぎて予期せぬバグになるケースが存在します。 ですのでBundle Up…

Sidekiq アンチパターンのまとめ

Sidekiq アンチパターン 業務でsidekiqを利用するケースがあったのですが、sidekiqのアンチパターンについて知らなかったのでまとめました。 1. 命名規則について ワーカーの名前は後から変更するのは後から変更するのは大変です。 ワーカーの命名規則をつけ…

ActiveRecord::Base.connected_toの利用方法

ActiveRecord::Base.connected_toの利用方法 今の現場でActiveRecord::Base.connected_toを利用した実装をしており、初めてみた書き方だったのでメモを残す。 データベースのルールを明示的に指定することが出来る ActiveRecord::Base.connected_to(role: :w…

Rails.application.config_forで設定ファイル全体を読み込む方法

Rails::Application.config_forを使うと、設定ファイル全体を読み込むことができます。 例) Rails.application.config_for(:for) config_for(:for)とする事によって、config/foo.ymlに設定された内容を、そのまま定義することができます。 config/foo.ymlの…

sidekiqの使い方備忘録

sidekiqの使い方備忘録 仕事でsidekiq利用する機会があったので使い方の備忘録を残す(自分用) sidekiqとは? github.com Simple, efficient background processing for Ruby. Sidekiq uses threads to handle many jobs at the same time in the same proc…

【Rails】更新系メソッドまとめ

【Rails】更新系メソッドまとめ すでにテーブルに保存されているデータを、新しい情報に更新するメソッドに関してまとめてみました。 自分用備忘録です。 updateメソッド user = User.create(name: 'Taro', age: 15) # 成功 user.update(name: 'Taro') # => …

複雑なクエリの場合はO/Rマッパーではなく直接SQL書いた方が良いという話

複雑なクエリの場合はO/Rマッパーではなく直接SQL書いた方が良いという話 RailsのO/Rマッパーだけでは複雑な条件取得の場合に役不足のケースがあります。 その場合は直接SQLクエリを作成する方が早いケースがあります。 例)直近1週間で60分以上ゲームした…

groupを利用した少し複雑な処理方法

groupを利用した少し複雑な処理方法 タイトルがうまく思いつかないので、よくわからないと思うのですが。 下記のようなケースを想定した場合の処理について説明します。(自分用備忘録です) 例)ユーザーがゲームをした回数を調べたい、日付毎に確認したい…

大文字小文字を区別しないでActiveRecord(where)で取得する方法

大文字小文字を区別しないでActiveRecord(where)で取得する方法 ■ モデル構造 Personテーブルから名前がstevejobsのレコードを検索取得したい場合 モデルクラス.where("列名 LIKE ?", "%値%") # 値(文字列)を含む で取得できるので以下のように実装します。 …

LimtとOffsetでレコード指定して取得する方法

LimtとOffsetでレコード指定して取得する方法 レコード数を指定して取得したい時に便利な方法を記載します。 limitメソッドは、取り出すレコード数の上限を指定します。 クライアントテーブルから5レコード取得 Client.limit(5) ↓ SELECT * FROM clients LI…

Raisでバルクインサートする方法

Raisでバルクインサートする方法 Railsでバルクインサートする方法を記述します。 バルクインサートとは? ↓ qiita.com では、Railsでバルクインサートするにはどうすれば良いのでしょうか? フルスタックフレームワークであるRailsであればバルクインサート…

Railsのform_withのあれこれ【殴り描き】

form_withのあれこれ Rails5.1以降に登場したform_withの利用方法のメモ残す。 Rails5.1以前に利用されていたform_forとform_tagは非推奨になったので基本利用しないようにしましょう。 form_withではモデルに関連するもの、関連づかないフォームのどちらで…

Trailblazerの使い方(途中)

Trailblazer is 何 Trailblazer provides new high-level abstractions for Ruby frameworks. It gently enforces encapsulation, an intuitive code structure and approaches the modeling of complex business workflows with a functional mind-set. ふ…

Heroku Postgres(DB)をローカルから操作する方法

はじめに PaaSシステムのHerokuを利用しているのですが、DBを使用する際に、直接SQLを手動で実行したいケースが発生しました。 (正式にはPostgreSQL をチューニングしたHeroku Postgresを利用しています) https://www.heroku.com/postgres ■ 手順 STEP1. He…

Kintoneのwebhookを利用してRailsアプリと連携させる方法

Kintoneのwebhook利用方法 サイボウズ株式会社が提供しているKintoneのWebhookを利用してRailsアプリと連携する実装をしました。 簡易的ですが、実装方法を記載します。 Webhookとは WebhookとはWebサービスであるイベントが実行された時に外部サービスにPOS…

RailでCSV出力する方法

RailでCSV出力する方法 RubyのCSVを利用すれば簡単にCSV出力が可能です。 環境 ruby 2.6.3 Rails 6.0.0 View # ポイントは引数にformat: :csvを指定することです。 # これでcsv形式でのリクエストを送ることができます。 <%= link_to "csvで出力する",hoges_…

Hash から文字列でもシンボルでも値を取り出す

Hash から文字列でもシンボルでも値を取り出す 先日のプルリクでhashの文字列とシンボルで取り出す実装をそれぞれ分けていたら、コメントで「with_indifferent_access」を利用してください。というコメントが.... なんだwith_indifferent_accessとは?と思い…

redirect_toでアンカーリンク移動する方法

redirect_toでアンカーリング移動する方法 オプションのanchorを使えばページ内ジャンプ機能ができます。 めちゃ簡単です。 redirect_to hoge_path(anchor: 'description') hogehogeはジャンプ先のidです。 #description .card-header h4 ここにリンクします…

ActiveModelSerializersの備忘録

ActiveModelSerializersの備忘録 会社でActiveModelSerializersを利用する機会があったのですが、よく理解していなかったので自分用の備忘録を残す。 ActiveModelSerializersとは 最近ではRailsをAPIモードで開発する機会も多い。 ActiveModelSerializers: J…

Rails Tutorailから学ぶMVCの挙動

前提条件 - HTTPのGetリクエスト - Userモデルのデータを全部取得(User.all) - その内容をindex.html.erbに渡して表示させる。 ブラウザからURLのリクエスト(このリクエストは、アドレスバーにURLを入力したりリンクをクリックした時に発生する)をRails ro…

デフォルトのタイムゾーンを日本時間にする方法

デフォルトのタイムゾーンを日本時間にする方法 RailsアプリケーションのデフォルトのタイムゾーンのURCから日本時間に変更する方法を紹介します。 config/application.rbを以下のように修正します。 . . . module Hogehoge class Application < Rails::Appl…

(ActiveRecord)new createの違い

new newでオブジェクトを作成する。saveするまで保存されない。 micropost = Micropost.new(hoge: 'hoge') micropost. persisted? # => false. オブジェクトだけ作成されていて、保存されてない micropost.save micropost. persisted? # => true. saveしたあ…