Я знаю, что если я напишу «redirect_to» вместо «render: action», я потеряю ошибки моего @ объекта.
Мой код:
def play
@room = params[:id][0,1]
@current_players = CurrentPlayer.all(:conditions => {:room => @room})
end
def join
@new_player = CurrentPlayer.new(:user_id => current_user.id, :team_id => nil, :room => params[:room], :mode => params[:mode], :ip => request.remote_ip)
if @new_player.save
@game = create_game(params[:room], params[:mode])
if @game
flash[:notice] = 'Game created'
return (redirect_to :action => "game_details", :recent => true)
else
flash[:error] = 'Game not created'
end
else
return render(:action => 'play')
end
redirect_to_back
end
Если пользователь щелкнет ссылку «присоединиться» в play.html.erb, Rails отправит запрос на действие «присоединиться», а затем, если были ошибки, мне нужно показать их пользователю.
Но я не могу написать только redirect_to, и мой код теперь:
def join
@new_player = CurrentPlayer.new(:user_id => current_user.id, :team_id => nil, :room => params[:room], :mode => params[:mode], :ip => request.remote_ip)
if @new_player.save
@game = create_game(params[:room], params[:mode])
if @game
flash[:notice] = 'Game created'
return (redirect_to :action => "game_details", :recent => true)
else
flash[:error] = 'Game not created'
end
else
# == Very ugly and not DRY (just copypaste from 'play' action) ==
@room = params[:id][0,1]
@current_players = CurrentPlayer.all(:conditions => {:room => @room})
# ===
return render(:action => 'play')
end
redirect_to_back
end
Как мне избежать этого кода?