スリ飯屋MaLankaのフリーエンジニアな日々

IT実務未経験から約1年、東京でフリーランスのRuby on Railsエンジニアに転職。約2年半、大阪中崎町でスリランカカレーの間借りしてました。フリーランスエンジニアになるためのノウハウ、スリランカの事を発信していきます。

技術関連-Rails

【awesome_print is not working】(pry) output error: #<NoMethodError: undefined method `marshal_dump' for #<ActiveModel::Errors:xxx>

エラー文「(pry) output error: #」でググるとIssueがヒット。 どうやらRailsから「marshal_dumpメソッド」が削除され、 その影響でawesome_printからも関係するコードが削除された模様。 Update CHANGELOG Remove usage of marshal_dump since this was rem…

【Rails Ruby】メソッドで特定のgemがインストール済かチェックする

ターミナルで $ gem list xxx のようにするのではなく、 メソッドで特定のgemがインストール済かチェックしたい。 ターミナルと同様にgemコマンドを使えばOKです。 gem '指定のgem名' で調べられます。 戻り値は、 引数のgemがインストール済ならtrueを返す …

【Rails】partialのcollectionをcacheし、有効期限(expires_in)を設定する方法

やり方としては、 cache オプションと expires_in オプションを指定するだけなのですが、 生成されるキャッシュのキーについて補足しておきます。 結論、 下記のような感じになります。

【Rails】Herokuのデプロイ開始・完了をWebhookでLineNotifyへ通知する

LineNotifyの準備 1. LineNotifyのアクセストークンを発行する 2. LineNotifyのAPIを扱うクラスを作成する 3. 1で指定したグループに「Line Notify」アカウントを招待しておく Herokuの準備 3. HerokuからのWebhook通知を受けるルーティングを追加する 4. デ…

【SendGrid Rails Heroku】SendGridアドオンで作成したアカウントが凍結されてもメール送信する方法

元々アプリ用に取得していたGmailのメルアドを、 SendGridの「Single Sender Verification」で設定することで、 SendGridからメール送信できるようにしました。 1、 下記「Single Sender Verification」の、 「Create New Sender」ボタンをクリックして登録…

【Nuxt Vue Rails】axiosのContent-Typeがappliation/jsonにならない

解決策 getの場合は、 第二引数にheaders: をキーとして、 指定したいヘッダのオプションを渡せばOK。 this.$axios.get(url, { headers: { "Content-Type": "application/json", "Accept": "application/json" }}) postの場合は、 第三引数にheaders: をキー…

【Stripe Rails】決済モーダル内のemailにJavaScriptで値を設定する

3、StripeCheckout.configureで生成したオブジェクトから呼び出す、openメソッドの引数のキーにemailを指定し、2の値を設定する 決済する *** // JavaScript var handler = StripeCheckout.configure({ key: '', locale: 'auto', currency: 'jpy', panelLa…

【Stripe Rails】サブスクリプションの即時決済時に、請求書と領収書のダウンロードリンクを取得する

Stripe::Subscription#latest_invoice で、 最新の請求書が取得でき、 latest_invoice.chargeでStripe::ChargeのIdが取れるので、 Stripe::Charge.retrieve(latest_invoice.charge).receipt_url のようにして領収書表示ページのリンク(Stripe::Charge#receip…

【ActiveAdmin】レコードが無い場合の、まだありません。「作成する」を非表示に【blank_slate content link】

解決策 ActiveAdmin::Views::Pages::Indexというクラスにある、 render_blank_slate というメソッドにモンキーパッチを当てます。 render_blank_slate www.rubydoc.info ja.ymlのキー (blank_slate、content、link) github.com やり方 1、 initializerで、モ…

【Active Admin】Unable to find input class JsonInput

son型のDBカラムを、 active_adminの管理画面フォームで表示させようとすると、 Unable to find input class JsonInput のエラー。 backtraceの一部 @input_class_finder.find(as) rescue Formtastic::InputClassFinder::NotFoundError raise Formtastic::Un…

【Rails】ymlファイルの中でerbを使い、動的に値を取得してrakeタスクの引数にする

ymlファイルの中でerbを使い、 動的に値を取得してrakeタスクの引数にしようとしていた。 が、 erbを使った部分が文字列のままで渡ってきて、 上手くいかなかった。 ymlファイル例は下記。 # test.yml.erb - id: age: 18 *** こういう値が欲しいが、 #=> [{ …

【active_admin】json型columnのinputエリアの、初期value表示でハマる

最初に結論 json型なので、 参照時のキーは「文字列キー」にする必要がある。 シンボルじゃダメ。 それだけのことでした。 起こったこと 下記のようなjson型カラムの中にあるデータを、 active_adminのフォームの初期値として表示させたい。 t.json "options…

【Rspec Capybara】confirmダイアログが2回表示されるsystem specを書く

やり方 単純にダイアログの回数分、 accept_confirm をネストすればOK。 # 1回目のダイアログ page.accept_confirm do # 2回目のダイアログ page.accept_confirm do # ダイアログが全てOKなら実施したい何らかの処理 first('div[data-cell="del"]>div>form>b…

【Rails】論理削除を有効にする方法【paranoia discard】

paranoiaのREAD.MEで、 paranoiaは非推奨になった旨が追記されています。 今後は 「discard」 を使うようにしましょう。 1、paranoiaというgemをインストール 2、モデルにdeleted_atというカラムを追加する 3、active_record.rbにacts_as_paranoiaと追記…

【ActiveAdmin】formのcheck_boxで、dialogやalertの代わりに注釈(hint)をつける

