diff --git a/app/models/account.rb b/app/models/account.rb index f07b442f..85167e22 100644 --- a/app/models/account.rb +++ b/app/models/account.rb @@ -62,8 +62,18 @@ class Account < ApplicationRecord end def institution_domain - return nil unless plaid_account&.plaid_item&.institution_url.present? - URI.parse(plaid_account.plaid_item.institution_url).host.gsub(/^www\./, "") + url_string = plaid_account&.plaid_item&.institution_url + return nil unless url_string.present? + + begin + uri = URI.parse(url_string) + # Use safe navigation on .host before calling gsub + uri.host&.gsub(/^www\./, "") + rescue URI::InvalidURIError + # Log a warning if the URL is invalid and return nil + Rails.logger.warn("Invalid institution URL encountered for account #{id}: #{url_string}") + nil + end end def destroy_later diff --git a/app/views/transfers/_account_links.html.erb b/app/views/transfers/_account_links.html.erb index 33390b31..738416c6 100644 --- a/app/views/transfers/_account_links.html.erb +++ b/app/views/transfers/_account_links.html.erb @@ -1,7 +1,25 @@ <%# locals: (transfer:, is_inflow: false) %>
<% first_account, second_account = is_inflow ? [transfer.to_account, transfer.from_account] : [transfer.from_account, transfer.to_account] %> - <%= link_to first_account.name, account_path(first_account, tab: "activity"), class: "hover:underline", data: { turbo_frame: "_top" } %> + + <%# Check if first_account exists before creating link %> + <% if first_account %> + <%= link_to first_account.name, account_path(first_account, tab: "activity"), class: "hover:underline", data: { turbo_frame: "_top" } %> + <% else %> + + Data Error: Missing account + + <% end %> + + <%# Use icon helper per conventions %> <%= icon(is_inflow ? "arrow-left" : "arrow-right", size: "sm") %> - <%= link_to second_account.name, account_path(second_account, tab: "activity"), class: "hover:underline", data: { turbo_frame: "_top" } %> + + <%# Check if second_account exists before creating link %> + <% if second_account %> + <%= link_to second_account.name, account_path(second_account, tab: "activity"), class: "hover:underline", data: { turbo_frame: "_top" } %> + <% else %> + + Data Error: Missing account + + <% end %>