ダメでしょ!

プログラミングとか怒られた話とか…

Ruby on Rails

Rails6 で導入された Guard against DNS rebinding とngrok 利用時の回避方法

Rails6にアップデートしたアプリを触っていた際に、Edgeブラウザで表示確認しようと思って ngrok を使おうとしたらエラーになりました。 ngrok rails6 error 原因はこれ。DNS rebinding という攻撃手法に対するセキュリティ機構が追加されていました。 githu…

Rails の 実行環境を指定するオプション RAILS_ENV をサーバに覚えさせる方法

RAILS_ENV は Rails の実行環境を指定するための環境変数です。 指定しないで実行するとデフォルトとして development で実行されます。 久々に改修依頼が来たWebサイトでは、production 環境と staging 環境を用意していました。 staging 環境でテストを行…

Rails における Staging 環境の追加方法

売り切りで開発したシステムに改修依頼が来た 昔、作るだけ作ったシステムがあったんですが、特に改修とかの話もなく、1年以上経った今になって改修を依頼されました。 ありがたい限りです。 で、改修するんですけど、そもそも改修が来る想定がなかったのでp…

ActiveAdmin にCSV取込機能を追加する際に便利な gem active_admin_import

前提 ruby 2.1.10p492 Rails 4.2.8 active_admin_import 既存システムの修正依頼 前に他の担当者が作成した Rails アプリで、CSVインポートが上手くいかないという相談があり、アプリを確認したところ、管理サイト側が ActiveAdmin を利用していました。 そ…

sqale がサービス終了するので、Heroku に移行した

sqale からの移行推奨先は Heroku info.sqale.jp 公式にそのような案内がありました。 ただ、正直な話、レイテンシが発生するということ、ドル払いになってしまうことから最初は他のサービスに移行したいと考えていました。 移行先調査した ということで、移…

Rails5 でバッチ処理を利用する際に知らないとハマるかもしれないポイント!

前提 Rails 5.0.2 Ruby 2.4.0 なににハマったのか? Rails5 で新規アプリを作成していて、バッチ処理を作成しました。 処理は .\lib\tasks\ 配下に格納し、 .\config\application.rb に以下の設定を行いました。 class Application < Rails::Application ・・…

Rails のルーティングに使用する id を別の内容に変更する方法

通常、edit 等に使用する URI に設定される id を、別のキー等で置き換えたい場合があります。 $ be rake routes Prefix Verb URI Pattern password_resets POST /password_resets(.:format) password_resets#create new_password_reset GET /password_reset…

ActiveRecord に対する scope は条件に一致するレコードが存在しない場合 .all の結果を返却する

scope を利用していたところ、思わぬところでハマってしまいました。。 指定の条件で検索を行い、返却された結果が nil かどうかで条件分岐させようと思っていたのですが、scope を利用すると常に nil ではなく、.all の結果が返却されてきます。 scope :sea…

rails_admin と devise を導入したプロジェクトで、root_path と rails_admin_path が異なる場合のログアウト遷移先設定方法

前提 rails_admin devise 困っていたこと 一般向けサイトと管理サイトを作成し、管理サイトのみ devise でログイン処理を作成しました。 プロジェクト自体の root_path は一般向けサイトを指定したのですが、そうすると、管理サイトからログアウトした際に r…

複数選択可能なチェックボックスやリストボックスで選択された内容を一つのカラムに保存する方法

前提 Rails 4系 haml 4.0系 どういう場面で使うか 入力画面で複数チェックボックスやリストボックスを表示するのは以下のようにかけます。(例としてリストボックス) = m.select :answer, [['ア', 'ア'], ['イ', 'イ'], ['ウ', 'ウ'], ['エ', 'エ']], {}, { m…

rails_admin 導入時の 管理サイトタイトル変更方法

rails_admin を導入してカスタマイズ rails アプリケーションを作成していて、管理サイトがほしい、と言われることが結構あります。 あんまりこだわりがないお客様の場合、rails_admin を導入することが多いです。 rails で良く利用されている管理画面の gem…

simple_form を利用している時にsubmit ボタンにボタン名と value をセットする方法

前提 導入gem simple_form haml 普通の書き方だと、ボタン名が value の値になってしまう 通常、submit ボタンは以下のように記載すると思います。 = f.button :submit, 'ボタン名' { name: "#{f.object_name}[completed]", value: '1', class: 'btn btn-pri…

simple_form と bootstrap を利用した環境で f.collection_select をどう書くか

前提 rails 4系 simple_form 3.2.1 bootstrap-sass 3.3.7 そのままだと(非bootstrap になる) 通常、collection_selectは以下のように記載しています。 = f.collection_select :option_id, OptionMaster.all, :id, :option_name, { prompt: true, class: 'for…

ActiveRecord から取得した1レコードから配列を作成する

例として、option_mastersというテーブルが存在していた場合 # # Table name: option_masters # # id :integer not null, primary key # option_name :string # option1 :string # option2 :string # option3 :string # option4 :string # option5 :string #…

rails でログイン認証されていない場合にログイン画面へ遷移させる方法(と、Active Admin を利用して管理画面を作成する際に除外する方法)

ログイン認証チェックを全画面に対応させる ./app/controllers/application_controller.rb に以下の様な形で認証チェックを入れます。 # ./app/controllers/application_controller.rb class ApplicationController < ActionController::Base before_action …

rails における enum型の注意点

当たり前の話なのかもしれませんが、rails アプリで enumを使用した際にハマったので、備忘として記載します。 前提 enum_helpをインストールしています (試していませんが、enum_helpを導入していないと、そもそもviewでうまく呼び出せないとか) 参考 : Act…

テンプレートエンジン hamlとslimの比較

一年くらい前に、railsを利用したとある業務アプリケーションの開発において、テンプレートエンジンを比較してhamlを導入しました。 その際に候補として挙がったのが、hamlとslimでした。 いろいろ比較して結果hamlを導入することに決定し、その業務アプリケ…