リモートで働くプログラマーの検索結果

リモ太がググったことの覚書

Rails

paper_trail gemを利用して更新履歴を保存する

github.com Gemfileにgemを追加して bundle install gem 'paper_trail' generaterでpaper_trail用のDBを作るマイグレーションファイルを作成して db:migrateを実行 bundle exec rails generate paper_trail:install bundle exec rake db:migrate 作られるマ…

ActiveRecordで保存したときにbelongs_toで紐付いた親のレコードも更新する

belongs_to のオプションで :touch を指定する :touchオプションをtrueに設定すると、そのオブジェクトがsaveまたはdestroyされたときに、関連付けられたオブジェクトのupdated_atタイムスタンプやupdated_onタイムスタンプが常に現在の時刻に設定されます。…

Rails5.2からRails6.0へアップグレードする

Gemを更新 source 'https://rubygems.org' git_source(:github) { |repo| "https://github.com/#{repo}.git" } -gem 'rails', '~> 5.2.4.3' +gem 'rails', '~> 6.0.3.2' gem 'pg' gem 'puma' gem 'turbolinks', '~> 5' bundle update rails アップデートタス…

Railsのroutingでパラメータにドットを許容する

paramsにドットが入るとデフォルトではRouting Errorが返される resources :users, constraints: {id: /[-a-zA-Z0-9.\-_\+]+/} このように指定すると id にアルファベットとマイナスとドットとアンダーバーとプラスを許容できる railsguides.jp

複数モデルでdeviseを利用するときに特定のモデルだけauthentication_keysを変更したい

ログインに利用するキーを変更するには通常 config/initializers/devise.rbの中の # ==> Configuration for any authentication mechanism # Configure which keys are used when authenticating a user. The default is # just :email. You can configure i…

after_saveで項目の値が変わっていたかどうかを確認したい

saved_changeや(項目名)_previous_changeを使って変更を確認する user = User.new user.email = "test@example.com" user.save p user.email_previous_change ["", "test@example.com"] class User < ApplicationRecord after_save :do_somothing_if_email_c…

Proc.newを使って特定の条件のときだけvalidatesを有効にしたい

他の項目の値を参照して、validatesの有効化したい場合 例えば emailが入力されている場合のみnameの必須チェックをしたい場合は以下の様に書く validates :name, presence: true, if: Proc.new {|r| r.email.present? }

rails db:rollbackを禁止したいときはActiveRecord::IrreversibleMigrationを使う

class SomethingMigration < ActiveRecord::Migration[5.0] def up # Add migration code end def down raise ActiveRecord::IrreversibleMigration end end

RailsプロジェクトにRspec環境を構築する - 2020年4月

Gemfileに必要するgemを追加してbundle group :test do gem 'rspec-rails' gem 'factory_girl_rails' gem 'rspec-collection_matchers' gem 'faker' gem 'email_spec' gem 'capybara' gem 'webdrivers' gem 'timecop' gem 'simplecov', require: false end …

simple_formatを使うときはエスケープ処理を忘れないようにしよう

simple_formatの内部ではhtml_safeが呼ばれているため タグが埋め込まれているとそのまま表示されてします 以下の様にview(haml)を記述すると - content = "<a href='https://remoter.hatenablog.com/'>ブログ</a>" = simple_format content リンクが表示されてしまう なので h (html_escapeのalias)を利用…

deviseのユーザー登録時に利用規約に同意のチェックボックスを追加する

よくあるユーザー登録時に利用規約同意用のチェックボックスを追加したい モデルに同意チェックボックス用のvalidatesを追加 acceptance: trueを使うことで特に項目を追加したりしなくてもよい class User < ApplicationRecord devise :database_authenticat…

gem「hanmoto」を使ってhamlで記述したエラーページを生成する

github.com 詳細な使い方は以下を参照 qiita.com 簡単には - gemをインストール - エラーページ用のlayoutファイル、app/views/layouts/public.html.hamlを作成 - app/views/pulibc_pages/404.html.hamlやapp/views/pulibc_pages/500.html.hamlを作成 - rake…

flash.keepでflashの中身を保持する

Railsでよく画面に一回だけメッセージを表示するときに使うflash flash[:notice] = '更新しました' とかよく使うけど flash.keep[:notice] を使うことで、次のアクションまで保持します flash入れたあとにredirect2回するとかだと使うことがあるかなぁ resp…

Railsのroutingで詳細ページのparamsをid以外に変える

通常 routes.rbでroutelingを記述すると Rails.application.routes.draw do resources :posts end GET/posts(.:format) posts#index POST /posts(.:format) posts#create GET /posts/new(.:format) posts#new GET /posts/:id/edit(.:format) posts#edit GET …

railsでckeditor5のmarkdown pluginを導入する

オープンソースのWYSIWYGエディタであるCKEditor5をマークダウンエディタとしてRailsに導入する https://ckeditor.com/ckeditor-5/ 以下のpluginを利用する https://ckeditor.com/docs/ckeditor5/latest/features/markdown.html 前提条件、webpackerの4系を…

