From 84df335e7c7b602b5c52ccf72b95678f7c6bd16a Mon Sep 17 00:00:00 2001 From: "sentry[bot]" <39604003+sentry[bot]@users.noreply.github.com> Date: Fri, 19 Jun 2026 16:54:37 +0200 Subject: [PATCH] fix(trades): guard against nil security in create_trade (#2066) Co-authored-by: sentry[bot] <39604003+sentry[bot]@users.noreply.github.com> --- app/models/trade/create_form.rb | 12 ++++++++++-- config/locales/views/trades/en.yml | 1 + 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/app/models/trade/create_form.rb b/app/models/trade/create_form.rb index 37cf3a44e..ce4a984db 100644 --- a/app/models/trade/create_form.rb +++ b/app/models/trade/create_form.rb @@ -37,11 +37,19 @@ class Trade::CreateForm end def create_trade + sec = security + + unless sec + entry = account.entries.build(entryable: Trade.new) + entry.errors.add(:base, I18n.t("trades.form.trade_requires_security")) + return entry + end + signed_qty = type == "sell" ? -qty.to_d : qty.to_d signed_amount = signed_qty * price.to_d + fee.to_d trade_entry = account.entries.new( - name: Trade.build_name(type, qty, security.ticker), + name: Trade.build_name(type, qty, sec.ticker), date: date, amount: signed_amount, currency: currency, @@ -50,7 +58,7 @@ class Trade::CreateForm price: price, fee: fee.to_d, currency: currency, - security: security, + security: sec, investment_activity_label: type.capitalize # "buy" → "Buy", "sell" → "Sell" ) ) diff --git a/config/locales/views/trades/en.yml b/config/locales/views/trades/en.yml index f8e1fb418..72577b500 100644 --- a/config/locales/views/trades/en.yml +++ b/config/locales/views/trades/en.yml @@ -20,6 +20,7 @@ en: type_dividend: Dividend type_interest: Interest dividend_requires_security: Security is required for dividends + trade_requires_security: A security (ticker) is required for buy and sell trades header: buy: Buy sell: Sell