сбой приложения exec rake при переносе атрибута пользователя в почтовый ящик

0 Emjay [2017-08-06 08:40:00]

Я не могу передать bundle exec rake или rspec spec даже если все индивидуальные тесты проходят, а почтовая программа работает с ошибками (например, он успешно отправляет письмо со всеми атрибутами). Это приводит к сбою моей сборки Travis. Ошибка:

/app/views/team_mailer/new_team.html.erb:8:in '_app_views_team_mailer_new_team_html_erb__3000815885147353905_70129791802460': undefined method 'first_name' for nil:NilClass (ActionView::Template::Error)

/app/models/team.rb

class Team < ApplicationRecord
  belongs_to :user
  has_many :picks, dependent: :destroy
  validates :name, presence: true

  after_create :send_new_team_email

  private
  def send_new_team_email
    TeamMailer.new_team(self).deliver_now
  end
end

/app/controllers/teams_controller.rb

class TeamsController < ApplicationController
  before_action :authorize_user_for_delete, only: [:destroy]
  before_action :authorize_user_for_edit, only: [:edit]

  def index
    @user_teams = Team.where(user_id: current_user)
  end

  def new
    @team = Team.new
  end

  def create
    @team = current_user.teams.build(team_params)

    if @team.save
      flash[:notice] = "Team successfully created."
      redirect_to @team
    else
      flash.now[:alert] = "Error creating team. Please try again."
      render :new
    end
  end

  private
  def team_params
    params.require(:team).permit(:name)
  end

/app/mailers/team_mailer.rb

class TeamMailer < ApplicationMailer
  default from: "[email protected]"

  def new_team(team)
    headers["Message-ID"] = "<#{team.user_id} team/#{team.id}@Pcoolsite.com>"
    headers["In-Reply-To"] = "<#{team.user_id} team/#{team.id}@coolsite.com>"
    headers["References"] = "<#{team.user_id} team/#{team.id}@coolsite.com>"

    @team = team

    mail(to: '[email protected]', subject: "New team created")
  end
end

/app/views/team_mailer/new_team.html.erb

<!DOCTYPE html>
<html>
  <head>
    <meta content = "text/html; charset=UTF-8" http-equiv="Content-Type" />
  </head>

  <body>
    <%= "#{@team.user.first_name} #{@team.user.last_name} created #{@team.name}" %>
  </body>
</html>

ruby ruby-on-rails


1 ответ


1 Решение Emjay [2017-08-19 22:01:00]

Я решил это, утверждая, что класс не равен нулю в /app/views/team_mailer/new_team.html.erb.

Я также понял, что это излишне, чтобы передать пользователю. Итак, я исключил прохождение этого между моделями, контроллерами и представлениями и просто использовал @team.user.first_name and @team.user.last_name.

Итак, полная строка в /new_team.html.erb теперь читает:

<%= "#{@team.user.first_name} #{@team.user.last_name} created #{@team.name}" if @team.user %>

Я обновил исходную публикацию, чтобы показать оптимизированный (удаленный пользователь) подход.