RailsプロジェクトでSQLを叩いてCSVを出力できるgem「blazer」を導入する

github.com 同様なgemにadhoqというのもある github.com READMEに従ってセットアップ Gemfileに追記 gem 'blazer' installして必要なテーブルを作成 bundle install rails generate blazer:install rails db:migrate config/routes.rbに追記 # config/routes…

既にdeviseを使っている時に管理者用の別モデルを作成して管理画面のログイン機能を作成する

github.com Rails用の認証用のgem devise 複数モデルを使ってユーザー用と管理者用に別々にログイン画面を作成する 以降は、既にUserというモデルでユーザー側は作成している前提です 管理者用のモデルを作成 rails generate devise Administrator rake db:m…

継承元のApplicationControllerに定義したbefore_actionと各コントローラーに定義したbefore_actionの実行順

継承元のコントローラー class ApplicationController < ActionController::Base before_action :puts_base1, :puts_base2 before_action :puts_base3 private def puts_base1 p 'ApplicationController:1' end def puts_base2 p 'ApplicationController:2' …

既存のモデルのインスタンスのデータをコピーして新しいモデルのインスタンスを作成する

dupを使うとid,created_at,updated_at以外の項目をコピーしたインスタンスが作成される Post.first => #<Post id: 1, title: "ブログはじめました", body: "新しいブログをはじめたよ", created_at: "2020-02-06 02:33:16", updated_at: "2020-02-06 02:33:16"> Post.first.dup => #</post>

ransackのsort_linkでjoinしたテーブルのカラムを指定したい

def index @q = Post.joins(:category).ransack(params[:q]) @posts = @q.result end このようなcontrollerのコードがあった時にcategoryのnameでsort_linkを使いたい場合以下の様に書く = sort_link(@q, 'category_name', 'カテゴリー名') アンダーバー区切…

ransackでデフォルトのソート順を指定する

@q = Post.ransack(params[:q]) @q.sorts = 'updated_at desc' if @q.sorts.empty? @posts = @q.result ransackのSearchオブジェクトのsortsが空ならデフォルトでしたいソートを指定すればよい @q = Post.ransack(params[:q]) @q.sorts = ['updated_at desc'…

ngrokを使ってローカルで起動したrailsアプリに外部から接続するようにする

webhookを受け取るプログラムを開発する場合など、外部からのアクセスを受け入れたいときngrokを利用することで可能にする ngrok.com 使えるようにするまでの手順は公式サイトに乗ってる通りだけど ユーザー登録をします ngrok(zipファイル) をダウンロード …

Twilioを使ってSMSを受信する

twilioでSMSを受信してrailsアプリでwebhookを受け取りたい twilioとは Twilioは音声通話、メッセージング(SMS/チャット)、ビデオなどの 様々なコミュニケーション手段をアプリケーションやビジネスへ容易に組み込むことのできるクラウドAPIサービスです。…

simple_formでlegend_tagにclassを追加したい

simple_formで f.input を使うときに legend_tag が生成されるような場合には <%= f.input :name, legend_tag_html: { class: 'custome-class' } %> としてやればよい 同様にlabelの場合は label_html, wrapperの場合は wrapper_html でオプションを指定する…

herokuでデータベースのプランをアップグレードする

heroku公式のPostgreSQL用add-oneは無料プランでは10,000行までしかデータが保存できないためその制限を超えた場合は上位プランのadd-oneを追加してデータベースをコピーして切り替える必要がある まずは上位プランのadd-oneを追加 最初は無料のHeroku Postg…

ActiveRecordで値が入力されていないものだけを抽出したい

データベースがnullを許可しているかどうかによって変わってくるけど デフォルトだとnullが許可されているので値が入力されていないものを抽出する場合には null と 空文字列 両方を抽出対象とする必要がある create_table "messages", force: :cascade do |…

railsでデータベースのdefaultを削除したい

default値が設定された項目からdefault値を取り除く場合は migrationのchange_columnでdefault: nilを指定してやればよい create_table "tags", id: :serial, force: :cascade do |t| t.string "name", null: false t.integer "row_order", null: false, def…

deviseのログインセッションの維持期間をアクセスに応じて延長したい

rememberable のデフォルトの挙動は、ログイン日時を基準として cookie に expire が設定される なので例えば remember_for=3.days 維持期間が3日間だった場合 1/1にログインすると 1/2にアクセスしたとしても 1/4にブラウザを立ち上げ直すと再ログインが求…

Railsでポリモーフィックの項目のあるモデルの作り方

ぱっと思い出せなかったので rails g model ポリモーフィック で検索 qiita.com {polymorphic} とつけるとポリモーフィック関連になる rails g model message messagable:references{polymorphic} message:text rake db:migrate 上記を実行したモデル、schem…

rspec-parameterizedとは似たような条件をパラメータ化してrspecをきれいにかけるようになるgem

ちらっとタイムラインで見かけたので、rspec-parameterized についてググってみたのでメモ githubのリンク GitHub - tomykaira/rspec-parameterized: RSpec::Parameterized supports simple parameterized test syntax in rspec. かんたんに使い方をqiitaに…