Rails показывает повышенное исключение в виде формы - PullRequest
0 голосов
/ 24 ноября 2018

В моем приложении пользователь может принадлежать команде.Капитан может пригласить любого пользователя в любую команду, если этот пользователь еще не принадлежит команде.У меня есть модель приглашения, которая проверяет, принадлежит ли этот пользователь к команде, перед отправкой приглашения.

class Invite < ApplicationRecord
  belongs_to :team
  belongs_to :user

  before_create :check_membership

  def check_membership
    @memberships = self.user.teams.map { |t| t.id }

    if @memberships.include?(self.team.id) 
      raise 'That user is already on a team'
    end
  end
end

Если пользователь принадлежит к команде и приглашен капитаном, я хочу, чтобы былсообщение об ошибке, предупреждающее капитана о том, что он уже находится в команде.

Для этого я создал метод, позволяющий проверить, принадлежит ли пользователь команде, и, если он это делает, вызвать исключение.Я хотел бы показать это исключение в представлении, поместив его в форму.

<% if invite.errors.any? %>
  <ul>
    <% test.errors.full_messages.each do |message| %>
      <li><%= message %></li>
    <% end %>
  </ul>
<% end %>

Когда я отправляю приглашение тестовому пользователю, оно просто показывает это сообщение об ошибке на типичной странице ошибки rails, а непоказывать сообщение об ошибке над формой при повторной визуализации.Как сделать так, чтобы это сообщение об исключении отображалось в форме после его отправки?

enter image description here

1 Ответ

0 голосов
/ 24 ноября 2018

Вы не хотите вызывать исключение, вы просто хотите добавить проверку к модели приглашения.

validate :check_membership

def check_membership
  return if persisted?
  if user.teams.include?(team)
    errors.add(:base, 'The user is already on the team')
  end
end

В этом случае errors для приглашения будет включать вышеуказанную ошибку, если она произойдет.

Вы действительно можете перехватить условия, вызвав исключение, но это, по замыслу, остановит программу, если вы не спасетесь от исключения.Что вы могли бы сделать, но это слишком для дела.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...