сбой приложения 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 %>
Я обновил исходную публикацию, чтобы показать оптимизированный (удаленный пользователь) подход.