ActiveAdminで管理画面を作っていて、 「非エンジニアのサポートチームの人が使うから、チェックボックスにはダイアログかアラート出したいな...」 と思い、 「chack_boxをON、OFFしたらdialogかalertを出すオプション」 的なものを探していたのですが、 che…

【ActiveAdmin】has_many + nested_attributes_for + allow_destroyなassociation_formで生成される削除ボタンをカスタマイズする

「allow_destroy: true」 を使わず、 f.inputのname属性に 「:_destroy」 を指定すればOKです。 例 form do |f| f.inputs 'Contract' do # 親モデル Contract end # 子モデル Option f.has_many :options, do |o| # allow_destroy: trueは不要 o.input :_des…

【ActiveAdmin】デフォルトのcreateとupdateの処理をカスタマイズしたい

controller do〜endブロックの中で、 createなりupdateメソッドをオーバーライドすればOKです。 オーバーライドする際は、 リダイレクトの処理も書いてあげる必要があります。 ちなみに、 createもupdateも、 デフォルトのリダイレクト先は「showアクション…

【ActiveAdmin】select_boxで表示するcollectionのscopeを指定したい

結論 collectionオプションを使います。 collectionの引数に、 scopeを渡してあげればOKです。 例 f.inputs for: [:plan, f.object.plan || Plan.new] do |p| p.input :name, as: :select, collection: Plan.all.map(&:name) # Planモデルの全nameをセレクト…

【ActiveAdmin】formで、belongs_toなmodelのstrong_parameterを指定する

permit_paramsに、 子モデルの「名称」と「属性」を指定すればOKです。 例えば、 下記のようなモデルがあるとします。 # 親 class Plan attribute :name attribute :price has_many :contracts end # 子 class Contract belongs_to :plan end この場合、 Act…

【ActiveAdmin】フォームのタイトル(パネル)部分を色付けする

panel do〜endブロックの中に、 f.inputを入れてあげればOKです。 form do |f| panel '次月プラン' do f.input :name f.input :id end end するとこんな感じになります。 f:id:mah666hhh:20201107111535p:plain nameのラベルは、 I18nで翻訳が当たっているの…

【ActiveAdmin】ヘッダー下のデフォルト作成ボタンを非表示にする

config.clear_action_items! の1行を追加すればOKです。 ActiveAdmin.register Item do # これを追加 config.clear_action_items! end これで、 ヘッダータイトルの作成ボタンが非表示になりました。 f:id:mah666hhh:20201107092354p:plain clear_action_ite…

RSpecで、Base64エンコードされた画像ファイルをテストする

こんにちは、mah(@RailsRubyMah6h)です。 今回は、 RSpecでBase64エンコードされた画像ファイルをテストする です。 1、 テストに使う画像ファイルを、Base64でエンコードしたバイナリ文字列に変換する (下記のようなサイトを使うとラクです) https://lab.sy…

【Rails6】gem toastr-railsを導入できない【ReferenceError: toastr is not defined】

## 【Rails6】gem toastr-railsを導入できない【ReferenceError: toastr is not defined】 出ているエラー ReferenceError: toastr is not defined 結論 下記の記事の手順通りにやると、toastr-railsを入れられました。 medium.com 起きていたこと 公式ドキ…

【Ruby on Jets】dynamodb-localを実行した時に、javaのバージョンが古くてエラー発生。Exception in thread "main" java.lang.UnsupportedClassVersionError: org/apache/logging/log4j/spi/ExtendedLogger : Unsupported major.minor version 52.0

javaのバージョンを上げれば解決しそう。 javaのバージョンを確認。 $ javac -version javac 1.6.0_65

【必見】Railsアプリでadsenseの自動広告が表示されない時の5つの確認事項

1. 自動広告はオンになっているか 2. Corsの設定をしたか 3. きちんとheadタグ内にコードを貼っているか 4. Adsenseサイト申請時のコードが残っていないか 5. コードを貼り付けてから1、2日間は経過しているか

【Rails】aタグからhref属性の値を正規表現で抽出する方法

href\s=\s"([^"]*)" という正規表現を使うことで実現可能です。 このstack over flowの回答がドンピシャでした。 > You should be able to use a regular expression like this: > href\s*=\s*"([^"]*)" See this Rubular example of that expression. > The…

【Rails】開発環境のデータを本番環境(heroku)へ移動【seed_dump】

seed_dump というgemを使うとサクッと実現出来ます。 このgemは簡単にいうと、 DBのデータをseedファイルに超楽チンに書き出せるgem です。 本番環境の商品データを、 定期バッチでスクレイピングして貯めていこうかと思っていました。 が、スクレイピングは…

【Rails heroku】ActiveRecord::AttributeMethods::Serialization::ColumnNotSerializableError

postgreSQL(herokuのデフォルトのDBはpostgreSQL) では、モデルのserializeメソッドが使えない ようです。 ActiveRecord::AttributeMethods::Serialization::ColumnNotSerializableError (Column `tags` of type ActiveRecord::ConnectionAdapters::PostgreS…

【Rails】DBに紐つかない属性(カラム)をモデルに追加する

Railsの標準機能である attribute API を使います。 attribute :virtual_tags, type: Array virtual_tagsという属性 に 配列の値 を保持させることが出来るようになります。 もし、typeを指定しない場合は、設定した値のclassで、値が設定されます。

【Rails】joinしたテーブルに対し、where句で特定の日付前後(以前以降)で絞り込みしたい

where句でテーブル名とカラム名両方を指定し、 文字列で条件指定すれば出来ました。 Model.joins(:join対象のテーブル名).where("join対象のテーブル名.join対象のテーブルにあるカラム名 >= ?", 日付) 例: ordersテーブルのorder_dateが、2020/01/20以降のU…